- 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
notaqua 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ừ
Notatham 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
- Ví dụ, từ
- Tài liệu Nota được biên dịch thành chương trình JavaScript
Cài đặt và luồng chỉnh sửa
- Có thể cài tệp thực thi
notaqua gói@nota-lang/notađể sử dụng Nota- Yêu cầu là NodeJS ≥ 16 và npm ≥ 6
- Thư mục nhị phân toàn cục của NodeJS phải nằm trong
PATHcủa shell
- Có thể build một tài liệu Nota đơn theo luồng sau
npm install --global @nota-lang/notaecho "@Title: Hello world" > index.notanota build index.notaopen 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
@Definitionvà@Refcho 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
Ý 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 :-)
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
Đ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ắtCó thể thấy rõ sự khác biệt về trọng tâm
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
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
Ở 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
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
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
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
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”
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ỏngTô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
Những thứ tương tự có https://pandoc.org/, https://quarto.org/, https://markdoc.dev/, https://mdxjs.com/, https://typst.app/
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ó
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
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
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 đã 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
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
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
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/