21 pontos por xguru 2023-01-16 | 2 comentários | Compartilhar no WhatsApp

Faz 5 anos que a NYCTrainSign encerrou as atividades

  • Um painel pessoal de LED baseado em Raspberry Pi que mostra o horário de chegada do metrô de Nova York
  • Investiga por que a empresa fracassou e escreve um exploit para assumir o controle da frota deles
  • Na época, fez enorme sucesso no Instagram/Facebook, mas muita gente nem recebeu o produto
  • Consegui um por meio de um vendedor de usados e, ao desmontá-lo de verdade, vi que o interior era de baixíssimo nível e que o negócio não era sustentável
    • O BOM (Bill of Materials) era alto demais, ou seja, o custo de fabricação em si era muito alto
    • Eu normalmente multiplico o custo do BOM por 4 para estimar o preço de varejo

Preços dos componentes

  • Raspberry Pi 3 - $35
  • Adafruit LED Matrix Hat - $25
  • LED Matrix * 2 - $60
  • Fonte de alimentação 5V 2A - $5
  • Cartão MicroSD de 4GB - $7
  • Gabinete de madeira - $15
  • Além disso, fios, botões, parafusos, embalagem etc. - $3
  • Ou seja, só fazendo essa conta já dá $150, então deveriam ter cobrado $600

Eles não conheciam o truque

  • Ao ver o site deles no Web Archive, parece que tentaram vender por $599
  • Mas no começo também venderam por $299 ou até $100 (versão beta)
  • Parece que também tentaram alugar por $30/mês (como hardware exige custo inicial, esse modelo também teria sido difícil)

Quem vendeu as pás

  • “Na corrida do ouro, venda pás”: aqui, quem vendeu as pás e ganhou dinheiro? A Adafruit
  • Ao usar o Adafruit LED Matrix HAT, o preço subiu $25 (cerca de 20%)
  • Isso poderia ter sido economizado com um pouco de esforço de engenharia, porque não era algo indispensável
    • Também dava para fazer a fiação manualmente, ou usar HATs baratos de $2
  • A maioria dos produtos da Adafruit é usada só no protótipo inicial e depois, na produção real, é substituída por algo mais barato
  • Também dá para considerar a Raspberry Pi como vendedora de pás, mas usar Arduino ou ESP32 parece um exagero
  • Acho que o certo teria sido começar com Pi 3 e depois trocar para Pi Zero W

Lendo o código

  • Dei uma olhada no código em Python e NodeJS que estava no MicroSD
  • Havia 2 componentes principais: o servidor Python (servidor de LED) e o servidor NodeJS (servidor de configuração)

LED Server

  • Faz o desenho na LED Matrix e busca as informações de trem na API da empresa
  • Se comunica com o servidor de configuração para obter as preferências do usuário
  • Recebe os dados do trem, gera imagem/texto e renderiza na LED Matrix

Config Server

  • Armazena informações do usuário em JSON e, ao receber pedidos de atualização, atualiza esse arquivo
  • Na inicialização, o Config Server busca as informações mais recentes
  • Conecta ao AWS IoT Core e recebe alterações de configuração em tempo real do servidor MQTT

Qualidade do código

  • Havia vários problemas de qualidade no código
  • A Transit API não levava em conta que cada estação pode ter várias linhas de trem
  • Não havia processo de atualização de firmware
  • Muito código Python simplesmente usava chamadas de sistema para fazer alterações no sistema
  • O servidor Python de LED se comunicava com o servidor NodeJS de configuração para obter informações; imagino que isso tenha sido porque AWS IoT Core era mais fácil de programar em NodeJS, enquanto Python era mais prático para gerenciar a tela
  • Havia mistura de tabs e spaces (provavelmente erro de configuração do editor)
  • Todo o histórico do git estava salvo no micro sd
  • O histórico do bash também estava salvo
  • Quase não havia reutilização de código

Ressurreição do Sign

Obtendo shell

  • Como a maioria dos Raspberry Pi não tem o MicroSD criptografado, é fácil obter root shell
  • Basta iniciar em modo single-user e resetar a senha do usuário pi
  • A API da empresa já não existia mais e o dispositivo foi feito para usar dados locais hardcoded quando está sem internet

