21 पॉइंट द्वारा xguru 2023-01-16 | 2 टिप्पणियां | WhatsApp पर शेयर करें

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 दोबारा बनाना

  • API के लिए trainsignapi.com domain खरीदा गया
  • अब domain पर पूरा control मिल गया
  • train information के लिए https://wheresthefuckingtrain.com/ , और weather information के लिए https://open-meteo.com/ का इस्तेमाल किया गया

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 टिप्पणियां

 
loblue 2023-01-18

दिलचस्प है हाहा
लेकिन अगर इसे लाभदायक मानकर बिज़नेस के तौर पर शुरू किया जाए, तो क्या कोई कानूनी समस्या नहीं होगी?

 
kloty 2023-01-16

यह किसी tycoon game को देखते रहने जैसा लगता है

Code Quality > ऐसा लगता है कि code quality में कई तरह की समस्याएँ "नहीं" के रूप में टाइपो हो गई हैं