21 poin oleh xguru 2023-01-16 | 2 komentar | Bagikan ke WhatsApp

Sudah 5 tahun sejak NYCTrainSign tutup

  • Papan LED pribadi berbasis Raspberry Pi yang menampilkan waktu kedatangan kereta bawah tanah New York City
  • Menyelidiki alasan kegagalan perusahaan dan menulis exploit untuk mengambil alih fleet mereka
  • Saat itu sangat populer di Instagram/Facebook, tetapi banyak orang juga tidak pernah menerima barangnya
  • Saya mendapatkannya lewat penjual barang bekas dan membongkarnya langsung; bagian dalamnya jauh di bawah standar, dan bisnisnya memang tidak berkelanjutan
    • BOM (Bill of Materials) terlalu tinggi, artinya biaya manufakturnya sendiri sudah mahal
    • Biasanya saya mengalikan biaya BOM sekitar 4x untuk memperkirakan harga ritel

Harga komponen

  • 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
  • Ditambah kabel, tombol, sekrup, packaging, dll. - $3
  • Jadi bahkan dengan hitungan sesederhana ini saja sudah $150, artinya seharusnya dijual seharga $600

Mereka tidak tahu triknya

  • Dari situs mereka di web archive, sepertinya mereka sempat mencoba menjualnya seharga $599
  • Tetapi pada awalnya juga dijual seharga $299 atau bahkan $100 (versi beta)
  • Sepertinya mereka juga sempat mencoba menyewakannya seharga $30 per bulan (cara ini pun kemungkinan sulit karena hardware butuh biaya awal)

Siapa yang menjual sekop

  • Ada pepatah, "saat demam emas, jual sekop". Jadi siapa yang menghasilkan uang dengan menjual sekop di sini? Adafruit
  • Dengan memakai "Adafruit LED Matrix HAT", harganya naik $25 (sekitar 20%)
  • Ini bisa dihemat dengan sedikit usaha engineering, karena bukan komponen yang benar-benar wajib
    • Bisa saja melakukan wiring langsung. Atau memakai HAT murah seharga $2
  • Sebagian besar produk Adafruit biasanya hanya dipakai untuk prototyping awal, lalu diganti dengan yang lebih murah saat produksi massal
  • Raspberry Pi juga bisa dianggap sebagai penjual sekop, tetapi memakai Arduino atau ESP32 sejak awal terasa agak berlebihan
  • Menurut saya, memulai dengan Pi 3 lalu menggantinya ke Pi Zero W akan lebih tepat

Membaca kodenya

  • Saya memeriksa kode Python & NodeJS yang ada di MicroSD
  • Ada 2 komponen utama: server Python (server LED) dan server NodeJS (server Config)

LED Server

  • Menangani penggambaran ke LED Matrix dan mengambil informasi kereta dari API perusahaan
  • Berkomunikasi dengan server Config untuk mengambil pengaturan pengguna
  • Mengambil data kereta, membuat gambar/teks, lalu merendernya ke LED Matrix

Config Server

  • Menyimpan informasi pengguna dalam JSON dan memperbarui file itu saat menerima permintaan update
  • Saat boot, Config Server mengambil informasi terbaru
  • Terhubung ke AWS IoT Core dan menerima perubahan pengaturan real-time dari server MQTT

Code Quality

  • Ada berbagai masalah pada kualitas kode
  • Transit API tidak mempertimbangkan bahwa setiap stasiun bisa memiliki beberapa jalur kereta
  • Tidak ada proses firmware update
  • Banyak kode Python yang melakukan perubahan sistem hanya lewat system call
  • Server LED Python berkomunikasi dengan server Config NodeJS untuk mengambil informasi; dugaan saya ini karena AWS IoT Core lebih mudah diakses dari NodeJS, sedangkan Python lebih mudah dipakai untuk mengelola display
  • Tab dan spasi bercampur (mungkin konfigurasi code editor-nya bermasalah)
  • Seluruh git history tersimpan di micro sd
  • bash history juga tersimpan
  • Hampir tidak ada code reuse

Menghidupkan Kembali Sign

Mendapatkan shell

  • Seperti kebanyakan Raspberry Pi, karena MicroSD-nya tidak terenkripsi, sangat mudah mendapatkan root shell
  • Cukup boot ke single-user mode lalu reset password pengguna pi
  • API perusahaan sudah tidak ada lagi, dan perangkat dirancang untuk memakai data lokal hardcoded saat tidak terhubung ke internet

Membuat ulang server

