2 pontos por GN⁺ 2023-10-21 | 1 comentários | Compartilhar no WhatsApp
  • Vai além das limitações de PDFs e páginas web estáticas, buscando uma linguagem de documentos em que o navegador entenda a estrutura do documento e o leitor possa usá-la diretamente
  • Documentos Nota são compilados em programas JavaScript e executados no navegador, permitindo usar variáveis, funções e estruturas de dados na escrita de documentos
  • Foi projetada pensando na integração com bibliotecas JavaScript como KaTeX, Vega-Lite e Penrose, além de suporte a requisitos de acessibilidade
  • Com o pacote @nota-lang/nota, é possível instalar o executável nota e trabalhar com documentos em fluxos de build ou edição interativa
  • Ainda é uma tecnologia nova e em mudança, então a arquitetura e a API podem mudar, e é preciso considerar bugs, lacunas e imprecisões nas ferramentas e na documentação

Estrutura de documentos que o navegador entende

  • Nota é uma linguagem para escrever documentos como artigos acadêmicos e posts de blog
  • O objetivo é levar os documentos para um meio próprio do século 21
  • Dentro de um documento, há muita estrutura que o leitor precisa acompanhar, como definições de termos e referências
    • Por exemplo, a palavra Nota faz referência a um termo definido no parágrafo anterior
    • O Nota permite que o autor expresse essa estrutura, e o navegador a compreenda para que o leitor possa aproveitá-la
    • Na página de exemplo, é possível clicar ou dar duplo clique na referência Nota para ver como isso funciona
  • Documentos Nota são compilados em programas JavaScript
    • É possível visualizar o documento em qualquer dispositivo com navegador web
    • Variáveis, funções e estruturas de dados podem ser usadas para simplificar a redação do documento
    • Pode ser integrado com bibliotecas JavaScript como KaTeX, Vega-Lite, Penrose
    • Facilita o suporte a requisitos de acessibilidade, como leitores de tela

Instalação e fluxo de edição

  • O Nota pode ser usado instalando o executável nota por meio do pacote @nota-lang/nota
    • Os requisitos são NodeJS ≥ 16 e npm ≥ 6
    • O diretório global de binários do NodeJS precisa estar no PATH do shell
  • Um único documento Nota pode ser compilado com o seguinte fluxo
    • npm install --global @nota-lang/nota
    • echo "@Title: Hello world" > index.nota
    • nota build index.nota
    • open dist/index.html
  • Arquivos Nota podem ser editados de forma interativa com o comando nota edit index.nota
  • A forma de escrever documentos pode ser consultada na Reference
  • Para adicionar Nota a um site ou ver a arquitetura, consulte o Integration guide

A lacuna entre PDFs e a web estática

  • Os principais meios de documentos digitais se dividem entre PDFs e páginas web
    • O PDF foi projetado para refletir documentos físicos, carregando restrições do papel, como paginação, largura fixa e estilo imutável
    • Páginas web permitem formatação dinâmica, como redimensionamento para celulares, tradução para outros idiomas e mudança de cores para usuários com daltonismo
    • Páginas web também permitem interações dinâmicas, como textos que pedem mais contexto, diagramas que mudam de perspectiva e anotações para depois
  • Hoje, esses recursos dinâmicos continuam sendo acessíveis principalmente a desenvolvedores web especializados
    • Ferramentas de documentação existentes como LaTeX, Pandoc, Markdown e Scribble, em sua maioria, só conseguem gerar páginas web estáticas
    • O Nota busca reduzir essa lacuna com uma linguagem de documentos de baixa barreira de entrada, alto teto de extensibilidade e curva de aprendizado suave

