2 điểm bởi GN⁺ 2023-10-21 | 1 bình luận | Chia sẻ qua WhatsApp
  • Vượt qua giới hạn của PDF và trang web tĩnh, hướng tới một ngôn ngữ tài liệu nơi trình duyệt hiểu cấu trúc tài liệu và người đọc có thể trực tiếp khai thác nó
  • Tài liệu Nota được biên dịch thành chương trình JavaScript và chạy trong trình duyệt, cho phép dùng biến, hàm và cấu trúc dữ liệu khi soạn tài liệu
  • Được thiết kế với mục tiêu tích hợp thư viện JavaScript như KaTeX, Vega-Lite, Penrose và hỗ trợ các yêu cầu về khả năng truy cập
  • Có thể cài tệp thực thi nota qua gói @nota-lang/nota, rồi xử lý tài liệu theo luồng build hoặc chỉnh sửa tương tác
  • Đây vẫn là công nghệ mới và đang thay đổi, nên kiến trúc và API có thể thay đổi; cần tính đến lỗi, thiếu sót và điểm chưa chính xác trong công cụ cũng như tài liệu

Cấu trúc tài liệu mà trình duyệt có thể hiểu

  • Nota là một ngôn ngữ để viết các tài liệu như bài báo học thuật và bài đăng blog
  • Mục tiêu là đưa tài liệu trở thành một phương tiện của thế kỷ 21
  • Bên trong tài liệu có nhiều cấu trúc mà người đọc cần lần theo, như định nghĩa thuật ngữ và tham chiếu
    • Ví dụ, từ Nota tham chiếu đến thuật ngữ đã được định nghĩa ở đoạn trước
    • Nota cho phép tác giả biểu đạt các cấu trúc này, và để trình duyệt hiểu chúng nhằm giúp người đọc khai thác được
    • Trên trang ví dụ, có thể nhấp hoặc nhấp đúp vào tham chiếu Nota để xem cách nó hoạt động
  • Tài liệu Nota được biên dịch thành chương trình JavaScript
    • Có thể xem tài liệu trên mọi thiết bị có trình duyệt web
    • Có thể dùng biến, hàm và cấu trúc dữ liệu để đơn giản hóa việc soạn tài liệu
    • Có thể tích hợp với các thư viện JavaScript như KaTeX, Vega-Lite, Penrose
    • Dễ hỗ trợ các yêu cầu về khả năng truy cập như trình đọc màn hình

Cài đặt và luồng chỉnh sửa

  • Có thể cài tệp thực thi nota qua gói @nota-lang/nota để sử dụng Nota
    • Yêu cầu là NodeJS ≥ 16npm ≥ 6
    • Thư mục nhị phân toàn cục của NodeJS phải nằm trong PATH của shell
  • Có thể build một tài liệu Nota đơn theo luồng sau
    • npm install --global @nota-lang/nota
    • echo "@Title: Hello world" > index.nota
    • nota build index.nota
    • open dist/index.html
  • Có thể chỉnh sửa tương tác tệp Nota bằng lệnh nota edit index.nota
  • Cách viết tài liệu có thể xem trong Reference
  • Nếu muốn thêm Nota vào website hoặc xem kiến trúc, có thể tham khảo Integration guide

Khoảng cách giữa PDF và web tĩnh

  • Các phương tiện chính của tài liệu số được chia thành PDF và trang web
    • PDF được thiết kế để phản ánh tài liệu vật lý, nên mang những ràng buộc của giấy như phân trang, chiều rộng cố định và kiểu dáng không đổi
    • Trang web có thể định dạng động như thay đổi kích thước cho điện thoại, dịch sang ngôn ngữ khác, hoặc đổi màu cho người dùng bị mù màu
    • Trang web cũng hỗ trợ tương tác động như văn bản yêu cầu thêm ngữ cảnh, sơ đồ thay đổi góc nhìn, hay chú thích cho phần tiếp theo
  • Các tính năng động này hiện chủ yếu chỉ dành cho các nhà phát triển web chuyên nghiệp
    • Các công cụ tài liệu hiện có như LaTeX, Pandoc, Markdown, Scribble phần lớn chỉ có thể tạo trang web tĩnh
    • Nota muốn thu hẹp khoảng cách đó bằng một ngôn ngữ tài liệu có rào cản gia nhập thấp, trần mở rộng cao và đường cong học tập mượt mà