Mengambil alih kontrol Sign

  • Seperti banyak perangkat IoT lain, Sign ini banyak memakai system call
  • Salah satunya menggunakan Sign ID dengan langsung menempelkannya ke shell command
  • Karena saya mengendalikan server API secara langsung, semua Sign bisa dikendalikan dari jarak jauh
  • Setelah beberapa kali percobaan, saya menulis exploit-nya
    • Saat perangkat Sign menyala, ia mengambil informasi konfigurasi dan melakukan request untuk logo gambar
    • Pada saat itu Sign ID dikirimkan
    • ID ini disimpan, lalu pada request logo gambar berikutnya exploit dikirim ke Sign
    • Jika pengguna me-reboot Sign, exploit akan berjalan saat startup kembali
    • exploit tersebut memperbarui kode yang diperlukan dan membuatnya melakukan pairing dengan server kami
  • Sekarang perangkat-perangkat itu bisa bekerja dengan baik dengan server API yang baru

Apa yang sebenarnya terjadi?

  • Masalah utamanya adalah terlalu banyak diskon
    • Mustahil membuat barang seharga $150 lalu menjualnya seharga $117
    • Bahkan $300 pun terlalu murah. Sejak awal seharusnya dijual seharga $600
  • Untuk ukuran startup, mereka punya terlalu banyak staf pemasaran dan biaya iklan
  • Mereka juga tidak mampu memproduksi cukup banyak produk dibanding permintaan (semuanya dirakit manual)
    • Meski begitu, mereka terus menerima pesanan dan pada akhirnya seperti skema Ponzi: biaya dari pesanan baru dipakai untuk membuat barang yang sebelumnya dijual diskon
    • Mereka juga gagal memindahkan produksi ke Tiongkok
  • Dari LinkedIn, terlihat ada 4 pendiri, lalu kemudian bertambah menjadi 11 orang, dan pada titik tertentu sampai 15 orang
    • Bahkan jika hanya menghitung $60k per founder, mereka harus menjual setidaknya 600 perangkat dengan laba $400 per unit
  • Menurut screenshot yang dibagikan pendirinya, mereka sempat menghasilkan pendapatan $250k dalam 2 bulan
    • Tetapi karena diskonnya terlalu besar, tidak jelas sebenarnya berapa laba yang mereka dapat
  • Para pendiri tidak pernah menjelaskan dengan jelas apa yang terjadi, mengapa hanya sedikit produk yang dikirim, dan ke mana semua uang itu pergi
  • Salah satu pendiri mengatakan bahwa secara pribadi ia sama sekali tidak menerima uang
  • Saya percaya NYCTrainSign mungkin akan berhasil kalau setidaknya mereka sempat berbicara dengan seseorang yang paham elektronik
    • Sebaliknya, advisor utama mereka adalah profesor ilmu komputer di universitas
  • NYCTrainSign pada dasarnya adalah proyek yang dibuat CEO di waktu luang, lalu mencoba menjualnya seharga $300~$600 tanpa memikirkan apa yang akan terjadi setelahnya
  • Kesimpulannya: "Good Idea, Good Timing, Bad Team, Bad Product"

What Happens Now

  • Saat pertama mulai mengerjakan ini, saya sempat bermimpi menjual Sign versi saya sendiri
  • Saya membuatnya dengan ESP32 dan masih memakainya sampai sekarang
  • Tetapi semakin dipikirkan, saya rasa saya bukan orang yang cocok untuk membuat dan menjual produk ini
  • Pasar LED Sign juga sudah sangat kompetitif: ada Tidbyt dan banyak perusahaan lain di Amazon
  • Jadi saya memutuskan membiarkannya tetap sebagai proyek pembelajaran pribadi
  • Hal-hal terkait NYCTrainSign telah saya rilis sebagai open source
    • Termasuk server API beserta kode exploit
  • Saya juga akan terus meng-host server NYCTrainSign yang baru (biaya hosting-nya sangat murah)
  • Saya tidak berencana menambahkan fitur baru, tetapi ada beberapa ide untuk firmware yang lebih baik
  • Jika Anda punya Sign, saya sudah membuat situs untuk mengelolanya dari jarak jauh, jadi silakan dicoba
  • "Kalau Anda tidak punya Sign, jangan beli yang baru"

2 komentar

 
loblue 2023-01-18

Menarik juga wkwk
Tapi kalau ini dianggap punya profitabilitas lalu dijadikan bisnis, kira-kira tidak akan jadi masalah hukum ya?

 
kloty 2023-01-16

Rasanya seperti menonton game tycoon

Code Quality > Sepertinya ada salah ketik yang menuliskan berbagai masalah kualitas kode sebagai "tidak ada"