ฉันแค่ต้องการเรียนเกี่ยวกับ [x] แต่การค้นหาแคตตาล็อกออนไลน์นั้นช้ามากและผลลัพธ์ของฉันไม่เกี่ยวข้องกับส่วนใหญ่ wtf?
ฮาร์วาร์ดมีเว็บไซต์ค้นหาหลักสูตรมากมาย แต่ไม่มีสิ่งใดที่ดี โครงการนี้เป็นความพยายามที่จะนำปัญหามาใช้อย่างจริงจังมากขึ้น: เขียนซอฟต์แวร์ประสิทธิภาพสูงและตั้งค่าเริ่มต้นที่ดีเพื่อให้ผู้คนสามารถรับคำแนะนำที่ดีขึ้นและมีประโยชน์มากขึ้นได้เร็วขึ้น 100 เท่า
classes.wtf เป็นเครื่องมือค้นหาแบบกำหนดเองที่เขียนใน GO ที่มุ่งเน้นไปที่ความเร็วและคุณภาพของผลลัพธ์ มันถูกสร้างขึ้นบนฐานข้อมูล Redis ในหน่วยความจำซึ่งทำงานเป็นกระบวนการย่อยของแอปพลิเคชัน ดัชนีนี้รองรับการค้นหาฟัซซี่ข้อความเต็มรูปแบบและคำนำหน้าในทุกฟิลด์พร้อมกับไวยากรณ์การสืบค้นที่หลากหลาย
ส่วนหน้าเป็นเว็บไซต์คงที่ที่สร้างขึ้นด้วย Svelte และจะประมวลผลการค้นหาทันทีหลังจากการกดแป้นพิมพ์ทุกครั้ง เป้าหมายคือสำหรับการร้องขอการคำนวณการตอบสนองและการเรนเดอร์} ทั้งหมดที่จะใช้เวลาต่ำกว่า 30 มิลลิวินาที
"ตอนนี้แขวนอยู่เพียงไม่กี่วินาที" ฉันได้ยินคุณพูด ความเร็วของแสงไม่เร็วพอสำหรับข้อมูลที่จะเดินทางไปทั่วโลกในเวลาแฝงนี้! แต่ไม่ต้องกังวลไม่เป็นไร เราเรียกใช้แบบจำลองหลายครั้งในสถานที่กระจายทางภูมิศาสตร์โดยใช้ Fly.io และคำขอเส้นทางไปยังที่ใกล้ที่สุด แบบจำลองแต่ละแบบใช้เครื่องมือค้นหาข้อความแบบเต็มของตัวเองดังนั้นพวกเขาจึงมีความเป็นอิสระอย่างสมบูรณ์
(แบบจำลองเซิร์ฟเวอร์ที่ใกล้ที่สุดไปยัง Cambridge, MA อาศัยอยู่ใน Secaucus, NJ ห่างออกไปเพียง 200 ไมล์)
ทำไมคุณถึงทำสิ่งนี้? ฉันรู้สึกหงุดหงิดกับการค้นหาชั้นเรียนที่น่ารำคาญแค่ไหน และฉันเป็นวิศวกรซอฟต์แวร์ระบบซึ่งทำให้ฉันต้องทำสิ่งต่าง ๆ เร็วขึ้น
ทำไมถึงเขียนใน GO? เพราะฉันเขียนสิ่งนี้ในช่วงสุดสัปดาห์และต้องการภาษาระบบที่รวดเร็วจริงๆเพื่อทำซ้ำในขณะที่ยังมีเวลาแฝงต่ำ ความเรียบง่ายและเวลารวบรวมช่วยในเรื่องนี้ ฉันอาจเขียนใหม่ในสนิมถ้าฉันตัดสินใจที่จะใช้เวลาอีกสองสามสัปดาห์
ทำไมคุณถึงใช้ Redis? มันเร็วจริงๆมันเก็บข้อมูลไว้ในหน่วยความจำ API นั้นเรียบง่ายและแข็งแกร่งและมีโมดูลการค้นหาข้อความที่ดีที่สุดในชั้นเรียน สำหรับชุดข้อมูลขนาดนี้การฝัง Redis จะช่วยให้คุณมีประสิทธิภาพที่ไม่มีใครเทียบได้ด้วยค่าใช้จ่ายและความพยายามของทางเลือก
คุณสามารถทำสิ่งนี้ให้กับโรงเรียนของฉันได้หรือไม่? รหัสคือโอเพ่นซอร์สทั้งหมดและคุณยินดีที่จะดูหรือพอร์ตมัน! หากคุณกำลังทำสิ่งนี้โปรดพิจารณาติดต่อทาง Twitter @ekzhang1 หรือทางอีเมลเนื่องจากฉันชอบที่จะได้ยินเกี่ยวกับงานของคุณ
ข้อมูลมาจากไหน? แคตตาล็อกหลักสูตรได้รับการจัดทำดัชนีจากชื่อหลักสูตรที่เปิดเผยต่อสาธารณะและคำอธิบายออนไลน์ ดูรหัสใน datasource/ Folder
คุณต้องไป 1.20 และ Docker เพื่อทำงานบนแบ็กเอนด์และ node.js v18 สำหรับส่วนหน้า
สิ่งนี้โหลดข้อมูลจากหลักสูตรสำหรับเงื่อนไขการศึกษาก่อนฤดูใบไม้ผลิปี 2022 (AY 2022) และจาก My.harvard เริ่มต้นในฤดูใบไม้ร่วงปี 2022 (AY 2023) คุณสามารถปรับแต่งสคริปต์การโหลดข้อมูลหากคุณต้องการจัดทำดัชนีชุดหลักสูตรที่แตกต่างกัน
go run . download -year 2019 # -> data/courses-2019.json
go run . download -year 2020 # -> data/courses-2020.json
# ... and so on
go run . download -year 2025 # -> data/courses-2025.jsonน่าเสียดายที่ My.harvard ไม่อนุญาตให้คุณดูหลักสูตรจากปีการศึกษาก่อนหน้านี้ดังนั้นปีระหว่างปี 2023 และหลักสูตรปัจจุบันอาจไม่ส่งคืนข้อมูลใด ๆ สำหรับสิ่งเหล่านั้นคุณสามารถดาวน์โหลดชุดข้อมูลที่โหลดไว้ล่วงหน้าที่เหมาะสมจากถัง S3 สาธารณะของเรา
บันทึกประวัติศาสตร์เกี่ยวกับข้อมูลที่โหลดไว้ล่วงหน้า:
เมื่อคุณมีข้อมูลหลักสูตรทุกปีคุณสามารถรวมเข้ากับไฟล์เดียวกับ courses.json เดียว JSON กับหลักสูตรทั้งหมดซึ่งสามารถค้นหาได้โดย WebApp
go run . combine สิ่งนี้จะค้นหาไฟล์ทั้งหมดที่ชื่อ data/courses-{year}.json และรวมเข้าด้วยกัน
นอกจากนี้คุณยังสามารถทำแบบผกผันแยก data/courses.json เดียว JSON เป็น data/courses-{year}.json
go run . splitเซิร์ฟเวอร์รับฟังการร้องขอเว็บบนพอร์ต 7500 (นอกจากนี้ยังวางไข่อินสแตนซ์ Redis โดยใช้ Docker บนพอร์ต 7501)
go run . server -local -data data/courses.json คุณยังสามารถเรียกใช้กับไฟล์ข้อมูลอื่น ๆ ตัวอย่างเช่นหากคุณผ่าน data/courses-2021.json คุณจะได้รับผลการค้นหาสำหรับปีการศึกษาตั้งแต่ฤดูใบไม้ร่วงปี 2020 ถึงฤดูใบไม้ผลิปี 2021
ตอนนี้คุณสามารถพัฒนาในส่วนหน้าซึ่ง PROXIES API คำขอไปยังพอร์ตเซิร์ฟเวอร์โดยอัตโนมัติ
npm install
npm run dev
เยี่ยมชม localhost:5173 เพื่อดูเว็บไซต์
docker build -t classes.wtf .
docker run -it --rm -p 7500:7500 classes.wtfaws s3 cp data/courses- $YEAR .json s3://classes.wtf
aws s3 cp data/courses.json s3://classes.wtffly deployดูหน้าผู้มีส่วนร่วม ผู้ดูแลปัจจุบันสามารถติดต่อทางอีเมลได้ที่ [email protected] ได้รับใบอนุญาตภายใต้ใบอนุญาต MIT
ขอบคุณนักเรียนจำนวนมากที่ช่วยโฆษณาเว็บไซต์ในชุมชนวิทยาลัย