- Dwitter เป็นแพลตฟอร์มที่ให้คุณสร้างและแชร์เดโมภาพด้วยโค้ด JavaScript ภายใน 140 ตัวอักษร
- แต่ละโพสต์เรียกว่า 'dweet' และจะแสดงกราฟิกแอนิเมชันที่รันได้ทันทีพร้อมกับโค้ด
- ผู้ใช้สามารถโต้ตอบกันผ่านคอมเมนต์, รีมิกซ์, แฮชแท็ก ทำให้เกิดการดัดแปลงและสร้างสรรค์ต่อยอดจากโค้ดอย่างคึกคัก
- สามารถสำรวจคอนเทนต์ยอดนิยมได้ด้วยเกณฑ์การจัดเรียงหลากหลาย เช่น hot, new, top (สัปดาห์/เดือน/ปี/ทั้งหมด)
- เป็นพื้นที่ทดลองการเขียนโปรแกรมเชิงสร้างสรรค์ที่สร้างเอฟเฟ็กต์ภาพซับซ้อนด้วยโค้ดสั้นมาก
ภาพรวมของ Dwitter.net
- Dwitter.net เป็นเว็บแพลตฟอร์มสำหรับสร้างเดโมภาพด้วยโค้ด JavaScript ที่จำกัดไว้ 140 ตัวอักษร
- เดโมแต่ละชิ้นเรียกว่า 'dweet' และสร้างกราฟิกแอนิเมชันที่รันทันทีในเบราว์เซอร์
- ผู้ใช้สามารถล็อกอินเพื่อเขียน dweet ใหม่ หรือ**รีมิกซ์(remix)**ผลงานที่มีอยู่แล้วได้
- เว็บไซต์มีเกณฑ์การจัดเรียงหลายแบบ เช่น hot, new, top (สัปดาห์/เดือน/ปี/ทั้งหมด) เพื่อสำรวจคอนเทนต์ยอดนิยม
- dweet แต่ละรายการมีฟังก์ชันแชร์, เต็มหน้าจอ, รายงาน, คอมเมนต์ให้ใช้งาน
ตัวอย่าง dweet เด่น
- “Bubble universe colour expansion” ได้รับการยกย่องเรื่องสีสันหลากหลายและเอฟเฟ็กต์ภาพที่ชัดเจน
- ในคอมเมนต์มีתגובותอย่าง “A whole universe!”
- “Ants! 🐜” เป็นผลงานที่ถ่ายทอดฝูงมดด้วยโค้ดสั้น ๆ และได้รับคำชมอย่าง “god level dweetage!”
- “Trees, shadows, hills.” เป็นแอนิเมชันที่บรรยายต้นไม้ เงา และเนินเขา พร้อมเสียงชื่นชมว่า “Amazing stuff!”
- “Flight Over Destroyed City ✈️” สร้างฉากการบินเหนือเมืองที่ถูกทำลาย
- ในคอมเมนต์มีเสียงตอบรับเชิงขำขันอย่าง “i love the smell of sulfur and uranium in the morning” ตามมา
- “Solar Orbit ☀️🌘” สร้างวงโคจรของดาวเคราะห์ภายใน 140 ไบต์ และทำให้ผู้ชมทึ่งกับคำพูดว่า “How did you fit a whole planetary system in 140 BYTES OF JAVASCRIPT!?!?”
กิจกรรมชุมชนและวัฒนธรรมรีมิกซ์
- dweet แต่ละชิ้นสามารถรีมิกซ์ต่อจากโค้ดของผู้ใช้อื่นได้ โดยมีการระบุลิงก์ต้นฉบับไว้อย่างชัดเจน
- ในคอมเมนต์มีทั้งฟีดแบ็กเชิงเทคนิค ความเห็นหลังรับชม และมุกตลกผสมกัน จนเกิดบรรยากาศชุมชนที่คึกคัก
- ผ่านฟังก์ชันแฮชแท็ก ผู้ใช้สามารถสำรวจตามหัวข้ออย่าง #space, #galaxy, #lighting, #scene ได้
คุณลักษณะทางเทคนิค
- โค้ดส่วนใหญ่ถูกบีบอัดในรูปแบบ eval(unescape(escape
...)) และพยายามสร้างเอฟเฟ็กต์ภาพให้ได้มากที่สุดภายใต้ข้อจำกัด 140 ตัวอักษร
- ภายในโค้ดจะเน้นการใช้Canvas API เพื่อแสดงรูปทรง สี และการเคลื่อนไหว
- dweet แต่ละชิ้นจะแสดงความยาวโค้ดไว้ด้วย (เช่น “// 136/140”) ทำให้เทคนิคการปรับแต่งและการบีบอัดเป็นองค์ประกอบสำคัญ
พื้นที่ทดลองของการเขียนโปรแกรมเชิงสร้างสรรค์
- Dwitter เป็นรูปแบบที่ผสานcode golf กับศิลปะเชิงภาพเข้าด้วยกัน และกระตุ้นให้เกิดการแข่งขันด้านความคิดสร้างสรรค์ระหว่างนักพัฒนา
- กระบวนการสร้างผลลัพธ์ภาพที่ซับซ้อนจากโค้ดเรียบง่ายถูกมองว่าเป็นสุนทรียศาสตร์ของการเขียนโปรแกรม
- แพลตฟอร์มนี้ทำหน้าที่เป็นพื้นที่ทดลองที่สำรวจเส้นแบ่งระหว่างการแสดงออกทางศิลปะกับการบีบอัดเชิงเทคนิค
2 ความคิดเห็น
น่าทึ่งจริงๆ
ความคิดเห็นจาก Hacker News
ขอโทษที่ทำให้ต้องรีบูตเซิร์ฟเวอร์ชั่วคราว ตอนที่เคยเกิดเรื่องแบบนี้ครั้งก่อน ผมได้บทเรียนเลยไปปรับขนาด DigitalOcean droplet แล้ว
ตัวอย่างเช่น รูปแบบอย่าง
eval(unescape(escape\<<97 wide characters>>`.replace(/u../g,'')))` ที่ใช้ยูนิโค้ด 97 ตัวเพื่อกู้คืนเป็น ASCII 194 ตัวผมเลยอยากให้มีข้อตกลงแบบบทสนทนาระหว่าง Ford Prefect กับ Mr Prosser ที่ว่า “ถือว่าใส่ 194 ตัวอักษรลงใน 140 ตัวแล้วก็แสดงมันไปเถอะ”
ตรรกะก็คล้ายกับข้อจำกัด 4096 ไบต์ของ demoparty ที่ในทางปฏิบัติก็คือบีบอัดไฟล์ 12~20KB ให้พอดีด้วย Crinkler
ผมไปขุดบทสัมภาษณ์เก่ามา เจอว่าน่าสนใจดี: บทสัมภาษณ์บน Medium
เวทมนตร์ที่แท้จริงอยู่ที่ ชุมชน: ชุมชน Discord
แอนิเมชัน GIF
รายละเอียดดูได้ใน โพสต์บนฟอรัม Autohotkey
ยิ่งมีข้อจำกัด ความหลากหลายก็ยิ่งระเบิดออกมา ทั้งภาพลวงตา ประโยคสั้น ๆ และการทดลองที่พุ่งไปในทิศทางไม่คาดคิด
ข้อจำกัดช่วยบังคับให้โฟกัส และทำให้ต้นทุนของความล้มเหลวต่ำลงจนกล้าทดลองมากขึ้น
แพลตฟอร์มส่วนใหญ่มักพยายามขยายความคิดสร้างสรรค์ด้วยการเพิ่มฟีเจอร์ แต่กลับทำให้ซับซ้อนขึ้น
ผมนึกถึงกฎที่ว่า ข้อจำกัดสร้างความสนุก อยู่บ่อย ๆ
เลยสงสัยว่ามีตอนไหนบ้างที่ข้อจำกัดทำให้ผลลัพธ์ดีขึ้น และตอนไหนที่มันให้ความรู้สึกเหมือนเป็นเรื่องสมมติ
ประสบการณ์นั้นเปลี่ยน วิธีคิดเรื่องโค้ด ของผมไปแบบสิ้นเชิง
ในคอมมูนิตี้เล็ก ๆ เราแชร์เทคนิคประหยัดไบต์กัน พร้อมสร้างทุกอย่างตั้งแต่ Mandelbrot renderer ไปจนถึง Sudoku solver
ผ่านไป 10 ปี ผมถึงกับช็อกตอนเจอ ตัว implementation UUID ที่ตัวเองเคยเขียนไว้ใน codebase ของบริษัท
ลิงก์ที่เกี่ยวข้อง: วิดีโอ YouTube, Byte-saving techniques, UUID gist
js_funcจะถูกเรียกเป็น tagged template literalต่อไปผมคงได้ลองใช้
console.log\weeee`` แล้วตัวอย่าง: htm, lit.dev
ผมเก็บข้อมูล SVG ขนาดเล็กไว้ในอินไลน์โค้ด แล้วทำ sampler ขนาด 13KB ได้
ลิงก์ตัวอย่าง
ตัวอย่าง:
evalแทนที่จะเป็นแบบนั้น น่าจะเพิ่ม ชอร์ตคัต ให้มากขึ้น เช่น
sหมายถึงMath.signแต่จริง ๆ ยังขยายได้อีกถ้าไปเปลี่ยนทีหลัง ก็จะเสีย เป้าหมายตายตัว ไปและเสน่ห์ลดลง
beta.dwitter.net ปรับปรุงการเข้าถึงในแง่การเข้ารหัส แต่ยังคงเป้าหมายตายตัวไว้
ข้อยกเว้นอย่าง Math.sin หรือ CSS color encoder ถูกเพิ่มเข้ามาด้วยเหตุผลเชิงปฏิบัติ
ใน Dwitter 2 ก็เคยมีการคุยกันเรื่องใส่ อักขระที่กำหนดไว้ล่วงหน้า เพิ่มขึ้น เพื่อให้ผู้ใช้ขยายเองได้
สุดท้ายสิ่งสำคัญคือ ความคิดสร้างสรรค์ แม้จะบิดกติกา แต่นั่นเองก็เป็นการกระทำที่สร้างสรรค์
evalได้จากรากยังอาจบีบอัดข้อมูลด้วย string literal ได้ แต่การบีบอัดโค้ดทั้งก้อนจะลดลง
evalกฎก็คือกฎ (หรือไม่มีกฎเลย)