โฮสต์เว็บไซต์ด้วยบุหรี่ไฟฟ้าแบบใช้แล้วทิ้ง
(bogdanthegeek.github.io)- โปรเจกต์เชิงทดลองที่นำไมโครคอนโทรลเลอร์ ARM Cortex-M0+ สมรรถนะต่ำซึ่งฝังอยู่ในบุหรี่ไฟฟ้าแบบใช้แล้วทิ้งมารันเว็บเซิร์ฟเวอร์
- วิเคราะห์ชิป PY32F002B ของ PUYA ที่มี แฟลช 24KiB และ RAM 3KiB พร้อมสร้างการเชื่อมต่อเครือข่ายด้วยวิธี SLIP
- ใช้ Semihosting, โปรโตคอล SLIP และสแตก uIP TCP/IP เพื่อพอร์ตการสื่อสาร TCP/IP และความสามารถของ HTTP server ผ่าน virtual tty
- เดิมทีช้ามาก แต่หลังจาก ปรับแต่งบัฟเฟอร์ และปรับปรุงการประมวลผลข้อมูล ก็ทำให้การตอบสนองและความเร็วในการโหลดหน้าเพิ่มขึ้นอย่างมาก
- ทำให้สามารถรันโค้ดเซิร์ฟเวอร์แบบไดนามิกและให้บริการ API endpoint ได้ แม้อยู่ในสภาพแวดล้อมที่มีหน่วยความจำต่ำ
- มีการเผยแพร่โค้ดแล้ว และแม้จะโฮสต์ใช้งานจริงได้ แต่ก็ยังมีข้อจำกัดด้านทรัพยากรอย่างหน่วยความจำ
บทนำ
- ขอชี้แจงก่อนว่าบทความนี้ไม่ได้ให้บริการผ่านเว็บเซิร์ฟเวอร์ที่รันอยู่บนบุหรี่ไฟฟ้าแบบใช้แล้วทิ้งโดยตรง แต่ให้บริการเนื้อหาเดียวกันผ่านเซิร์ฟเวอร์แยกต่างหาก
- สามารถดูตัวอย่างการทำงานจริงได้ที่ http://ewaste.fka.wtf/
ที่มา
- ตลอดหลายปีที่ผ่านมา ผู้เขียนได้รวบรวมบุหรี่ไฟฟ้าแบบใช้แล้วทิ้งจากคนรู้จักเพื่อนำ แบตเตอรี่ มาใช้ซ้ำ
- ช่วงหลังเริ่มสนใจที่อุปกรณ์บุหรี่ไฟฟ้าแบบใช้แล้วทิ้งมีความก้าวหน้ามากขึ้นเรื่อย ๆ และเริ่มมาพร้อม USB-C และแบตเตอรี่แบบชาร์จซ้ำได้
- ระหว่างการแยกชิ้นส่วนได้พบไมโครคอนโทรลเลอร์ ARM Cortex-M0+ ที่มีแฟลชในตัว ชื่อ PUYA ซึ่งเป็นชิปที่รู้จักกันดีในฐานะไมโครคอนโทรลเลอร์ราคาประหยัด
- ผู้เขียนเก็บไมโครคอนโทรลเลอร์เหล่านี้มาจากหลายรุ่น และพบว่ามีการติดป้ายกำกับขาดีบักไว้ ทำให้ง่ายต่อการวิเคราะห์
ฮาร์ดแวร์ที่ใช้
- บนชิปมีสกรีนว่า
PUYA C642F15แต่คาดว่าแท้จริงแล้วอยู่ในตระกูล PY32F002B - สเปกหลัก:
- คอร์ 24MHz Cortex-M0+
- แฟลช 24KiB
- RAM 3KiB
- มีอุปกรณ์ต่อพ่วงหลายอย่าง แต่ไม่ได้ใช้งานในโปรเจกต์นี้
- แม้ประสิทธิภาพจะต่ำเมื่อเทียบกับสมาร์ตโฟนทั่วไป แต่ในสภาพแวดล้อมแบบฝังตัวก็ยังสร้างเว็บเซิร์ฟเวอร์แบบง่าย ๆ ได้เพียงพอ
การเชื่อมต่อเครือข่าย
- แม้ไม่ใช่แนวคิดใหม่ทั้งหมด แต่ผู้เขียนเกิดไอเดียในการรันเว็บเซิร์ฟเวอร์ระหว่างทดลองแนวคิด semihosting
- Semihosting คือวิธีจำลอง syscall บนระบบ ARM แบบฝังตัว
- เมื่อนำค่า/พอยน์เตอร์ใส่ไว้ในรีจิสเตอร์แล้วเรียก breakpoint ดีบักเกอร์จะตีความและจัดการการทำงานให้
- โดยทั่วไปใช้เพื่อส่งล็อก แต่ก็สามารถทำการสื่อสารข้อมูลแบบสองทางได้
- อุปกรณ์ USB serial รองรับโปรโตคอล SLIP(Serial Line Internet Protocol) จึงนำมาใช้เป็นอินเทอร์เฟซเครือข่าย
- บน Linux (และบางส่วนของ macOS) สามารถสร้างสภาพแวดล้อม เครือข่าย SLIP ผ่าน virtual tty ด้วย
slattachและsocatเป็นต้นpyocd gdb -S -O semihost_console_type=telnet -T $(PORT) $(PYOCDFLAGS) & socat PTY,link=$(TTY),raw,echo=0 TCP:localhost:$(PORT),nodelay & sudo slattach -L -p slip -s 115200 $(TTY) & sudo ip addr add 192.168.190.1 peer 192.168.190.2/24 dev sl0 sudo ip link set mtu 1500 up dev sl0 - เลือกใช้ uIP เป็นสแตก TCP/IP เพราะมีขนาดเล็กมาก ไม่ต้องใช้ RTOS และพอร์ตได้ง่าย
- จากตัวอย่างของ uIP ได้นำ HTTP server มาใช้ และพอร์ตโค้ด SLIP ให้เข้ากับวิธี semihosting จนสามารถเปิดใช้งานเว็บเซิร์ฟเวอร์ได้สำเร็จ
- เนื่องจากสถาปัตยกรรม ARM มีปัญหาเรื่องการจัดแนว 16 บิต จึงได้แก้ไขสคริปต์สร้าง filesystem และแปลงผลด้วย Perl
การปรับความเร็วให้เหมาะสม
- ในช่วงแรกมีความเร็วตอบสนองช้ามาก โดย ping 1.5 วินาที, packet loss 50% และโหลดหน้าเว็บนานเกิน 20 วินาที
- สาเหตุคือโอเวอร์เฮดที่สูงมากของการรับส่งข้อมูลแบบไบต์ต่อไบต์
- จึงใช้ RAM 3KiB อย่างเต็มที่ เพิ่ม ring buffer และปรับให้ฟังก์ชัน SLIP ป้อนข้อมูลเป็นชุด
- ฝั่งการเขียนก็แบ่งส่งเป็นแบตช์เช่นกัน เพื่อให้การส่งข้อมูลและการล้างสถานะทำได้รวดเร็ว
- หลังการปรับแต่งสามารถทำได้ถึง ping 20ms, ไม่สูญหาย, โหลดหน้า 160ms
- การใช้ RAM และแฟลชทั้งหมด:
- แฟลช: 5,116B จาก 24KB (20.82%)
- RAM: 1,380B จาก 3KB (44.92%)
- มีพื้นที่เพียงพอสำหรับให้บริการคอนเทนต์บล็อกทั้งหมดได้สบาย และยังสามารถรันโค้ด C ฝั่งเซิร์ฟเวอร์ได้อีกด้วย
ฟีเจอร์อื่น ๆ และบทสรุป
- ผู้เขียนได้สร้าง API endpoint เอง เพื่อส่งคืนจำนวนครั้งที่มีการร้องขอหน้าแรกและ unique ID ของไมโครคอนโทรลเลอร์
- นี่เป็นการทดลองที่สร้างได้ถึงเว็บเซิร์ฟเวอร์แบบไดนามิกและ API บนฮาร์ดแวร์สเปกต่ำสุดขั้วและหน่วยความจำระดับน้อยมาก
6 ความคิดเห็น
ผมสนุกกับทั้งโปรเจกต์และบทความมาก อ่านเพลินมากครับ แต่พอรู้ว่ามีสิ่งที่เรียกว่าบุหรี่ไฟฟ้าแบบใช้แล้วทิ้งอยู่ด้วยก็รู้สึกตกใจมาก และคิดว่านี่มันไม่โอเคเลยนะ..
ฉันเองก็ไม่สูบบุหรี่เลยไม่รู้มาก่อน แต่ไม่นานมานี้พอเห็นว่าคาเฟ่อัตโนมัติที่เพิ่งเปิดแถวบ้านมีตู้ขายบุหรี่ไฟฟ้าแบบใช้แล้วทิ้งอยู่ด้วยก็เลยได้รู้ ด้านล่างนี้คอมเมนต์ใน Hacker News ครึ่งหนึ่งก็คงเป็นเรื่องการสิ้นเปลืองทรัพยากรอย่างน่าเหลือเชื่อเหมือนกันนะ 555
พอคอมเมนต์ไปแล้วก็ทำให้นึกสงสัยขึ้นมาว่า ถ้าเป็นตู้ขายของอัตโนมัติในคาเฟ่ไร้พนักงาน เขาตรวจสอบอายุผู้ซื้อกันยังไงนะ สงสัยว่าที่ตู้มีฟังก์ชันสแกนบัตรประชาชนด้วยหรือเปล่า..
ฉันไม่ได้สูบบุหรี่เลยนึกไม่ออกว่าเขาพูดถึงอะไร ที่แท้กำลังบอกว่าแม้จะเป็นของใช้แล้วทิ้ง แต่กลับใช้ทรัพยากรมากเกินไปนี่เอง
เวลาสูบบุหรี่ไฟฟ้าแล้วดันลืมไว้ที่ไหนสักแห่ง หรืออยู่ระหว่างเดินทาง... ก็ไม่ค่อยอยากซื้อเครื่องเพิ่มอีกเครื่องหรือกลับไปสูบบุหรี่มวน แต่ก็ยังอยากเติมนิโคติน สุดท้ายเลยมักจะไปหาที่ร้านสะดวกซื้อ
ความคิดเห็นจาก Hacker News
ถ้ากำลังมองหาฮาร์ดแวร์ที่ทั้งถูกและแรง ก็น่าลองดูดองเกิล UZ801 4G LTE (Qualcomm MSM8916) จากจีน อุปกรณ์นี้ราคาแค่ประมาณ $4~5 แต่ให้ฮาร์ดแวร์น่าประทับใจ เช่น eMMC 4GB, RAM 512MB, โมเด็ม 4G จริง ๆ (บางครั้งรองรับการสลับ 2 SIM) โดยพื้นฐานแล้วมันคือ Android SOC รุ่นเก่า จึงมีทั้ง GPU และ GPS อยู่ด้วย งานรองรับดองเกิลนี้ก็ทำไปมากพอสมควรแล้ว
ข้อมูลดองเกิล LTE ซีรีส์ Zhihe
โปรเจกต์ OpenStick
ถ้ากำลังหาฮาร์ดแวร์แพลตฟอร์มไปใช้กับโปรเจกต์ homelab แปลก ๆ แบบนี้ มันก็น่าจะเหมาะมาก
สำหรับมือใหม่ ไกด์นี้ ดูจะดีที่สุด ถ้าจะติดตั้ง Linux ต้องสำรองพาร์ทิชันเฟิร์มแวร์ไว้แล้วแฟลชกลับใหม่เพื่อให้โมเด็ม 4G ทำงานได้ การซื้อฮาร์ดแวร์ได้มากขนาดนี้ในราคาแค่ 5 ดอลลาร์นั้นแทบไม่น่าเชื่อเลย ถ้าเพิ่ม power bank เข้าไป (หรือทำเองจากแบตเตอรี่บุหรี่ไฟฟ้าที่ทิ้งแล้ว) ก็จะได้เครื่อง Linux พร้อม WiFi และ 4G ที่พกไปใช้ได้ทุกที่
ถ้าต้องการลิงก์ของ SOC แบบนี้หรือของใกล้เคียง Hackaday มีบทความเฉพาะทางพร้อมลิงก์หลากหลาย
บทความ Hackaday
ตัวอย่าง MSM8916 บน AliExpress
ผมยังเจอดองเกิล MSM8916 ที่มีหน้าจอในตัวด้วย (แต่ไม่มีข้อมูล RAM)
ดีใจที่ได้ยินเรื่อง Qualcomm MSM8916 นี่คือ Snapdragon 410 เพื่อนเก่าของผม เคยอยู่ใน Moto G3 รุ่นปี 2015 ด้วย (ทุกวันนี้ยังหยิบมาใช้กับ whatsapp บางครั้ง) บนพื้นฐาน Android (เวอร์ชัน 7) มันทำงานได้มีประสิทธิภาพพอตัวอย่างน่าประหลาดใจ ถ้าไม่ใช่งานหนักเกินไป น่าประทับใจที่ชิปเซ็ตมือถือเก่าแบบนี้ยังมีชีวิตอยู่และยังมีคนซัพพอร์ต
เกร็ดน่าสนใจคือ ชิปนี้เป็นหนึ่งในตัวแรก ๆ ที่รองรับ Android 64-bit แต่ Motorola พอร์ตไม่ทันก่อนวางขาย เลยรองรับได้แค่ Android 32-bit
มันทำให้ผมนึกถึงดองเกิล LTE ที่ Freedom Pop เคยแจก ซึ่งรัน Linux ได้ ถ้าแกะออกมาก็เข้าถึง UART ได้ด้วย
ปัญหาใหญ่ที่สุดของผมคือ
a.) โลกของอุปกรณ์อิเล็กทรอนิกส์พัฒนาเร็วเกินไป
b.) ผมขาดทั้งทักษะและเวลา เลยไม่มีความสามารถพอจะทำอะไรเท่ ๆ ด้วยของพวกนี้
เมื่อก่อนผมเคยซื้อ licheerv nano (เช่นเดียวกับ luckfox pico, คล้าย Milk-v duo) มาเพราะอยากทำ iPod nano โอเพนซอร์สที่มีแจ็กเสียง usb-c
แต่หาหน้าจอสัมผัส 2.4 นิ้ว หรือเล็กกว่า 3 นิ้ว ที่เข้ากับพอร์ต MPI ของ licheerv nano ไม่ได้เลย
จริง ๆ อาจทำเครื่องเล่นเสียงขนาดเล็กพกพาด้วย LVGL ได้ แต่สำหรับผมมันยากเกินไป
การนำอุปกรณ์แบบนี้กลับมาใช้ใหม่เป็นเรื่องที่เจ๋งมาก ถ้าวันหนึ่งทั้งเมืองถูกขับเคลื่อนด้วยการประกอบอุปกรณ์แบบนี้เข้าด้วยกัน ก็คงให้อารมณ์เหมือนฉากในหนังหลังวันสิ้นโลก
อีกด้านหนึ่ง ทุกวันนี้บุหรี่ไฟฟ้าแบบใช้แล้วทิ้งไม่ได้มีแค่ไมโครคอนโทรลเลอร์ แต่ตามข่าวล่าสุดยังมีทั้งเกมและหน้าจอในตัวด้วย นี่จึงเป็นขยะอิเล็กทรอนิกส์มหาศาล และเป็นความโง่หลายชั้นซ้อนกัน
อีกตัวอย่างหนึ่งคือชุดตรวจโควิดแบบใช้แล้วทิ้ง มันมีไมโครคอนโทรลเลอร์กับเซ็นเซอร์เชิงแสง และแสดงผลบนมือถือผ่าน Bluetooth เรื่องนี้เคยมีคุยกันในกระทู้ก่อนหน้า ที่นี่
ผมรู้ดีอยู่แล้วเรื่องแบตเตอรี่ลิเทียมที่นำกลับมาใช้ใหม่ได้อย่างสมบูรณ์ในบุหรี่ไฟฟ้าแบบใช้แล้วทิ้ง แค่นี้ก็สิ้นเปลืองมากพอแล้ว
แต่นี่มันยังมีไมโครคอนโทรลเลอร์และคอนเนกเตอร์ USB-C มาให้อีก! ผมสงสัยว่าคอนเนกเตอร์นั้นเข้าถึงได้จากภายนอกหรือว่าต้องแกะแพ็กเกจถึงจะใช้ได้
มันเป็นความโง่หลายชั้นจริง ๆ มูลค่าฮาร์ดแวร์ข้างในน่าจะเกินครึ่งของราคาสินค้าจริงด้วยซ้ำ
ผมสงสัยว่าบุหรี่ไฟฟ้าแบบใช้แล้วทิ้งเป็นขยะอิเล็กทรอนิกส์ร้ายแรงจริงไหม ของที่เราทิ้งกันอยู่เป็นประจำอย่างมือถือ รถยนต์ หรือโน้ตบุ๊ก ก็มีฮาร์ดแวร์ที่นำกลับมาใช้ใหม่ได้เยอะเหมือนกัน แต่ส่วนใหญ่ก็ไม่ได้ถูกจัดการอย่างเหมาะสมอยู่ดี ถ้าฮาร์ดแวร์ของบุหรี่ไฟฟ้ากลายเป็นมาตรฐานระดับหนึ่งขึ้นมาได้จริง ๆ ผมยังพอนึกภาพว่ามันอาจถูกเอาไปใช้ทำโปรเจกต์โรงเรียนแบบ Arduino ได้ด้วยซ้ำ
พอได้ยินเรื่องแบบนี้ผมก็นึกถึง duskOS กับ collapseOS
แค่ความจริงที่ว่าสินค้าแบบนี้ยังขายได้ ก็เป็นหลักฐานว่ากฎระเบียบยังอ่อนเกินไป
ความไม่สอดคล้องของสเปกเมื่อเทียบกับคอมพิวเตอร์ยุคเก่านั้นน่าสนใจมาก ตัวอย่างเช่น Commodore 64 ใช้ RAM 64KB คู่กับ CPU 8-bit 1MHz แต่ตอนนี้แม้แต่อุปกรณ์ใช้แล้วทิ้งที่มี RAM แค่ครึ่งเดียวของนั้น ก็ยังจับคู่กับ CPU 32-bit 24MHz แล้ว สิ่งที่ยุค 1980 คงจินตนาการไม่ออก กลับมาโผล่ในปี 2025 ในฐานะของใช้แล้วทิ้ง มันน่าประทับใจแบบประหลาด ๆ
จริง ๆ แล้ว RAM มีแค่ 3KB และแฟลช 24KB แน่นอนว่าความเร็วของแฟลชอาจใกล้เคียงหน่วยความจำเก่า ๆ บางแบบ แต่เรื่อง latency เทียบกันไม่ได้เลย
มี RAM แค่ 3KB เท่านั้น น้อยกว่า VIC-20 เสียอีก
CPU ตามมาตรฐานยุค 1980 ก็ไม่ได้สุดยอดอะไรขนาดนั้นนะ ในปี 87 Acorn Archimedes มี ARM 8MHz แล้ว แม้จะแพง แต่ก็ใช้งานกับ RAM อย่างน้อย 512KB
(ว่าแต่พอคิดว่า 1987 คือเมื่อ 38 ปีก่อนก็ตกใจเหมือนกัน)
ผมดีใจที่มีคนแสดงให้เห็นว่าอุปกรณ์แบบนี้มีประโยชน์แค่ไหน การเรียกของพวกนี้ว่า "ใช้แล้วทิ้ง" เป็นความบ้ารูปแบบหนึ่ง ผมเคยเก็บแบตเตอรี่ LiPo จากบุหรี่ไฟฟ้าที่ถูกทิ้งข้างถนนมาใช้ และแบตเหล่านี้เป็นแบตเตอรี่แบบชาร์จซ้ำได้ที่มีวงจรชาร์จในตัวด้วย ไม่ใช่ของพื้น ๆ เลย การออกแบบให้ของแบบนี้ถูกใช้ครั้งเดียวแล้วทิ้งเป็นสิ่งที่ผิดมาก
นี่แทบจะเป็นจุดสูงสุดของ "ซ่อมไม่ได้" เลยก็ว่าได้ เพราะมันถูกออกแบบมาเพื่อกันไม่ให้มีการนำกลับมาใช้ใหม่หรือชาร์จใหม่ ซึ่งขัดทั้งกับแนวคิดรักษ์โลกและจิตวิญญาณของ maker
บุหรี่ไฟฟ้าแบบใช้ซ้ำได้ก็มีอยู่ และร้านที่น่าเชื่อถือก็มักขายแต่แบบนั้น แต่สินค้าพวกนี้แพงกว่าบุหรี่ไฟฟ้าแบบใช้แล้วทิ้งมาก เลยทำให้แบบใช้แล้วทิ้งเป็นที่นิยมในหมู่ผู้ลักลอบขายหรือผู้เยาว์ (เพราะราคาถูกและเสี่ยงโดนยึด)
ผลคือมันพาให้คนหนุ่มสาวไปข้องเกี่ยวกับองค์กรอาชญากรรม และติดหนี้ทั้งที่ไม่มีเงิน ซึ่งให้ผลลัพธ์ไม่ต่างจากหนี้ค่ายา และอาจถูกใช้เป็นช่องทางดึงไปสู่การก่ออาชญากรรมอื่นเพื่อเอาเงินมาโปะได้อีก
ผมเคยดูวิดีโอสุดยอดที่มีคนเอาบุหรี่ไฟฟ้าแบบใช้แล้วทิ้งที่เก็บจากงานเทศกาลดนตรีมาทำเป็นแบตเตอรี่จักรยานไฟฟ้า
วิดีโอที่เกี่ยวข้อง
ผมไม่เข้าใจเลยว่าทำไมบุหรี่ไฟฟ้าแบบใช้แล้วทิ้งถึงยังถูกกฎหมายอยู่ ผมเคยหวังว่าคนรุ่นหลัง 386 จะใส่ใจเรื่องการสิ้นเปลืองทรัพยากรมากกว่านี้ แต่ก็ผิดหวัง
สักวันหนึ่งต้องมีทนายออกมาอธิบายแน่ว่าทำไมของที่มีทั้ง USB C และแบตเตอรี่แบบชาร์จได้ ถึงยังถูกจัดว่าเป็น "ใช้แล้วทิ้ง"
ที่จริงเหตุผลที่มันถูกทำมาในรูปแบบนี้ ก็เพื่อให้สามารถอ้างได้ว่าในทางเทคนิคมันใช้ซ้ำได้ จึงยังขายได้ในพื้นที่ที่ห้ามบุหรี่ไฟฟ้าแบบใช้แล้วทิ้ง
มันคือรูปแบบการขายที่จงใจอาศัยพฤติกรรมของผู้ใช้บางส่วนที่ซื้อซ้ำและทิ้งอยู่เรื่อย ๆ
ผมไม่เข้าใจเลยว่าทำไมต้องซื้อแบบใช้แล้วทิ้ง ทั้งที่ก็มีบุหรี่ไฟฟ้าแบบใช้ซ้ำได้เต็มรูปแบบอยู่แล้ว พูดตรง ๆ ผมคิดว่ามันมีประโยชน์แค่ในฐานะเครื่องมือช่วยเลิกบุหรี่เท่านั้น
มันก็เหมือนกับกฎควบคุมถุงพลาสติกที่ทำให้มีการขายถุงที่หนาขึ้นในราคา 10 เซ็นต์ เพราะอย่างน้อยก็อ้างได้ว่าเป็นแบบ "ใช้ซ้ำได้"
บางรุ่นมีพ็อด/แทงก์ที่เปลี่ยนได้ แต่ส่วนใหญ่ไม่มีชิ้นส่วนใดเลยที่ผู้ใช้จะซ่อมหรือปรับแต่งได้เอง พอน้ำยาลดลงถึงระดับหนึ่ง คอยล์ก็จะเริ่มไหม้ แล้วสุดท้ายก็ต้องทิ้งทั้งชิ้น มีร้านบางแห่งบอกว่ารับคืนของใช้แล้วไปแยกชิ้นส่วนและจัดการอย่างเหมาะสม แต่ผู้ใช้ส่วนใหญ่ก็น่าจะทิ้งลงขยะทั่วไปเฉย ๆ
เหตุผลที่มี USB C ก็เพราะแบตเตอรี่ให้ความจุไม่พอกับปริมาณน้ำยาที่บรรจุมา สุดท้ายเลยต้องชาร์จได้ราว 2~3 ครั้งก่อนที่น้ำยาจะหมด
บุหรี่ไฟฟ้าแบบใช้แล้วทิ้งเป็นสิ่งที่ผมไม่เข้าใจเลยว่าสังคมทำให้มันกลายเป็นเรื่องปกติได้อย่างไร
สังคมมักมีแนวโน้มจะยอมรับสิ่งที่มีงบโฆษณาให้เป็นเรื่องปกติ
และยังมีข้อเท็จจริงที่มองข้ามไม่ได้ว่า มันสามารถทำลายปอดของคนได้อย่างหนักในเวลาอันสั้นมาก
ของเตรียมรับวันสิ้นโลก: กระสุน อาหารกระป๋อง น้ำดื่ม? ไม่ใช่
แต่คือ geek bar 1,200 ชิ้นที่เก็บไว้ในกรงฟาราเดย์
ขอสดุดีการแฮ็ก! ผมคิดว่านี่แหละคือสิ่งที่ Hacker News มีไว้เพื่อ บทความยอดเยี่ยมและโปรเจกต์สนุกมาก
สถานะของเทคโนโลยีทุกวันนี้ช่างประหลาดจริง ๆ AI ไม่ได้มาแทนที่งานของเรา แต่มาวาดรูปให้เรา แล้วตอนนี้เรายังโฮสต์เว็บไซต์บน eCigarette กันอีก คำเดียวที่อธิบายสถานการณ์นี้ได้คือ "ประหลาด"
เรียกได้ว่าผู้เขียนได้พบแพลตฟอร์มคอมพิวติ้งขั้นสุดยอดสำหรับรัน "vaporware" ในความหมายที่แท้จริงแล้ว