Recriando o servidor

Obtendo controle do Sign

  • Como outros dispositivos IoT, o Sign também usava muitas chamadas de sistema
  • Uma delas concatenava o Sign ID diretamente em um comando shell
  • Como eu controlava diretamente o servidor de API, passei a poder controlar remotamente todos os Signs
  • Depois de algumas tentativas, escrevi um exploit
    • Quando o dispositivo Sign liga, ele busca as informações de configuração e faz uma requisição do logo em imagem
    • Nesse momento, o Sign ID é enviado
    • Guardei esse ID e, na requisição seguinte do logo em imagem, envio o exploit para o Sign
    • Quando o usuário reinicia o Sign, o exploit é executado na inicialização
    • O exploit atualiza o código necessário e faz o pareamento com o nosso servidor
  • Agora esses dispositivos funcionam bem com o novo servidor de API

O que aconteceu?

  • O problema foi vender com desconto demais
    • Não dá para fabricar por $150 e vender por $117
    • Até $300 era barato demais; desde o começo deveriam ter cobrado $600
  • Para uma startup, gastaram demais com pessoal e custos de marketing
  • Também não conseguiam fabricar produtos suficientes para a demanda (tudo manual)
    • Mesmo assim, continuaram aceitando pedidos, quase como um esquema Ponzi, usando os pedidos novos para fabricar os que antes tinham sido vendidos com desconto
    • Também não conseguiram transferir a produção para a China
  • Pelo LinkedIn, havia 4 fundadores no início; depois isso subiu para 11 e, em certo momento, chegou a 15 pessoas
    • Mesmo assumindo apenas $60k por fundador, ainda precisariam vender pelo menos 600 unidades de um dispositivo que desse $400 de lucro
  • Segundo uma captura de tela compartilhada pelos fundadores, a empresa teria faturado $250k em 2 meses
    • Mas, como deram desconto demais no aparelho, não dá para saber quanto realmente lucraram
  • Os fundadores não explicaram claramente o que aconteceu, por que tão poucos produtos foram enviados nem para onde foi todo o dinheiro
  • Um dos fundadores disse que, pessoalmente, não recebeu dinheiro nenhum
  • Acredito que a equipe da NYCTrainSign teria tido sucesso se ao menos tivesse conversado com alguém que entendesse de eletrônica
    • Em vez disso, o principal advisor deles era um professor universitário de ciência da computação
  • A NYCTrainSign acabou sendo um projeto que o CEO fez no tempo livre e tentou vender por $300~$600 sem considerar o que viria depois
  • Em resumo, "Good Idea, Good Timing, Bad Team, Bad Product"

What Happens Now

  • Quando comecei isso, sonhei em vender meu próprio Sign
  • Fiz um com ESP32 e ainda uso até hoje
  • Mas, quanto mais penso nisso, mais acho que não sou a pessoa certa para fabricar e vender isso
  • O mercado de LED Signs já é muito competitivo: existem a Tidbyt e inúmeras empresas na Amazon
  • Então decidi deixar isso apenas como um projeto pessoal de aprendizado
  • Tudo relacionado à NYCTrainSign foi publicado como open source
    • Incluindo o servidor de API com o código do exploit
  • Também pretendo continuar hospedando o novo servidor da NYCTrainSign (o custo de hospedagem é muito baixo)
  • Não vou adicionar novos recursos, mas tenho ideias para um firmware melhorado
  • Se você tem um Sign, existe um site para gerenciá-lo remotamente, então vale a pena usar
  • “Se você não tem um Sign, não compre um agora”

2 comentários

 
loblue 2023-01-18

Interessante kkk
Mas, se julgarem que isso tem potencial de lucro e transformarem em negócio, será que não daria problema legal?

 
kloty 2023-01-16

Parece que estou vendo um jogo de magnata

Code Quality > Acho que há um erro de digitação, e parece que vários problemas de qualidade de código foram marcados como "nenhum"