21 ポイント 投稿者 xguru 2023-01-16 | 2件のコメント | WhatsAppで共有

NYCTrainSignが廃業して5年

  • ニューヨーク市地下鉄の到着時刻を知らせる個人向けLED電光掲示板(Raspberry Piベース)
  • 会社が失敗した理由を調べ、彼らのフリートを引き継ぐためのexploitを書いた
  • 当時はInstagramやFacebookで非常に人気だったが、商品を受け取れなかった人も多かった
  • 中古販売業者を通じて入手して実際に分解してみると、中身はお粗末で、持続可能なビジネスではなかった
    • BOM(Bill of Materials)が高すぎる(つまり製造原価そのものが高い)
    • 私は普段、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%)ぶん価格が上がっていた
  • これは少しのエンジニアリング努力で削減できる。必須ではないからだ
    • 自前で配線することもできたし、$2の安価なHATもある
  • Adafruitの製品の多くは初期プロトタイピングでだけ使われ、実生産時にはより安価なものに置き換えられる
  • Raspberry Piもツルハシ売りと考えることはできるが、ArduinoやESP32を使うのは少しやりすぎだった気がする
  • Pi 3で始めて、その後Pi Zero Wに置き換えるのが正解だったと思う

コードを読んでみる

  • MicroSDに入っているPythonとNodeJSのコードを調べた
  • メインコンポーネントは2つある:Pythonサーバー(LEDサーバー)とNodeJSサーバー(Configサーバー)

LED Server

  • LED Matrixに描画する機能と、会社のAPIから列車情報を取得する機能
  • Configサーバーと通信してユーザー設定を取得する
  • 列車データを受け取り、画像やテキストを生成してLED Matrixにレンダリングする

Config Server

  • ユーザー情報をJSONに保存し、更新リクエストを受けてそのファイルを更新する
  • 起動時にはConfig Serverが最新情報を取得する
  • AWS IoT Coreに接続し、MQTTサーバーからリアルタイムの設定変更情報を受け取る

Code Quality

  • コード品質にはさまざまな問題がある
  • Transit APIが、各駅に複数の列車ラインがあり得ることを考慮していない
  • ファームウェア更新プロセスがない
  • 多くのPythonコードが、単にシステムコールを使ってシステム変更を行っている
  • PythonのLEDサーバーがNodeJSのConfigサーバーと通信して情報を取得しているが、これはおそらくAWS IoT CoreはNodeJSで書きやすく、Pythonはディスプレイ管理がしやすかったからだろうと推測している
  • タブとスペースが混在している(おそらくコードエディタの設定がよくなかった)
  • gitの全履歴がmicro sdに保存されている
  • bash historyも保存されている
  • コードの再利用がほとんどない

Sign Resurrection

Shellを得る

  • ほとんどのRaspberry PiはMicroSDが暗号化されていないため、root shellを得るのは簡単だ
  • シングルユーザーモードで起動し、piユーザーのパスワードをリセットすればよい
  • 会社のAPIはすでに存在せず、機器はインターネットにつながっていない状態ではハードコードされたローカルデータを使うようになっていた

サーバーを再構築する

Signの制御を得る

  • ほかのIoT機器と同様に、Signも多くのシステムコールを使っている
  • そのうちの1つが、Sign IDをシェルコマンドに直接連結して使っていた
  • APIサーバーを直接制御しているので、すべてのSignをリモートで制御できる
  • 何度か試行した末にexploitを書いた
    • Sign機器が起動すると設定情報を取得し、画像ロゴを要求する
    • このときSign IDが渡される
    • このIDを保存しておき、次の画像ロゴ要求時にexploitをSignへ送る
    • ユーザーにSignを再起動してもらうと、exploitが再起動時に動作する
    • exploitが必要なコードを更新し、私たちのサーバーとペアリングするようにした
  • これで対象機器は新しいAPIサーバーで問題なく動作する

何が起きたのか?

  • 問題は値引き販売が多すぎたことだ
    • $150で作って$117で売るのは不可能だ
    • $300でも安すぎる。最初から$600は取るべきだった
  • スタートアップにしては広告担当者と広告費が多すぎた
  • 需要に比べて製品を十分に作れなかった(手作業だった)
    • それにもかかわらず注文を受け続け、まるでポンジ・スキームのように新規注文の代金で以前に値引き販売した分を作っていた
    • 中国へ生産移管することもできなかった
  • LinkedInを見ると創業者は4人で、その後11人に増え、ある時点では15人まで増えていたという
    • 創業者1人あたり$60kで見積もっても、利益が$400出る機器を600台は売らなければならない
  • 創業者が共有したスクリーンショットによると、2か月で$250kの売上を上げたというが
    • 機器を大幅に値引きしていたため、どれだけ利益が出たのかはわからない
  • 創業者たちは何が起きたのか、なぜ製品がほとんど発送されなかったのか、金がどこへ消えたのかを明確に説明しなかった
  • ある創業者は、個人的にはまったく金を受け取っていないと言っていた
  • 少なくともNYCTrainSignチームが電子工作の知識を持つ誰かと話していれば、成功していたはずだと私は思う
    • その代わり、彼らのメインアドバイザーは大学のコンピュータサイエンス教授だった
  • NYCTrainSignは、CEOが余暇に作ったプロジェクトを、その後に起こることを考えずに$300〜$600で売ろうとしたものだった
  • 結論として "Good Idea, Good Timing, Bad Team, Bad Product"

What Happens Now

  • 最初にこれを始めたとき、私は自分のSignを売ることを夢見ていた
  • ESP32で作って、今も使っている
  • しかし考えれば考えるほど、私はこれを作って売るのに向いた人間ではない気がしてきた
  • すでにLED Sign市場は競争が激しい。TidbytやAmazonに多くの企業がある
  • だからこれは個人学習プロジェクトとして残すことにした
  • NYCTrainSignに関するものはオープンソースとして公開した
    • exploitコードを含むAPIサーバーも含まれる
  • また、新しいNYCTrainSignサーバーは引き続きホスティングする予定だ(ホスティング費用は非常に安い)
  • 新機能を追加するつもりはないが、改善版ファームウェアのアイデアはある
  • Signを持っているなら、リモート管理用サイトを作ってあるので使ってみてほしい
  • 「Signを持っていないなら、新しく買わないでください」

2件のコメント

 
loblue 2023-01-18

面白いですね(笑)
でも、これがもし収益性があると判断して事業化したら、法的な問題にはならないのでしょうか?

 
kloty 2023-01-16

タイクーンゲームを眺めているような感じですね

Code Quality > コード品質に関するさまざまな問題が「なし」になっているのは誤記のようです