Trạng thái hiện tại và tài liệu tham khảo

  • Nota vẫn là một công nghệ mới và đang tiến hóa
    • Kiến trúc và API liên tục thay đổi
    • Công cụ có thể có lỗi và thiếu tính năng
    • Tài liệu có thể chưa hoàn chỉnh hoặc chưa chính xác
    • Hiện tại, dự án đang tìm những người dùng sớm muốn tham gia xây dựng Nota thành ngôn ngữ tài liệu của tương lai
  • Các component @Definition@Ref cho phép tác giả chỉ cần thêm một lượng nhỏ chú thích tài liệu, để runtime của Nota có thể hiển thị định nghĩa của tham chiếu ngay trong ngữ cảnh dưới dạng tooltip
    • Các phiên bản Nota trong tương lai có thể bao gồm những tính năng như tìm mọi tham chiếu đến một định nghĩa cụ thể
  • Có thể xem thêm triết lý thiết kế tại A New Medium for Communicating Research on Programming Languages

1 bình luận

 
GN⁺ 2023-10-21
Ý kiến trên Hacker News
  • Tôi là người tạo ra Nota; kể từ nguyên mẫu ban đầu của trang web, tôi đang tiếp tục tinh chỉnh lại thiết kế
    Tôi đang xây dựng nền tảng vững chắc hơn cho các vấn đề như cách trộn nội dung và tính toán(https://arxiv.org/abs/2310.04368), hay cú pháp khiến việc soạn tài liệu trở nên dễ/khó/bất khả thi như thế nào(https://github.com/cognitive-engineering-lab/doclang-benchma...)
    Tôi vẫn tin vào triết lý lớn đó, nhưng Nota có lẽ sẽ khác đi khá nhiều trong khoảng 6 tháng nữa. Trong thời gian này, tôi cho rằng bước tiến thú vị nhất trong lĩnh vực ngôn ngữ tài liệu là Typst, và khuyên mọi người nên xem thử: https://typst.app/
    Phiên bản Nota tiếp theo dự kiến sẽ được viết 99% bằng Rust :-)

    • Có vẻ việc làm cho API dễ dùng với một nhóm người dùng rộng còn quan trọng hơn lựa chọn ngôn ngữ
      Nếu hiệu năng thật sự là vấn đề thì Rust hợp lý hơn JavaScript, nhưng tôi không chắc điều đó có mang tính quyết định trong phần lớn trường hợp sử dụng hay không
      Dù đã viết nhiều tài liệu lớn bằng LaTeX, tôi chưa bao giờ thích nó; nó giống một con quái vật dành cho học thuật chứ không phải cho kinh doanh. Ngay cả trong Word, những việc muốn làm một cách nhất quán cũng không phải lúc nào cũng dễ; style nhanh chóng rối lên, còn đánh số và danh sách gạch đầu dòng cũng dễ phát sinh lỗi
      Khi có nhiều vòng sửa đổi qua lại, theo dõi thay đổi trở thành vấn đề lớn, và cuối cùng bạn phải dựa vào niềm tin rằng phía bên kia sẽ không ghi đè phần theo dõi. Chỉ riêng một sản phẩm bảo đảm mọi thay đổi từ đầu đến phê duyệt cuối cùng đều hiển thị đúng cũng có thể trở thành killer app mà doanh nghiệp và luật sư yêu thích
      Nếu rắc thêm blockchain vào đây thì có thể dễ gọi vốn hơn, nhưng thật ra nó có vẻ gần với một bài toán mật mã học cơ bản hơn là blockchain, và dường như không cần mức độ phức tạp như vậy
    • Với tư cách là người trong giới học thuật, 99% thời gian của tôi dùng cho hai việc: viết tính toán thống kê bằng các ngôn ngữ như R hoặc Python, và viết văn bản tiếng Anh
      Điều quan trọng nhất trong một ngôn ngữ tài liệu là ưu tiên hai việc này. Ví dụ, tài liệu TeX bắt đầu bằng mã chuẩn bị như \documentclass, nhiều \usepackage, định nghĩa theorem, thiết lập font, trong khi tài liệu R Markdown/Quarto bắt đầu ngay bằng ý nghĩa thực tế của bài viết như tiêu đề, tác giả, tóm tắt
      Có thể thấy rõ sự khác biệt về trọng tâm
    • Sẽ rất thú vị nếu Nota có thể giải quyết vấn đề mà TeX/LaTeX về lý thuyết thì làm được nhưng trên thực tế lại không xử lý tốt. Tức là dễ styling theo các yêu cầu bên ngoài ngớ ngẩn
      Bao gồm các việc như bố cục chặt chẽ, nhiều thông tin kiểu poster hội nghị A0; kiểu tài liệu theo tiêu chuẩn quốc gia như GOST ở các nước hậu Xô Viết; các yêu cầu về kiểu trích dẫn tài liệu tham khảo bùng nổ theo từng truyền thống quốc tế; làm cho tài liệu trông giống style mặc định của một phiên bản MS Word cụ thể; đặt chính xác hình hoặc văn bản lên trên hình để sửa nhanh trong bài báo; và điều chỉnh có chủ ý những thứ như vậy
      Trong thế giới TeX, về mặt kỹ thuật mọi thứ đều có thể, nhưng trên thực tế cần đến thứ ma thuật đen sâu đến mức ngay cả người dùng phổ thông có bằng cấp cũng không muốn đào sâu
    • Nota trông có vẻ hay. Tôi đã tạo một thứ tương tự tên là Literate Markdown, lấy cảm hứng từ “lập trình văn chương” của Knuth, và ngay từ đầu đã tập trung vào việc trộn tính toán với giải thích
      Trong vài tháng qua, tôi đã dùng nó khá vui để khám phá ý tưởng animation SVG(https://simpatico.io/svg) hoặc cụ thể hóa cấu trúc dữ liệu/thuật toán mới(https://simpatico.io/stree3)
      Toàn bộ server và bộ xử lý Markdown chỉ khoảng 500 dòng Node code dễ đọc, rất ít dependency và không có dependency bắc cầu, cũng không cần bước biên dịch. Theo mặc định, server không cho phép bất kỳ tài nguyên bên thứ ba hay cookie nào
      Nó có trên GitHub theo giấy phép MIT, và tôi đang dọn dẹp trong lúc chuyển từ kho cá nhân sang kho của tổ chức. Tham khảo: https://simpatico.io/lit
    • Thú vị là những vấn đề như thế này và hơn nữa đã được giải quyết khá hợp lý trong Org Mode. Chỉ có điều quá ít người dùng Emacs nên cũng quá ít người biết đến nó
  • Ở những nơi không cần “tính động thiết yếu”, việc không có nó lại là tính năng, chứ không phải lỗi

    • Hoàn toàn đồng ý. Tính động rất tuyệt cho ứng dụng web, nhưng lại là thứ ít mong muốn nhất trong tài liệu
    • Để đọc PDF thoải mái trên màn hình nhỏ, đặc biệt là di động, có vẻ vẫn cần bố cục động cơ bản
      Trên di động, tôi thích đọc trang web hơn PDF nhiều, vì một trang web hợp lý thường có thể tự khớp với màn hình di động
    • PDF bó buộc thông tin bằng cách giới hạn cách nó được tái hiện dưới dạng số. Trong PDF không có chuyện “chỉ cần” sao chép/dán; nó đầy những lỗi kỳ quặc, nên phải định dạng lại văn bản trên diện rộng hoặc đưa qua phần mềm chuyên dụng
      Cần một định dạng mã hóa đồng thời thông tin thị giác và thông tin số. Lớp số về cơ bản có thể không hiển thị, nhưng phải truy cập được khi cần
    • Đặc tả PDF của Adobe bất ngờ là có hỗ trợ chạy JavaScript (https://helpx.adobe.com/acrobat/using/applying-actions-scrip...), đồ họa 3D tương tác (https://www.youtube.com/watch?v=PKfyFt3zT5A, https://www.youtube.com/watch?v=vW5-1LVtd9U), âm thanh và video (https://helpx.adobe.com/acrobat/using/rich-media.html), thậm chí cả “Liquid Mode” cho tài liệu PDF responsive (https://www.adobe.com/acrobat/hub/what-is-adobe-liquid-mode....)
      Dĩ nhiên, trong đặc tả ISO PDF/A dành cho lưu trữ dài hạn, những “tính năng” này bị coi là lỗi và đã bị loại bỏ: https://en.wikipedia.org/wiki/PDF/A
      Điểm mấu chốt là đôi khi tài liệu chỉ nên là tài liệu. Trong bài báo khoa học, LaTeX là thứ con người viết cho con người, và nhờ các lệnh tùy chỉnh cùng package, ta có thể viết tài liệu văn bản thuần dễ đọc không kém bài báo được tạo ra. Về khả năng truy cập cũng tốt
    • Nhìn vào ví dụ bài báo PLDI, các ký hiệu trong những công thức lớn và dày đặc có gắn chú thích bật lên. Những thứ như vậy có thể thực sự hữu ích
      Tài liệu động còn có một vùng đất chưa được khai phá rất thú vị, nhưng cần những ví dụ tốt về cách dùng nó một cách trang nhã
  • Tóm lại, nó gần với LaTeX hơn và cũng có một số yếu tố Markdown; được viết bằng JavaScript nên nhiều người có thể đóng góp bằng ngôn ngữ họ đã biết, và giấy phép MIT cũng là điểm hay
    Chưa biết có việc gì cần dùng ngay không, nhưng trông khá ngầu. Nếu viết một bài cần các tính năng kiểu LaTeX nhưng nơi nộp không bắt buộc LaTeX, có lẽ tôi sẽ thử Nota
    Tôi nghĩ Knuth gần như là một bán thần, nhưng ông ấy đâu có từ trên trời xuống trao TeX và nói “đừng bao giờ thử cái mới”

    • TeX chắc chắn từng là đột phá, nhưng tôi xem nó là sản phẩm của thời đại. Theo tiêu chuẩn hiện nay, nó đã đưa quá nhiều sự khéo léo vào mở rộng macro và kỹ thuật đan xen chỉ để đáp ứng các giới hạn bộ nhớ nghe buồn cười
      Nó cũng thiếu quá nhiều cơ chế tránh lỗi và tính năng tiện lợi mà các ngôn ngữ hiện đại cung cấp. Khi dùng LaTeX, tôi phải phụ thuộc rất nhiều vào các mảnh \input{} để cô lập các khối, nhằm tránh việc chỉ sót một ký tự escape là hỏng
      Tôi vẫn luôn mong có một cách diễn giải lại hiện đại, nhưng có cảm giác ta đang mắc kẹt ở một điểm tối ưu cục bộ khó thoát vì quán tính và các package tích lũy hàng chục năm quanh TeX
    • https://typst.app/ cũng đáng xem
  • Những thứ tương tự có https://pandoc.org/, https://quarto.org/, https://markdoc.dev/, https://mdxjs.com/, https://typst.app/

    • Danh sách định dạng được hỗ trợ của Pandoc rất ấn tượng
  • Vấn đề với những thử nghiệm mới trong lĩnh vực này là chúng bước vào một nơi vốn đã quá chật chội. Việc các giải pháp hiện có có hoàn hảo hay không thật ra không quá quan trọng
    Nó giống như đi vào một đô thị lịch sử ở châu Âu với cả nghìn năm lịch sử kiến trúc và tuyên bố có một thiết kế tòa nhà mới tuyệt vời. Đất trống hiếm, và người ta không đơn giản phá bỏ các cấu trúc cũ chỉ để thử cái mới. Họ phải cảm nhận được lợi ích áp đảo
    Trong kiến trúc, thép và bê tông cốt thép đã mở ra chiều thẳng đứng, cải thiện mạnh mẽ hiệu quả sử dụng không gian, và sau đó lịch sử đã thay đổi
    Cốt lõi là liệu có một chiều chưa được khai phá nào đủ để kéo mọi người sang một định dạng tài liệu khác nhằm “cải tiến” ASCII, reStructuredText, wikitext, Markdown, TeX/LaTeX, AsciiDoc, HTML, v.v. hay không
    Câu trả lời thường gặp là hạ tầng siêu văn bản ngữ nghĩa. Tầm nhìn ban đầu vẫn chưa được hiện thực hóa. Nếu giả định các hệ sinh thái đóng ngày nay chỉ là một cơn ác mộng sẽ qua đi, thì web phi tập trung một lần nữa sẽ cần một hạ tầng biên soạn tài liệu hiện đại, thân thiện với người dùng và trao quyền cho họ
    Tuy vậy, cũng có thể còn những chiều khác để nâng việc viết và chia sẻ tài liệu lên một tầm cao mới. Vẻ đẹp của đổi mới nằm ở chỗ nó không bị ràng buộc bởi các quy tắc và sự khôn ngoan sẵn có

    • Nếu muốn một web phi tập trung, một “Userweb” hơi tương ứng với Usenet, thì tôi nghĩ cần một giao thức kiểu BitTorrent
      Cần một định dạng tài liệu hiệu quả, và để làm được vậy nó phải là định dạng không cố làm mọi thứ. Nghĩa là bảng nên tách loại tài liệu theo từng tệp, giống như các định dạng bảng tính tiêu chuẩn; khác với HTML vốn muốn tự làm mọi thứ như bảng, đồ họa (SVG), v.v.
      Nếu tách từng phần thành tệp riêng, người dùng có thể chọn chương trình mình muốn để xem hoặc thao tác tài liệu, thay vì xem tất cả bằng một trình duyệt duy nhất; điều đó cũng có lợi cho phân phối qua mạng, và hữu ích trong môi trường có dung lượng lưu trữ hoặc băng thông thấp
      Vì vậy, từ góc nhìn của tôi, chẳng có gì cần phát minh mới. Chỉ cần chuyên môn hóa và tinh chỉnh những thứ đã được phát minh
  • Nếu lần theo liên kết, https://willcrichton.net/nota/ cho thấy những ưu điểm thuyết phục trong ngách mà Nota nhắm tới, tức là làm cho các bài báo học thuật về ngôn ngữ lập trình dễ hiểu hơn
    Việc có thể render ra PDF chất lượng cao hay không đương nhiên là một nhu cầu và cũng là một câu hỏi. Để tương thích với các hệ thống hiện có, có lẽ render sang LaTeX thậm chí còn tốt hơn

  • Về cơ bản Nota là markup + code (JavaScript), và sự kết hợp này chính là vùng mà MDX nhắm đến. Trước đây khi có người nhắc đến điều này, người tạo ra nó nói rằng Nota hướng đến tài liệu hóa, còn MDX hướng đến website: https://news.ycombinator.com/item?id=31349579
    Nếu vậy, tôi nghĩ để Nota nổi lên thì cần có ai đó gói nó thành một sản phẩm. Kết quả trông ổn, nhưng phải đụng đến Node.js chỉ để tạo tài liệu thì quá phiền, lại có cảm giác giống LaTeX. Phần lớn mọi người sẽ thích Notion hoặc trình xử lý văn bản hơn

    • LaTeX, hay nói rộng hơn là họ TeX, chưa từng biến mất. Ngay cả hiện nay, trong hầu hết các lĩnh vực STEM, nó vẫn là công cụ tiêu chuẩn để viết bài báo tạp chí
      Hơn nữa, Nota không phải là đối thủ cạnh tranh trực tiếp của họ TeX. Nota tạo ra thứ để trình duyệt web đọc, còn xxxTeX tạo ra thứ để trình đọc PDF đọc. Tôi biết xxxTeX cũng có thể tạo các định dạng đầu ra khác, nhưng đa số dùng nó để tạo PDF
    • Chỉ riêng việc Nota có kèm style mặc định, kiểu như một phong cách viết, đã đặt nó ở một hạng hoàn toàn khác với MDX
      MDX sẵn sàng dùng với bất kỳ framework nào như React/Vue, nhưng điều đó cũng có nghĩa là về cơ bản nó không đưa ra quan điểm mặc định nào
      Nota có cảm giác như có thể cắm vào một static site generator. Tất nhiên để làm vậy phải khiến hai bên phối hợp được với nhau, nhưng tôi nghĩ với một người tận tâm hơn tôi một chút thì đó là kỳ vọng có thể đạt được
  • Tôi không hiểu vì sao lại cần một ngôn ngữ compile sang JavaScript chỉ để tạo các trang văn bản. Cùng mục tiêu đó thì AsciiDoc xử lý được
    Các nhà xuất bản thực tế như O’Reilly cũng dùng AsciiDoc làm định dạng đầu vào để làm sách và website

    • Tôi đồng ý về AsciiDoc. Nếu Markdown phù hợp hơn với nội dung tương đối ngắn, còn LaTeX gần với các bài báo học thuật nghiêm túc có trích dẫn, công thức, v.v., thì AsciiDoc nằm đúng ở điểm cân bằng giữa hai bên
      Tôi đã dùng AsciiDoc vài năm qua và thích nó. Chỉ khi nơi nào chưa hỗ trợ AsciiDoc thì tôi mới quay lại Markdown. Ví dụ GitHub và GitLab đều hỗ trợ render AsciiDoc
      PyPI đáng tiếc là vẫn chưa hỗ trợ, nhưng thật vui khi có vẻ ngày càng nhiều người xem xét việc này: https://github.com/pypa/readme_renderer/issues/205
    • Nhờ Asciidoctor mà asciidoc là lựa chọn tốt nhất. Tôi đồng ý rằng với tư cách một định dạng, nó nằm ở đúng điểm cân bằng
      Tuy nhiên, các công cụ hiện nay có vài điểm gây khó chịu. Tôi thấy và trân trọng lượng công sức khổng lồ đã được đổ vào Asciidoctor, nhưng nó không có đầu ra HTML5 mang tính ngữ nghĩa, việc tích hợp với trình tạo ảnh khó hoặc ít nhất là khó hơn mức cần thiết, và nó nặng đến mức là dependency Ruby duy nhất trên toàn bộ máy của tôi
      Trừ vấn đề Ruby ra, các issue này đều đang mở trên GitHub, nên có vẻ nếu có thêm thời gian và tài nguyên thì sẽ giải quyết được
  • Tôi không chắc. Emacs org-mode có vẻ tốt hơn và cũng ít phụ thuộc vào JavaScript hơn
    https://docusaurus.io/ cũng rất tốt và linh hoạt. Nếu muốn mở rộng Nota theo cách tương tự, tôi khuyên nên xem cả hai

  • Tôi đang suy nghĩ về cách dễ nhất để tạo một blog có nội dung chủ yếu là tĩnh nhưng vẫn có thể thêm biểu đồ tương tác hoặc tùy biến tùy ý khi muốn. Không biết Nota có phải lựa chọn tốt không
    Tôi cũng đã xem các lựa chọn khác như Quarto (https://quarto.org/), và có lẽ cũng có thể dùng một blog static site đơn giản như Jekyll rồi trực tiếp chỉnh HTML đầu ra khi cần

    • Tôi dùng XHTML pha thêm một chút XML tùy chỉnh, rồi dùng XSLT để tạo XHTML cuối cùng: https://git.uberspace.net/homepage/
      Cách này cho phép dùng toàn bộ HTML, tùy biến quy trình sinh nội dung, quản lý dependency tương đối dễ, và các định dạng liên quan đều đã được chuẩn hóa
    • Tôi cực kỳ khuyên dùng Astro: https://astro.build/
      Astro cho phép viết component kiểu React, rồi compile thành HTML/CSS thuần trừ những trường hợp thực sự cần JavaScript. Website cá nhân và blog của tôi cũng làm bằng Astro: https://sjer.red/, mã nguồn ở https://github.com/shepherdjerred/shepherdjerred.com
      Cũng có tutorial làm blog bằng Astro: https://docs.astro.build/en/tutorial/0-introduction/
    • Cũng có thể đi theo hướng dùng shortcode của Hugo. Tôi nghĩ Jekyll cũng có thứ tương tự, và có thể dùng các file HTML đầu ra từ các thư viện trực quan hóa dữ liệu như Vega-Altair (Python) hoặc plotly làm đầu vào cho shortcode