NYCTrainSign kapanalı 5 yıl oldu
- New York metrosunun varış saatlerini gösteren kişisel LED tabela (Raspberry Pi tabanlı)
- Şirketin neden başarısız olduğunu araştırıyor ve onların filosunu devralmak için bir exploit yazıyor
- O dönemde Instagram/Facebook'ta inanılmaz popülerdi, ama ürünü teslim alamayan çok kişi de vardı
- İkinci el bir satıcı üzerinden edinip gerçekten sökünce iç yapısının çok düşük seviyede olduğu ve sürdürülebilir bir iş olmadığı görüldü
- BOM (Bill of Material) çok yüksekti (yani üretim maliyetinin kendisi yüksekti)
- Genelde perakende fiyatı tahmin etmek için BOM maliyetini yaklaşık 4 ile çarparım
Parça fiyatları
- Raspberry Pi 3 - $35
- Adafruit LED Matrix Hat - $25
- LED Matrix * 2 - $60
- 5V 2A güç kaynağı - $5
- 4GB MicroSD kart - $7
- Ahşap kasa - $15
- Diğer kablolar, düğmeler, vidalar, paketleme vb. - $3
- Yani sadece böyle hesaplasanız bile $150 ediyor; dolayısıyla $600 almaları gerekirdi
Hileyi bilmiyorlardı
- Web arşivinde sitelerine bakınca bunu $599'a satmaya çalıştıkları görülüyor
- Ama başlangıçta bunu $299'a hatta $100'a da sattılar (beta sürüm)
- Aylık $30 karşılığında kiralamayı da denemiş gibiler (donanım başlangıç maliyeti gerektirdiği için bu model de zor olurdu)
Küreği kim sattı
- "Altına hücumda kürek sat" sözündeki gibi, burada kürek satarak kim para kazandı? Adafruit
Adafruit LED Matrix HAT kullanmaları fiyatı $25 artırdı (yaklaşık %20)
- Bu, biraz mühendislik çabasıyla azaltılabilecek bir maliyetti; çünkü zorunlu değildi
- Doğrudan kablolama da yapılabilirdi. Ya da $2'lık ucuz HAT'ler vardı
- Adafruit ürünlerinin çoğu yalnızca ilk prototiplemede kullanılır, gerçek üretimde ise daha ucuz olanlarla değiştirilir
- Raspberry Pi da bir anlamda kürek satıcısı sayılabilir, ama burada Arduino veya ESP32 kullanmak biraz aşırı olurdu
- Pi 3 ile başlayıp sonra Pi Zero W'ye geçmeleri daha doğru olurdu diye düşünüyor
Kodu incelemek
- MicroSD içindeki Python ve NodeJS kodlarına bakıldı
- İki ana bileşen var: Python sunucusu (LED sunucusu) ve NodeJS sunucusu (Config sunucusu)
LED Server
- LED Matrix'e çizim yapma ve şirket API'sinden tren bilgisi alma işlevi
- Kullanıcı ayarlarını almak için Config sunucusuyla iletişim kuruyor
- Tren verisini alıp görüntü/metin oluşturuyor ve bunu LED Matrix üzerinde render ediyor
Config Server
- Kullanıcı bilgisini JSON'a kaydediyor ve güncelleme isteklerini alıp ilgili dosyayı güncelliyor
- Açılışta Config Server en güncel bilgileri alıyor
- AWS IoT Core'a bağlanıp MQTT sunucusundan gerçek zamanlı ayar değişikliklerini alıyor
Kod kalitesi
- Kod kalitesiyle ilgili çeşitli sorunlar var
- Transit API, her istasyonun birden fazla tren hattına sahip olabileceğini dikkate almıyor
- Firmware güncelleme süreci yok
- Birçok Python kodu sistem değişikliklerini sadece system call ile yapıyor
- Python LED sunucusu bilgiyi almak için NodeJS Config sunucusuyla konuşuyor; bunun sebebi muhtemelen AWS IoT Core'un NodeJS'de kodlamasının daha kolay, Python'un da ekran yönetiminde daha elverişli olması
- Tab ve space karışık kullanılmış (muhtemelen editör ayarı bozuktu)
- Tüm git geçmişi micro sd içinde duruyor
bash history de kayıtlı
- Kod yeniden kullanımı neredeyse yok
Tabelanın yeniden diriltilmesi
Shell elde etmek
- Çoğu Raspberry Pi'de MicroSD şifreli olmadığı için root shell elde etmek kolay
- Single-user mode'da açıp
pi kullanıcısının şifresini sıfırlamak yeterli
- Şirketin API'si artık yok ve cihaz internet bağlı değilken hardcode edilmiş yerel veriyi kullanacak şekilde tasarlanmış
Sunucuyu yeniden oluşturmak
Tabelanın kontrolünü ele geçirmek
- Diğer IoT cihazlarında olduğu gibi bu tabela da çok sayıda system call kullanıyor
- Bunlardan birinde Sign ID doğrudan shell komutuna ekleniyor
- API sunucusu doğrudan kontrol edildiği için tüm tabelalar uzaktan kontrol edilebilir hale geliyor
- Birkaç denemeden sonra exploit yazılmış
- Tabela cihazı açıldığında ayar bilgisini alıyor ve logo görseli için istek yapıyor
- Bu sırada Sign ID gönderiliyor
- Bu ID kaydediliyor, sonra bir sonraki logo görseli isteğinde exploit tabelaya gönderiliyor
- Kullanıcı tabelayı yeniden başlatınca exploit açılışta çalışıyor
- Exploit gerekli kodu güncelliyor ve cihazın bizim sunucuyla eşleşmesini sağlıyor
- Artık bu cihazlar yeni API sunucusuyla düzgün çalışıyor
Ne oldu?
- Sorun aşırı indirimli satışlardı
- $150'a mal edilip $117'ye satılması mümkün değildi
- $300 bile çok ucuzdu; baştan itibaren $600 istemeleri gerekirdi
- Bir startup için fazla sayıda pazarlama çalışanı ve reklam gideri vardı
- Talebe kıyasla yeterince ürün de üretemediler (el işi üretim)
- Buna rağmen sipariş almaya devam ettiler; adeta Ponzi benzeri biçimde yeni siparişlerin parasıyla daha önce indirimli sattıkları ürünleri ürettiler
- Üretimi Çin'e taşıma işini de başaramadılar
- LinkedIn'e bakılırsa 4 kurucu vardı, sonra 11'e çıkmışlar, belli bir noktada 15 kişiye kadar büyümüşler
- Kurucu başına sadece $60k saysanız bile, cihaz başına $400 kârla 600'er adet satmaları gerekirdi
- Kurucunun paylaştığı ekran görüntüsüne göre 2 ayda $250k ciro yaptıklarını söylüyorlar
- Ama cihazlarda çok fazla indirim yaptıkları için ne kadar kâr ettikleri bilinmiyor
- Kurucular ne olduğunu, neden çok az ürün sevk edildiğini, bütün paranın nereye gittiğini açık biçimde anlatmadı
- Kuruculardan biri kişisel olarak hiç para almadığını söyledi
- NYCTrainSign ekibinin en azından elektronik bilgisi olan biriyle konuşmuş olsalardı başarılı olabileceklerine inanılıyor
- Ama ana danışmanları bir üniversitenin bilgisayar bilimi profesörüydü
- NYCTrainSign, CEO'nun boş zamanında yaptığı bir projeyi, sonrasında neler olacağını düşünmeden $300~$600 aralığında satmaya çalışma girişimiydi
- Sonuç olarak "Good Idea, Good Timing, Bad Team, Bad Product"
Bundan sonra ne olacak
- Bunu ilk başta yapmaya başladığında, kendi tabelasını satma hayali vardı
- ESP32 ile bir tane yaptı ve hâlâ kullanıyor
- Ama ne kadar düşünürse düşünsün, bunu üretip satacak doğru kişi olmadığını düşünüyor
- Zaten LED tabela pazarı da çok rekabetçi: Tidbyt gibi ya da Amazon'da sayısız şirket var
- Bu yüzden bunu sadece kişisel bir öğrenme projesi olarak bırakmaya karar verdi
- NYCTrainSign ile ilgili şeyleri open source olarak yayımladı
- Buna exploit kodunu içeren API sunucusu da dahil
- Ayrıca yeni NYCTrainSign sunucusunu barındırmaya devam edecek (hosting maliyeti çok düşük)
- Yeni özellikler eklemeyi planlamıyor, ama geliştirilmiş firmware için fikirleri var
- Elinizde bir tabela varsa, uzaktan yönetim için hazırladığı siteyi kullanabilirsiniz
- "Tabelanız yoksa yenisini satın almayın"
2 yorum
İlginçmiş
Ama eğer bunun kârlı olduğuna karar verip ticarileştirirlerse hukuki bir sorun olmaz mı acaba?
Bir tycoon oyununu izliyormuşsunuz hissi veriyor.
Code Quality > Kod kalitesi bölümünde, çeşitli sorunların "yok" olarak yazılması muhtemelen bir yazım hatası gibi görünüyor.