Launch HN: Haystack (YC S24) – tecnologia para visualizar e editar código em uma tela infinita
(github.com/haystackeditor)- O Haystack Editor é um produto que combina a simplicidade de um editor de código com uma UI em canvas para facilitar a compreensão do código de relance, e é desenvolvido neste repositório junto com a comunidade
- O repositório publica não só código e issues, mas também o roadmap, e o código-fonte é disponibilizado sob a PolyForm Strict License 1.0.0
- A distribuição do produto é baseada no repositório com customizações específicas e é oferecida sob termos de serviço separados
- Exemplos de recursos incluem Canvas Workspaces, Explorer View, Keyboard Navigation e Generate Function, além de suporte abrangente para edição, navegação e compreensão de código, depuração leve, um modelo de extensões e integrações leves com ferramentas existentes
- O Haystack é atualizado semanalmente com novos recursos e correções de bugs, e está disponível para download para Windows, macOS e Linux
Papel do repositório do Haystack Editor
- Este repositório é o espaço onde a Haystack Software desenvolve o produto Haystack Editor junto com a comunidade
- Além do trabalho em código e issues, o roadmap também é público
- O código-fonte é disponibilizado sob a PolyForm Strict License 1.0.0
Produto Haystack Editor
- Haystack Editor é a distribuição do repositório
Haystack Editore inclui customizações específicas - A distribuição é lançada sob terms of service separados
- O produto combina a simplicidade de um editor de código com uma UI em canvas para tornar o código mais fácil de entender de relance
- O escopo de suporte inclui:
- edição de código abrangente
- navegação pelo código
- suporte à compreensão do código
- depuração leve
- um modelo rico de extensões
- integração leve com ferramentas existentes
- O Haystack é atualizado semanalmente com novos recursos e correções de bugs
- Downloads para Windows, macOS e Linux estão disponíveis no site do Haystack
Prévia dos recursos
- Oferece o recurso Canvas Workspaces
- Oferece o recurso Explorer View
- Oferece o recurso Keyboard Navigation
- Oferece o recurso Generate Function
Caminhos para contribuição e feedback
- Há várias formas de participar do projeto:
- Enviar bugs e solicitações de recursos
- Ajudar a validar mudanças registradas
- Revisar alterações no código-fonte
- Revisar a documentação, corrigir erros de digitação ou enviar PRs adicionando novo conteúdo
- Para contribuir diretamente com a base de código, consulte o documento How to Contribute
- Como compilar e executar a partir do código-fonte
- Fluxo de desenvolvimento, incluindo depuração e execução de testes
- Envio de PRs
- Encontrar issues para trabalhar
- Os canais de feedback são:
- Fazer perguntas no Discord
- Registrar uma issue
- Seguir @AkshaySubr42403 e enviar comentários
Projetos relacionados e extensões incluídas
- Vários componentes centrais e extensões do Haystack estão em repositórios separados no GitHub
- Como exemplo, o node debug adapter e o mono debug adapter ficam em repositórios separados
- Outro exemplo é o Pixi repository
- O Haystack inclui várias extensões integradas na pasta
extensions- Inclui gramáticas e snippets para várias linguagens
- Extensões que oferecem suporte rico a linguagens, como conclusão de código ou Go to Definition, usam o sufixo
language-features - Por exemplo, a extensão
jsonoferece colorização deJSON, enquanto a extensãojson-language-featuresoferece suporte rico à linguagem paraJSON
1 comentários
Comentários do Hacker News
Essa ideia é excelente há décadas. Espero que a Haystack tenha sucesso, assim como muitas tentativas anteriores, e a execução inicial parece promissora.
Ainda assim, deve haver muitos obstáculos, como a dificuldade de entender chamadores/chamados ou as preferências de UX que variam de desenvolvedor para desenvolvedor. Sempre achei que isso poderia ficar muito mais poderoso em um espaço bem maior que uma tela 2D, por exemplo em um ambiente como um headset de VR.
Muito legal. Imaginei a base de código inteira de uma organização mapeada assim, visível através de vários frameworks e linguagens.
Não sei se perdi isso no vídeo ou se ainda não é possível, mas conectar nós manualmente dá trabalho demais; seria bom ter um bot simples que rodasse na pasta do repositório e automatizasse a visualização. Adicionei à minha lista de interesse.
Eu miraria em grandes organizações empresariais ou grupos de TI de prefeituras/governos locais que estejam fazendo ou planejando transformação digital. Eles precisam se orientar e entender o sentido entre trabalho legado e trabalho novo.
Se der certo, em um ano a Salesforce pode bater à porta. Parece combinar bastante com a visão e o portfólio deles.
Não sei se seria realmente usável nesse estado, mas seria divertido tentar. Seria como um diagrama UML de uma base de código inteira, com milhares de setas.
Aí você poderia dizer a um colega que o arquivo a ser alterado está em algum lugar no canto superior direito, e o diff do Git também ficaria visível, permitindo dar zoom nas mudanças espalhadas por aí.
Por exemplo, lidar com perguntas como “o que acontece desde o momento em que clico com o mouse no botão de assinatura até o backend?”.
Fico curioso se este projeto foi inspirado no Light Table.
Como pedido de funcionalidade, gostaria que a visualização fosse além de 2D. Sistemas realmente complexos costumam ser grafos sofisticados — ou, colocando de forma positiva, um novelo —, e já tive a experiência de que apenas uma visualização em plano 2D não basta.
Seria bom ter algo como uma visualização em esferas concêntricas, com serviços de borda nas camadas externas e serviços centrais/de domínio nas internas.
É interessante você falar de uma visão mais próxima de 3D. Já pensamos nessa ideia, mas é realmente difícil fazê-la bem de uma forma que os usuários consigam entender. Ainda assim, ela definitivamente faz parte da visão de futuro.
Edit: removi a especulação sobre o Light Table porque não era verdadeira.
Uma pergunta meio tangencial, mas existe algum canvas infinito open source de referência que valha a pena usar? Estou fazendo um jogo de cartas e preciso de um canvas infinito multiplayer. Gostaria de receber recomendações.
Se fosse uma extensão do VSCode, acho que eu experimentaria. Tenho vontade de usar, mas hoje em dia vivo dentro do Cursor.
Fico me perguntando por que não dá para fazer como extensão. A ideia é muito boa, e consigo imaginar perfeitamente isso dentro de uma aba na área do editor.
Assim também daria para ter várias abas do Haystack, tornando a troca de contexto muito mais fácil. Mesmo sendo baseado no VSCode, é um pouco chato ter que instalar outro IDE. Ainda assim, torço para que continuem mandando bem.
Isso me lembra o ambiente Kansas da linguagem de programação Self. Há um vídeo feito pela Sun em 1995:
https://www.youtube.com/watch?v=Ox5P7QyL774
Depois desse vídeo, recursos de busca ainda mais interessantes foram adicionados.
Muito bom. É quase igual ao processo que eu sigo ao olhar uma base de código grande, mas muito mais limpo e organizado.
Normalmente deixo cinco ou seis terminais abertos apontando para vários arquivos-fonte e tento montar um mapa na cabeça. No fim acabo pegando o jeito, mas é um processo trabalhoso; uma ferramenta dessas ajudaria demais. Agora só falta combinar com um monitor ultrawide.
Acho que ajudaria por reduzir o que preciso manter na cabeça, mas a UI atual depende demais do mouse. Seria bom criar atalhos de teclado e fazer as janelas ficarem em “tiling”, como no gerenciador de janelas dwm, para que não seja necessário ajustar o tamanho delas manualmente.
Quanto ao redimensionamento manual, estamos tentando implementar tiling dentro do viewport. Se você nos disser o que faz você precisar redimensionar, talvez possamos corrigir.
Parece uma abordagem conveniente para desenvolvedores espalharem e mapearem código em um espaço bidimensional. Isso é parecido com o método dos loci[1], em que o desenvolvedor codifica espacialmente trechos de código e conexões de forma elaborada para reforçar a memória e também aumentar a compreensão.
Por isso, ouso sugerir adicionar opções de padrões de fundo que forneçam um pouco de informação sem atrapalhar. Não tenho um padrão específico em mente, mas, se o fundo fosse um mapa-múndi, o usuário poderia lembrar mais rapidamente a posição que quer encontrar e também se localizar mais depressa.
Na mesma linha de pensamento, valeria considerar permitir que o usuário defina a cor da borda das abas ou adicione ruído diferente para cada aba. O ruído poderia esmaecer conforme o nível de zoom e a distância em relação ao centro do viewport.
https://en.wikipedia.org/wiki/Method_of_loci
A ideia de usar diferenças sutis de cor ou som também é interessante. Vamos pensar nisso.