NYCTrainSign ปิดกิจการมาแล้ว 5 ปี
- ป้าย LED ส่วนตัวสำหรับบอกเวลาเข้าถึงของรถไฟใต้ดินนิวยอร์ก (ใช้ Raspberry Pi เป็นฐาน)
- สืบหาว่าทำไมบริษัทถึงล้มเหลว และเขียน exploit เพื่อเข้ารับช่วงต่อ fleet ของพวกเขา
- ตอนนั้นดังมากบน Instagram/Facebook แต่ก็มีคนจำนวนมากที่ไม่ได้รับสินค้า
- หลังจากหาซื้อเครื่องจริงผ่านผู้ขายมือสองแล้วแกะดู พบว่าภายในต่ำกว่ามาตรฐาน และเป็นธุรกิจที่ไม่ยั่งยืน
- BOM (Bill of Material) สูงเกินไป (หมายถึงต้นทุนการผลิตสูงมากตั้งแต่แรก)
- ปกติผมจะคูณต้นทุน BOM ราว 4 เท่าเพื่อเดาราคาขายปลีก
ราคาชิ้นส่วน
- Raspberry Pi 3 - $35
- Adafruit LED Matrix Hat - $25
- LED Matrix * 2 - $60
- 5V 2A Power Supply - $5
- 4GB MicroSD Card - $7
- Wood Case - $15
- อย่างอื่น เช่น สายไฟ ปุ่ม สกรู แพ็กเกจจิง ฯลฯ - $3
- แค่คำนวณเท่านี้ก็ได้ $150 แล้ว ดังนั้นควรต้องขายที่ $600
พวกเขาไม่รู้ทริก
- ดูหน้าเว็บเก่าจาก Web Archive แล้วเหมือนว่าพวกเขาตั้งใจจะขายที่ $599
- แต่ช่วงแรกก็เคยขายที่ $299 หรือแม้แต่ $100 (เวอร์ชันเบต้า)
- ดูเหมือนจะเคยพยายามปล่อยเช่าที่ $30/เดือน ด้วย (แต่ฮาร์ดแวร์ต้องใช้ต้นทุนล่วงหน้า จึงน่าจะทำได้ยากเหมือนกัน)
ใครเป็นคนขายพลั่ว
- จากคำว่า "ช่วงตื่นทองให้ขายพลั่ว" ใครกันที่หาเงินได้จากการขายพลั่ว? Adafruit
- การใช้ "Adafruit LED Matrix HAT" ทำให้ต้นทุนเพิ่มขึ้น $25 (ประมาณ 20%)
- ต้นทุนส่วนนี้ลดได้ด้วยงานวิศวกรรมนิดหน่อย เพราะไม่ใช่ของที่จำเป็นขนาดนั้น
- จะต่อสายเองก็ได้ หรือใช้ HAT ราคาถูก $2 ก็มี
- โดยมากผลิตภัณฑ์ของ Adafruit ถูกใช้แค่ตอนทำ prototype ช่วงแรก แล้วตอนผลิตจริงก็มักเปลี่ยนเป็นของที่ถูกกว่า
- จะมองว่า Raspberry Pi เป็นคนขายพลั่วด้วยก็ได้ แต่การใช้ Arduino หรือ ESP32 ก็ดูจะเกินความจำเป็นไปหน่อย
- ผมคิดว่าควรเริ่มด้วย Pi 3 แล้วค่อยเปลี่ยนเป็น Pi Zero W จะเหมาะกว่า
ลองอ่านโค้ด
- ผมดูโค้ด Python และ NodeJS ที่อยู่ใน MicroSD
- มี 2 คอมโพเนนต์หลัก: Python server (LED server) และ NodeJS server (Config server)
LED Server
- ทำหน้าที่วาดลงบน LED Matrix และดึงข้อมูลรถไฟจาก API ของบริษัท
- สื่อสารกับ Config server เพื่อดึงค่าตั้งค่าของผู้ใช้
- รับข้อมูลรถไฟแล้วสร้างภาพ/ข้อความเพื่อเรนเดอร์ลงบน LED Matrix
Config Server
- เก็บข้อมูลผู้ใช้ไว้ใน JSON และรับคำขออัปเดตเพื่อแก้ไขไฟล์นั้น
- ตอนบูต Config Server จะดึงข้อมูลล่าสุดมา
- เชื่อมต่อกับ AWS IoT Core และรับข้อมูลเปลี่ยนค่าตั้งค่าแบบเรียลไทม์จาก MQTT server
คุณภาพโค้ด
- มีปัญหาหลายอย่างในด้านคุณภาพโค้ด
- Transit API ไม่ได้คำนึงว่าสถานีหนึ่งอาจมีหลายสายรถไฟ
- ไม่มีกระบวนการอัปเดตเฟิร์มแวร์
- โค้ด Python จำนวนมากใช้ system call ตรง ๆ เพื่อเปลี่ยนแปลงระบบ
- Python LED server ไปคุยกับ NodeJS Config server เพื่อดึงข้อมูล ซึ่งคาดว่าน่าจะเป็นเพราะเขียน AWS IoT Core บน NodeJS ง่ายกว่า และ Python จัดการจอแสดงผลได้ง่ายกว่า
- มีการปนกันระหว่าง tab กับ space (น่าจะมาจากการตั้งค่า editor ผิด)
- git history ทั้งหมดถูกเก็บอยู่ใน micro sd
- bash history ก็ถูกเก็บไว้ด้วย
- แทบไม่มีการนำโค้ดกลับมาใช้ซ้ำเลย
การชุบชีวิต Sign
เอา Shell มาให้ได้
- Raspberry Pi ส่วนใหญ่ไม่ได้เข้ารหัส MicroSD จึงได้ root shell ค่อนข้างง่าย
- แค่บูตเข้า single-user mode แล้วรีเซ็ตรหัสผ่านของผู้ใช้ pi
- API ของบริษัทไม่มีอยู่แล้ว และตัวเครื่องถูกตั้งให้ใช้ข้อมูล local ที่ hardcode ไว้เมื่อไม่มีอินเทอร์เน็ต
สร้างเซิร์ฟเวอร์ขึ้นใหม่
ยึดการควบคุม Sign
- เหมือนอุปกรณ์ IoT อื่น ๆ Sign นี้ก็ใช้ system call จำนวนมาก
- หนึ่งในนั้นเอา Sign ID ไปต่อท้ายเป็น shell command โดยตรง
- เพราะควบคุม API server ได้เอง จึงสามารถควบคุม Sign ทุกเครื่องจากระยะไกลได้
- หลังลองอยู่หลายครั้งก็เขียน exploit ได้
- เมื่อเครื่อง Sign เปิดขึ้น มันจะดึงข้อมูลการตั้งค่าและร้องขอ image logo
- ตอนนั้น Sign ID จะถูกส่งมาด้วย
- เก็บ ID นี้ไว้ แล้วพอมีการร้องขอ image logo ครั้งถัดไป ก็ส่ง exploit ไปที่ Sign
- ถ้าทำให้ผู้ใช้รีบูต Sign ได้ exploit ก็จะทำงานตอนเริ่มระบบ
- exploit จะอัปเดตโค้ดที่จำเป็นและทำให้มันจับคู่กับเซิร์ฟเวอร์ของเรา
- จากนั้นอุปกรณ์เหล่านี้ก็ทำงานกับ API server ใหม่ได้ดี
เกิดอะไรขึ้นกันแน่?
- ปัญหาคือการลดราคาหนักเกินไป
- ผลิตที่ $150 แล้วขาย $117 เป็นไปไม่ได้
- แม้แต่ $300 ก็ยังถูกเกินไป ตั้งแต่แรกควรขาย $600
- สำหรับสตาร์ทอัป พวกเขามีพนักงานและค่าใช้จ่ายด้านการตลาดมากเกินไป
- ผลิตสินค้าได้ไม่มากเมื่อเทียบกับดีมานด์ (เพราะทำด้วยมือ)
- ถึงอย่างนั้นก็ยังรับออเดอร์ต่อไป จนแทบเหมือน Ponzi scheme ที่ใช้เงินจากออเดอร์ใหม่ไปผลิตของที่เคยขายลดราคาไปก่อนหน้า
- พวกเขายังย้ายการผลิตไปจีนไม่สำเร็จด้วย
- ดูจาก LinkedIn ผู้ก่อตั้งมี 4 คน ต่อมาขยายเป็น 11 คน และช่วงหนึ่งขึ้นไปถึง 15 คน
- ต่อให้คิดแค่ผู้ก่อตั้งคนละ $60k ก็ต้องขายอุปกรณ์ที่กำไรเครื่องละ $400 ให้ได้ 600 เครื่องอยู่ดี
- จากภาพหน้าจอที่ผู้ก่อตั้งแชร์ บอกว่าทำรายได้ $250k ในเวลา 2 เดือน
- แต่ลดราคาเครื่องมากเกินไปจนไม่รู้ว่าจริง ๆ แล้วมีกำไรเท่าไร
- ผู้ก่อตั้งไม่ได้อธิบายให้ชัดว่าเกิดอะไรขึ้น ทำไมส่งสินค้าออกไปได้น้อยมาก หรือเงินทั้งหมดหายไปไหน
- ผู้ก่อตั้งคนหนึ่งบอกว่าส่วนตัวแล้วไม่ได้รับเงินเลยแม้แต่น้อย
- ผมเชื่อว่าถ้าทีม NYCTrainSign อย่างน้อยได้คุยกับใครสักคนที่มีความรู้ด้านอิเล็กทรอนิกส์ พวกเขาอาจสำเร็จก็ได้
- แต่ที่ปรึกษาหลักของพวกเขากลับเป็นอาจารย์คอมพิวเตอร์ไซเอนซ์ในมหาวิทยาลัย
- NYCTrainSign คือโปรเจกต์ที่ CEO ทำขึ้นในเวลาว่าง แล้วพยายามขายที่ $300~$600 โดยไม่ได้คิดถึงสิ่งที่จะตามมา
- สรุปคือ "Good Idea, Good Timing, Bad Team, Bad Product"
หลังจากนี้จะเกิดอะไรขึ้น
- ตอนเริ่มทำเรื่องนี้ ผมเคยฝันว่าจะขาย Sign ของตัวเอง
- ผมทำมันด้วย ESP32 และยังใช้อยู่จนถึงตอนนี้
- แต่คิดไปคิดมา ผมคงไม่ใช่คนที่เหมาะจะทำสิ่งนี้แล้วเอาไปขาย
- ตลาด LED Sign แข่งขันกันหนักอยู่แล้ว: มีทั้ง Tidbyt และบริษัทอีกมากมายบน Amazon
- เลยตัดสินใจปล่อยให้มันเป็นแค่โปรเจกต์เพื่อการเรียนรู้ส่วนตัว
- สิ่งที่เกี่ยวกับ NYCTrainSign ถูกปล่อยเป็นโอเพนซอร์สแล้ว
- รวมถึง API server ที่มี exploit code ด้วย
- และจะยังโฮสต์เซิร์ฟเวอร์ NYCTrainSign ตัวใหม่ต่อไป (ค่าโฮสต์ถูกมาก)
- ไม่ได้ตั้งใจจะเพิ่มฟีเจอร์ใหม่อะไร แต่มีไอเดียสำหรับเฟิร์มแวร์ที่ปรับปรุงแล้วอยู่
- ถ้าคุณมี Sign อยู่ ผมทำเว็บสำหรับจัดการมันจากระยะไกลไว้แล้ว ลองใช้ได้
- "ถ้าคุณไม่มี Sign ก็อย่าเพิ่งไปซื้อใหม่"
2 ความคิดเห็น
น่าสนใจดีครับ 555
แต่ถ้าตัดสินว่ามันทำกำไรได้แล้วเอาไปทำเป็นธุรกิจ แบบนี้จะไม่มีปัญหาทางกฎหมายเหรอ?
ให้ความรู้สึกเหมือนกำลังดูเกมแนวไทคูนอยู่เลย
Code Quality > น่าจะพิมพ์ผิดเป็นว่า "ไม่มี" ทั้งที่จริง ๆ ต้องการบอกว่ามีปัญหาด้านคุณภาพโค้ดหลายอย่าง