Estado atual e materiais de referência

  • O Nota ainda é uma tecnologia nova e em evolução
    • A arquitetura e a API continuam mudando
    • As ferramentas podem ter bugs e recursos ausentes
    • A documentação pode estar incompleta ou incorreta
    • No momento, o projeto busca usuários iniciais que queiram participar da construção do Nota como linguagem de documentos do futuro
  • Os componentes @Definition e @Ref permitem que, com uma pequena quantidade de anotações no documento, o runtime do Nota mostre em contexto a definição de uma referência por meio de tooltip
    • Versões futuras do Nota podem incluir recursos como encontrar todas as referências a uma definição específica
  • A filosofia de design pode ser vista em mais detalhes em A New Medium for Communicating Research on Programming Languages

1 comentários

 
GN⁺ 2023-10-21
Opiniões no Hacker News
  • Sou a pessoa que criou o Nota, e estou refinando novamente o design desde o protótipo inicial da página web
    Estou construindo uma base mais sólida para questões como como misturar conteúdo e computação (https://arxiv.org/abs/2310.04368) e como a sintaxe torna o trabalho com documentos mais fácil/difícil/impossível (https://github.com/cognitive-engineering-lab/doclang-benchma...)
    Ainda acredito na grande filosofia, mas acho que o Nota vai estar bem diferente em cerca de 6 meses. Nesse meio-tempo, vejo o Typst como o avanço mais legal na área de linguagens de documentos e recomendo dar uma olhada: https://typst.app/
    A próxima versão do Nota deverá ser escrita 99% em Rust :-)

    • Mais importante do que a escolha da linguagem parece ser tornar a API fácil de usar para um público amplo
      Se desempenho for realmente um problema, Rust faz mais sentido do que JavaScript, mas não sei se isso será decisivo para a maioria dos casos de uso
      Mesmo tendo escrito muitos documentos grandes em LaTeX, nunca gostei dele; era uma monstruosidade para o meio acadêmico, não para negócios. Mesmo no Word, tarefas que eu queria fazer de forma consistente nem sempre eram fáceis; os estilos rapidamente se bagunçam, e a numeração e os marcadores também são propensos a deixar erros se infiltrarem
      Quando há várias rodadas de revisões, controle de alterações vira um grande problema, e no fim você acaba dependendo da confiança de que a outra parte não vai sobrescrever o rastreamento. Só um produto que garanta que todas as alterações, do início até a aprovação final, sejam exibidas corretamente já poderia ser um killer app que empresas e advogados adorariam
      Se salpicar blockchain nisso, talvez fique mais fácil captar investimento, mas na verdade parece mais um problema básico de criptografia do que de blockchain, e esse nível de complexidade não parece necessário
    • Como alguém da academia, 99% do meu tempo é gasto em duas coisas: escrever cálculos estatísticos em linguagens como R ou Python e escrever texto em inglês
      O mais importante em uma linguagem de documentos é priorizar essas duas coisas. Por exemplo, documentos TeX começam com código preparatório como \documentclass, vários \usepackage, definições de theorem e configurações de fonte, enquanto documentos R Markdown/Quarto começam diretamente com o significado real do texto, como título, autores e resumo
      A diferença de ênfase fica bem clara
    • Seria interessante se o Nota conseguisse resolver um problema que o TeX/LaTeX é teoricamente capaz de resolver, mas na prática não resolve bem: ou seja, a facilidade de estilização para atender a exigências externas idiotas
      Isso inclui layouts apertados e cheios de informação, como pôsteres acadêmicos A0; estilos de documentos de normas nacionais como o GOST do espaço pós-soviético; requisitos de estilos bibliográficos que se multiplicam explosivamente conforme cada tradição internacional; fazer parecer com o estilo padrão de uma versão específica do MS Word; posicionar com precisão imagens ou texto sobre figuras para correções rápidas em artigos; e ajustar conscientemente esse tipo de coisa
      No mundo TeX, tudo isso é tecnicamente possível, mas na prática exige magia negra tão profunda que nem usuários comuns com diploma querem se meter nisso
    • O Nota parece bom. Criei algo parecido chamado Literate Markdown, inspirado na “programação literária” de Knuth, e desde o início ele foi focado em misturar computação e explicação
      Nos últimos meses, tenho me divertido usando isso para explorar ideias de animação em SVG (https://simpatico.io/svg) ou concretizar novas estruturas de dados/algoritmos (https://simpatico.io/stree3)
      O servidor inteiro e o processador de Markdown têm cerca de 500 linhas de código Node legível, com pouquíssimas dependências e nenhuma dependência transitiva, e sem necessidade de etapa de compilação. Por padrão, o servidor não permite recursos de terceiros nem cookies de nenhum tipo
      Está no GitHub sob licença MIT, e estou organizando enquanto movo de um repositório pessoal para um repositório de organização. Referência: https://simpatico.io/lit
    • Curiosamente, esses problemas e outros além deles são resolvidos de forma bastante razoável no Org Mode. Só que poucas pessoas usam Emacs, então pouca gente sabe disso
  • Onde não há necessidade de “dinamicidade essencial”, a ausência dela é, na verdade, um recurso, não um bug

    • Concordo totalmente. Dinamicidade é ótima para apps web, mas é a coisa menos desejada em documentos
    • Em telas pequenas, especialmente no celular, parece necessário ao menos um layout dinâmico básico para ler PDFs confortavelmente
      No celular, prefiro muito mais ler páginas web do que PDFs, porque uma página web razoável normalmente consegue se adaptar à tela do aparelho
    • O PDF restringe as informações ao limitar a forma como elas são reproduzidas digitalmente. No PDF não existe “simplesmente” copiar/colar; há um monte de erros estranhos, e é preciso reformatar bastante o texto ou passar por software especializado
      Precisamos de um formato que codifique informação visual e informação digital juntas. A camada digital não precisa ficar visível por padrão, mas deve ser acessível quando necessário
    • A especificação PDF da Adobe, surpreendentemente, dá suporte à execução de JavaScript (https://helpx.adobe.com/acrobat/using/applying-actions-scrip...), gráficos 3D interativos (https://www.youtube.com/watch?v=PKfyFt3zT5A, https://www.youtube.com/watch?v=vW5-1LVtd9U), áudio e vídeo (https://helpx.adobe.com/acrobat/using/rich-media.html) e até o “Liquid Mode” para documentos PDF responsivos (https://www.adobe.com/acrobat/hub/what-is-adobe-liquid-mode....)
      Claro que esses “recursos” foram considerados bugs e removidos da especificação ISO PDF/A, voltada à preservação de longo prazo: https://en.wikipedia.org/wiki/PDF/A
      O ponto é que, às vezes, um documento deve ser apenas um documento. Em artigos científicos, LaTeX é algo que pessoas escrevem para pessoas, e comandos e pacotes customizados permitem criar documentos em texto puro tão legíveis quanto o artigo gerado. Isso também é bom para acessibilidade
    • No exemplo do artigo da PLDI, símbolos dentro de fórmulas grandes e densas têm descrições em pop-up. Esse tipo de coisa pode ajudar de verdade
      Há um território inexplorado interessante em documentos dinâmicos, mas precisamos de bons exemplos de uso com bom gosto
  • Em resumo, é mais próximo de LaTeX, tem também alguns elementos de Markdown, é escrito em JavaScript, permitindo que muitas pessoas contribuam em uma linguagem que já conhecem, e é bom que tenha licença MIT
    Não sei se tenho um uso imediato para isso, mas parece bem legal. Se eu fosse escrever algo que precisasse de recursos no estilo LaTeX, mas o local de submissão não exigisse LaTeX, acho que experimentaria o Nota
    Considero Knuth quase uma figura semidivina, mas não é como se ele tivesse descido dos céus, nos entregue o TeX e dito: “nunca tentem nada novo para todo o sempre”

    • O TeX certamente foi revolucionário, mas o vejo como um produto de sua época. Pelos padrões atuais, há inteligência demais em expansão de macros e técnicas de entrelaçamento para caber em limites de memória que hoje parecem ridículos
      Também faltam muitos mecanismos de prevenção de erros e recursos de conveniência oferecidos por linguagens modernas. Ao usar LaTeX, preciso depender bastante de fragmentos em \input{} para isolar blocos e evitar que tudo quebre por causa de uma única barra de escape esquecida
      Continuo esperando por uma releitura moderna, mas sinto que estamos presos em um ótimo local difícil de escapar por causa de décadas de inércia e pacotes acumulados em torno do TeX
    • Vale a pena dar uma olhada também em https://typst.app/
  • Entre coisas parecidas estão https://pandoc.org/, https://quarto.org/, https://markdoc.dev/, https://mdxjs.com/, https://typst.app/

    • A lista de formatos suportados pelo Pandoc é impressionante
  • O problema de novas tentativas nessa área é que elas entram em um espaço já lotado demais. Não importa muito se as soluções existentes não são perfeitas
    É parecido com chegar a uma cidade histórica europeia com mil anos de arquitetura acumulada e defender o projeto de um excelente prédio novo. Terrenos vazios são raros, e as pessoas não derrubam estruturas antigas só para testar algo novo. Elas precisam perceber uma vantagem esmagadora
    Na arquitetura, o aço e o concreto armado abriram a dimensão vertical e melhoraram muito o aproveitamento do espaço; depois disso, a história mudou
    A questão central é se existe alguma dimensão inexplorada capaz de atrair pessoas para mais um formato de documento que promete “melhorar” ASCII, reStructuredText, wikitext, Markdown, TeX/LaTeX, AsciiDoc, HTML etc.
    A resposta comum é uma infraestrutura de hipertexto semântico. A visão original ainda não se concretizou. Se assumirmos que os ecossistemas fechados de hoje são um pesadelo passageiro, uma web novamente descentralizada precisará de uma infraestrutura de autoria de documentos moderna, amigável ao usuário e fortalecedora
    Ainda assim, podem existir outras dimensões capazes de levar a criação e o compartilhamento de documentos a um novo patamar. A beleza da inovação está em não ficar presa às regras e sabedorias existentes

    • Se você quer uma web descentralizada, uma “Userweb” meio equivalente à Usenet, acho que precisa de um protocolo como o BitTorrent
      É necessário um formato de documento eficiente e, para isso, ele deve ser um formato que não tente fazer tudo. Ou seja, tabelas devem separar tipos de documento por arquivo, como nos formatos padrão de planilha, diferentemente do HTML, que tenta fazer tudo por conta própria, incluindo tabelas e gráficos (SVG)
      Ao separar cada coisa em arquivos distintos, em vez de o usuário ver tudo em um único navegador, ele pode escolher o programa que quiser para visualizar ou manipular documentos; isso também ajuda na distribuição pela rede e é vantajoso em ambientes com pouco armazenamento ou baixa largura de banda
      Então, do meu ponto de vista, não há nada novo a inventar. Basta especializar e refinar o que já foi inventado
  • Seguindo o link, https://willcrichton.net/nota/ mostra vantagens convincentes no nicho para o qual o Nota foi pensado: tornar artigos acadêmicos de linguagens de programação mais fáceis de entender
    Se ele consegue renderizar PDFs de alta qualidade é uma necessidade e uma pergunta óbvia. Para compatibilidade com sistemas existentes, talvez fosse até melhor renderizar para LaTeX

  • Basicamente, o Nota é markup + código (JavaScript), e essa combinação é o território que o MDX mira. Quando alguém mencionou isso no passado, o criador disse que o Nota é voltado para documentação, enquanto o MDX é voltado para sites: https://news.ycombinator.com/item?id=31349579
    Sendo assim, acho que, para o Nota decolar, alguém precisa envolvê-lo em um produto. O resultado parece bom, mas mexer com Node.js para criar documentos é trabalhoso demais, e passa aquela sensação de LaTeX de novo. A maioria vai preferir Notion ou um processador de texto

    • LaTeX, e mais genericamente a família TeX, nunca desapareceu. Ainda hoje é a ferramenta padrão para escrever artigos de periódicos na maioria das áreas de STEM
      Além disso, o Nota não é um concorrente direto da família TeX. O Nota cria coisas para serem lidas por navegadores web, enquanto xxxTeX cria coisas para serem lidas por leitores de PDF. Sei que o xxxTeX também pode gerar outros formatos de saída, mas a maioria o usa para gerar PDF
    • Só o fato de o Nota incluir um estilo padrão, uma espécie de estilo de escrita, já o coloca em uma categoria totalmente diferente do MDX
      O MDX vem pronto para ser usado com qualquer framework, como React/Vue, mas isso significa que, por padrão, ele não oferece praticamente nenhuma opinião
      O Nota parece algo que poderia ser plugado em um gerador de sites estáticos. Claro, para isso seria preciso fazer os dois trabalharem juntos, mas acho que é uma expectativa alcançável para alguém um pouco mais dedicado do que eu
  • Não entendo por que seria necessária uma linguagem que compila para JavaScript para criar páginas de texto. O AsciiDoc já atende ao mesmo objetivo
    Editoras reais, como a O’Reilly, também usam AsciiDoc como formato de entrada para criar livros e sites

    • Concordo quanto ao AsciiDoc. Se Markdown é mais adequado para conteúdos relativamente curtos, e LaTeX está mais próximo de artigos acadêmicos completos com citações, fórmulas etc., o AsciiDoc acerta bem o ponto intermediário
      Venho usando AsciiDoc nos últimos anos e gosto bastante. Só volto para Markdown em lugares onde AsciiDoc ainda não é suportado. Por exemplo, GitHub e GitLab suportam renderização de AsciiDoc
      Infelizmente, o PyPI ainda não suporta, mas é bom ver que mais gente parece estar olhando para isso: https://github.com/pypa/readme_renderer/issues/205
    • Graças ao Asciidoctor, asciidoc é o melhor. Concordo que, como formato, ele ocupa exatamente o ponto ideal
      Porém, tenho algumas frustrações com as ferramentas atuais. Dá para ver, e eu agradeço, que um esforço enorme foi colocado no Asciidoctor, mas não há saída HTML5 semântica, a integração com geradores de imagens é difícil, ou pelo menos mais difícil do que deveria ser, e ele é pesado a ponto de ser a única dependência Ruby em toda a minha máquina
      Tirando o problema do Ruby, essas questões estão abertas no GitHub, então acho que podem ser resolvidas com mais tempo e recursos
  • Não sei bem. Emacs org-mode parece melhor e também menos dependente de JavaScript
    https://docusaurus.io/ também é muito bom e flexível. Se quiser expandir o Nota de uma forma parecida, recomendo olhar para esses dois

  • Eu estava justamente pensando na forma mais fácil de criar um blog com conteúdo majoritariamente estático, mas que permita inserir gráficos interativos ou customizações arbitrárias quando eu quiser. Fico imaginando se o Nota seria uma boa opção
    Também olhei o Quarto (https://quarto.org/) como outra alternativa, e talvez dê para usar um blog estático simples como Jekyll e depois editar manualmente o HTML gerado quando necessário

    • Eu misturo XHTML com um pouco de XML customizado e gero o XHTML final com XSLT: https://git.uberspace.net/homepage/
      Assim dá para usar todo o HTML, customizar o processo de geração, gerenciar as dependências com relativa facilidade, e os formatos relacionados são padronizados
    • Recomendo fortemente o Astro: https://astro.build/
      No Astro, você escreve componentes no estilo React, e ele compila para HTML/CSS puro, exceto nos casos em que JavaScript é realmente necessário. Também fiz meu site pessoal e meu blog com Astro: https://sjer.red/, e o código-fonte está em https://github.com/shepherdjerred/shepherdjerred.com
      Também há um tutorial para criar um blog com Astro: https://docs.astro.build/en/tutorial/0-introduction/
    • Também existe o caminho de usar shortcodes do Hugo. Imagino que o Jekyll tenha algo parecido, e arquivos HTML de saída de bibliotecas de visualização de dados como Vega-Altair (Python) ou plotly podem ser usados como entrada para shortcodes