NYCTrainSign के बंद हुए 5 साल हो चुके हैं
- न्यूयॉर्क सिटी सबवे की arrival time बताने वाला पर्सनल LED साइनबोर्ड (Raspberry Pi आधारित)
- कंपनी क्यों फेल हुई, इसकी जांच की गई और उनके Fleet को अपने नियंत्रण में लेने के लिए एक exploit लिखा गया
- उस समय Instagram/Facebook पर यह बहुत लोकप्रिय था, लेकिन कई लोगों को सामान मिला ही नहीं
- एक used seller के जरिए इसे हासिल कर के वास्तव में खोलकर देखा तो अंदरूनी बनावट बहुत निम्न स्तर की थी, और बिज़नेस टिकाऊ नहीं था
- BOM(Bill of Material) बहुत ज्यादा था (यानी manufacturing cost ही बहुत ज्यादा थी)
- मैं आम तौर पर BOM cost को 4 गुना करके retail price का अनुमान लगाता हूँ
पार्ट्स की कीमतें
- 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
- इसके अलावा wires, button, screws, packaging आदि - $3
- यानी सिर्फ इतना जोड़ें तो भी $150 होता है, इसलिए कम से कम $600 लेना चाहिए था
उन्हें यह ट्रिक नहीं पता थी
- Web Archive में उनकी वेबसाइट देखने पर लगा कि वे इसे $599 में बेचने की कोशिश कर रहे थे
- लेकिन शुरुआत में इसे $299 या $100 में भी बेचा गया था (beta version)
- शायद $30/माह पर किराए पर देने की कोशिश भी हुई थी (hardware में शुरुआती लागत लगती है, इसलिए यह तरीका भी मुश्किल रहा होगा)
फावड़े किसने बेचे
- "सोने की दौड़ में फावड़े बेचो" — यहाँ फावड़े बेचकर किसने पैसा कमाया? Adafruit
- "Adafruit LED Matrix HAT" इस्तेमाल करने से $25 (लगभग 20%) कीमत बढ़ गई
- थोड़ी engineering effort से इसे बचाया जा सकता था, क्योंकि यह अनिवार्य हिस्सा नहीं था
- सीधी wiring की जा सकती थी, या $2 वाले सस्ते HAT भी थे
- Adafruit के ज़्यादातर products शुरुआती prototyping में इस्तेमाल होते हैं, और actual production में इन्हें सस्ते विकल्पों से बदल दिया जाता है
- Raspberry Pi को भी फावड़ा बेचने वाला कहा जा सकता है, लेकिन Arduino या ESP32 इस्तेमाल करना थोड़ा ज़्यादा हो जाता
- Pi 3 से शुरू करके बाद में Pi Zero W पर जाना सही होता
कोड पढ़कर देखना
- MicroSD में मौजूद Python और NodeJS कोड को देखा गया
- 2 मुख्य components थे: Python server (LED server) और NodeJS server (Config server)
LED Server
- LED Matrix पर draw करने का काम और कंपनी API से train information लाने का काम
- Config server से user settings प्राप्त करता है
- train data लेकर image/text बनाता है और LED Matrix पर render करता है
Config Server
- user information को JSON में store करता है और update request आने पर उस file को update करता है
- boot के समय Config Server latest information लाता है
- AWS IoT Core से जुड़कर MQTT server से real-time setting change information प्राप्त करता है
Code Quality
- code quality में कई तरह की समस्याएँ थीं
- Transit API इस बात को ध्यान में नहीं रखता था कि एक स्टेशन पर कई train lines हो सकती हैं
- firmware update process नहीं थी
- कई Python code सीधे system calls का इस्तेमाल करके system changes करते थे
- Python LED server, NodeJS Config server से जानकारी लाता था; शायद इसलिए कि AWS IoT Core को NodeJS में लिखना आसान था और Python display management के लिए आसान था
- tabs और spaces मिले हुए थे (शायद code editor setting गलत थी)
- पूरा git history micro sd में सेव था
- bash history भी सेव थी
- code reuse लगभग नहीं था
Sign Resurrection
Shell हासिल करना
- ज़्यादातर Raspberry Pi में MicroSD encrypted नहीं होती, इसलिए root shell हासिल करना आसान है
- single-user mode में boot करके
pi user का password reset करना होता है
- कंपनी का API पहले ही गायब हो चुका था, और internet न होने पर device hardcoded local data इस्तेमाल करने के लिए बनाया गया था
server दोबारा बनाना
Sign का control हासिल करना
- दूसरे IoT devices की तरह Sign भी बहुत से system calls इस्तेमाल करता था
- उनमें से एक call, Sign ID को सीधे shell command में जोड़कर इस्तेमाल करता था
- क्योंकि API server पर सीधा control था, इसलिए सभी Sign को remotely control करना संभव था
- कुछ कोशिशों के बाद exploit लिखा गया
- जब Sign device चालू होता, तो वह configuration information और image logo request भेजता
- इसी समय Sign ID मिल जाती
- इस ID को save करके अगली image logo request पर Sign को exploit भेजा गया
- user अगर Sign को reboot करे, तो exploit startup पर चल जाए
- exploit ने ज़रूरी code update किया और उसे हमारे server के साथ pair कर दिया
- अब वे devices नए API server के साथ ठीक से काम करते हैं
क्या हुआ था?
- बहुत ज़्यादा discount sale सबसे बड़ी समस्या थी
- $150 में बनाकर $117 में बेचना संभव नहीं था
- $300 भी बहुत कम था; शुरू से ही $600 लेना चाहिए था
- startup के हिसाब से बहुत ज़्यादा ad staff और advertising cost थी
- demand के मुकाबले उतने products बनाए भी नहीं जा सके (handmade process)
- फिर भी order लेते रहे, और यह लगभग Ponzi scheme जैसा हो गया, जहाँ नए orders के पैसों से पहले discount पर बेची गई units बनाई गईं
- production को China shift करना भी नहीं हो पाया
- LinkedIn के अनुसार founders 4 थे, बाद में 11 हुए, और किसी समय 15 तक पहुँच गए
- अगर सिर्फ प्रति founder $60k भी मानें, तो $400 profit देने वाली device की 600 units बेचनी पड़तीं
- founder द्वारा साझा screenshot के अनुसार 2 महीनों में $250k revenue हुआ था
- लेकिन इतनी discounting के कारण असली profit कितना हुआ, यह पता नहीं
- founders ने यह साफ नहीं बताया कि क्या हुआ, इतने कम products क्यों ship हुए, और सारा पैसा कहाँ गया
- एक founder ने कहा कि उसे व्यक्तिगत रूप से कोई पैसा मिला ही नहीं
- मेरा मानना है कि अगर NYCTrainSign टीम ने कम से कम electronics knowledge रखने वाले किसी व्यक्ति से बात की होती, तो वे सफल हो सकते थे
- लेकिन उनका main advisor एक university computer science professor था
- NYCTrainSign मूल रूप से CEO का एक side project था, जिसे बाद में आगे क्या होगा यह सोचे बिना $300~$600 में बेचने की कोशिश की गई
- निष्कर्ष: "Good Idea, Good Timing, Bad Team, Bad Product"
अब आगे क्या होगा
- शुरुआत में इसे करते समय मेरा सपना था कि मैं अपना खुद का Sign बेचूँ
- मैंने इसे ESP32 पर बनाया और आज भी इस्तेमाल कर रहा हूँ
- लेकिन जितना ज़्यादा सोचता हूँ, उतना लगता है कि इसे बनाकर बेचने के लिए मैं सही व्यक्ति नहीं हूँ
- LED Sign market में पहले से कड़ी competition है: Tidbyt और Amazon पर कई कंपनियाँ मौजूद हैं
- इसलिए इसे एक personal learning project के रूप में ही छोड़ने का फैसला किया
- NYCTrainSign से जुड़ी चीज़ों को open source के रूप में जारी किया गया
- इसमें exploit code वाला API server भी शामिल है
- साथ ही नया NYCTrainSign server आगे भी host किया जाएगा (hosting cost बहुत कम है)
- कोई नई feature जोड़ने की योजना नहीं है, लेकिन improved firmware के कुछ ideas हैं
- अगर आपके पास Sign है, तो उसे remotely manage करने के लिए बनाई गई site का इस्तेमाल करें
- "अगर आपके पास Sign नहीं है, तो नया खरीदने मत जाइए"
2 टिप्पणियां
दिलचस्प है हाहा
लेकिन अगर इसे लाभदायक मानकर बिज़नेस के तौर पर शुरू किया जाए, तो क्या कोई कानूनी समस्या नहीं होगी?
यह किसी tycoon game को देखते रहने जैसा लगता है
Code Quality > ऐसा लगता है कि code quality में कई तरह की समस्याएँ "नहीं" के रूप में टाइपो हो गई हैं