2 पॉइंट द्वारा GN⁺ 2023-10-21 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • PDF और static web pages की सीमाओं से आगे जाकर, यह ऐसी document language बनने का लक्ष्य रखती है जिसमें ब्राउज़र document structure को समझे और पाठक उसे सीधे उपयोग कर सकें
  • Nota documents JavaScript program में compile होकर ब्राउज़र में चलते हैं, और document लिखने में variables, functions, data structures का उपयोग किया जा सकता है
  • इसे KaTeX, Vega-Lite, Penrose जैसी JavaScript libraries के integration और accessibility requirements के support को ध्यान में रखकर design किया गया है
  • @nota-lang/nota package से nota executable install करके, documents को build या interactive editing flow में संभाला जा सकता है
  • यह अभी नई और बदलती हुई technology है, इसलिए architecture और API बदल सकते हैं; tools और documentation में bugs, omissions और inaccuracies को ध्यान में रखना होगा

ब्राउज़र द्वारा समझी जाने वाली document structure

  • Nota academic papers और blog posts जैसे documents लिखने के लिए एक language है
  • इसका लक्ष्य documents को 21वीं सदी के medium में लाना है
  • Documents के अंदर terms की definitions और references जैसी कई structures होती हैं जिन्हें पाठक को follow करना पड़ता है
    • उदाहरण के लिए Nota शब्द पिछले paragraph में define किए गए term को refer करता है
    • Nota authors को ऐसी structure express करने देता है, और ब्राउज़र इसे समझकर पाठक को उपयोग करने योग्य बनाता है
    • example page में Nota reference पर click या double-click करके behavior देखा जा सकता है
  • Nota documents JavaScript program में compile होते हैं
    • Web browser वाले किसी भी device पर document देखा जा सकता है
    • variables, functions और data structures का उपयोग करके document writing को सरल बनाया जा सकता है
    • KaTeX, Vega-Lite, Penrose जैसी JavaScript libraries के साथ integrate किया जा सकता है
    • screen readers जैसी accessibility requirements को support करना आसान होता है

Installation और editing flow

  • Nota को @nota-lang/nota package के जरिए nota executable install करके इस्तेमाल किया जा सकता है
    • Requirements हैं NodeJS ≥ 16 और npm ≥ 6
    • NodeJS global binary directory shell के PATH में होनी चाहिए
  • एक single Nota document को निम्न flow से build किया जा सकता है
    • npm install --global @nota-lang/nota
    • echo "@Title: Hello world" > index.nota
    • nota build index.nota
    • open dist/index.html
  • Nota file को nota edit index.nota command से interactive editing किया जा सकता है
  • Document लिखने का तरीका Reference में देखा जा सकता है
  • Website में Nota जोड़ना हो या architecture देखना हो, तो Integration guide देखें

PDF और static web के बीच की खाई

  • Digital documents के मुख्य media PDF और web pages में बंटे हुए हैं
    • PDF physical documents को reflect करने के लिए design किए गए हैं, इसलिए उनमें page breaks, fixed width, और न बदलने वाले styles जैसी कागज़ की constraints होती हैं
    • Web pages में phone के लिए resizing, दूसरी language में translation, color vision deficiency वाले users के लिए color changes जैसी dynamic formatting संभव है
    • Web pages अधिक context मांगने वाले text, viewpoint बदलने वाले diagrams, और बाद के लिए annotations जैसी dynamic interactions भी संभव बनाते हैं
  • ऐसी dynamic capabilities फिलहाल मुख्यतः professional web developers के लिए ही accessible हैं
    • LaTeX, Pandoc, Markdown, Scribble जैसे मौजूदा document tools अधिकतर सिर्फ static web pages ही generate कर सकते हैं
    • Nota कम entry barrier, ऊंची extensibility ceiling और smooth learning curve वाली document language के रूप में इस gap को कम करना चाहता है

वर्तमान स्थिति और reference materials

  • Nota अभी नई और evolve हो रही technology है
    • Architecture और API लगातार बदल रहे हैं
    • Tools में bugs और missing features हो सकते हैं
    • Documentation अधूरी या inaccurate हो सकती है
    • फिलहाल यह Nota को future की document language बनाने में शामिल होने वाले early users की तलाश कर रहा है
  • @Definition और @Ref components authors को थोड़ी मात्रा में document annotations जोड़ने देते हैं, जिससे Nota runtime references की definitions को context के अंदर tooltip के रूप में दिखा सकता है
    • Nota के future versions में किसी specific definition के सभी references खोजने जैसी capabilities शामिल हो सकती हैं
  • Design philosophy के बारे में A New Medium for Communicating Research on Programming Languages में और पढ़ा जा सकता है

1 टिप्पणियां

 
GN⁺ 2023-10-21
Hacker News की राय
  • मैं Nota बनाने वाला व्यक्ति हूं, और वेबपेज के शुरुआती prototype के बाद से design को फिर से refine कर रहा हूं
    content और computation को कैसे मिलाया जाए(https://arxiv.org/abs/2310.04368), syntax कैसे document work को आसान/मुश्किल/असंभव बनाता है(https://github.com/cognitive-engineering-lab/doclang-benchma...) जैसे सवालों के लिए ज्यादा मजबूत आधार बना रहा हूं
    बड़े philosophy पर अब भी भरोसा है, लेकिन लगता है Nota लगभग 6 महीनों में काफी बदल जाएगा। इस बीच document language क्षेत्र में सबसे शानदार प्रगति मुझे Typst लगती है, और उसे देखने की सलाह देता हूं: https://typst.app/
    Nota का अगला version 99% Rust में लिखा जाएगा :-)

    • language चुनने से ज्यादा API को व्यापक user base के लिए इस्तेमाल में आसान बनाना महत्वपूर्ण लगता है
      अगर performance सच में समस्या है तो Rust, JavaScript से ज्यादा समझ में आता है, लेकिन ज्यादातर use cases में यह निर्णायक होगा या नहीं, पता नहीं
      मैंने बड़े documents बहुत लिखे होने के बावजूद LaTeX को कभी पसंद नहीं किया; वह academia के लिए किसी monster जैसा था, business के लिए नहीं। Word में भी जिन कामों को consistent तरीके से करना चाहता था वे हमेशा आसान नहीं थे, styles जल्दी उलझ जाते हैं, और numbering व bullets में भी errors घुसने की आशंका रहती है
      कई rounds के revisions के बाद change tracking बड़ी समस्या बन जाती है, और आखिर में इस भरोसे पर निर्भर होना पड़ता है कि सामने वाला tracking को overwrite नहीं करेगा। ऐसा product जो शुरू से final approval तक हर change को ठीक से दिखाई देना guarantee करे, अपने आप में companies और lawyers को पसंद आने वाला killer app हो सकता है
      इस पर blockchain छिड़क दें तो शायद investment जुटाना आसान हो, लेकिन असल में यह blockchain से ज्यादा basic cryptography problem लगता है, और उतनी complexity की जरूरत नहीं लगती
    • academia में होने के नाते मेरा 99% समय दो चीजों में जाता है: R या Python जैसी languages में statistical computations लिखना, और English text लिखना
      document language में सबसे अहम बात इन दोनों को प्राथमिकता देना है। उदाहरण के लिए TeX document \documentclass, कई \usepackage, theorem definitions, font settings जैसे setup code से शुरू होता है, लेकिन R Markdown/Quarto document सीधे title, author, abstract जैसे actual writing के अर्थ से शुरू होता है
      emphasis का फर्क साफ दिखता है
    • अगर Nota वह problem हल कर सके जिसे TeX/LaTeX theoretically तो संभव बनाता है लेकिन practice में ठीक से हल नहीं कर पाता, तो दिलचस्प होगा। यानी बेवकूफाना external requirements के मुताबिक styling की आसानी
      इसमें A0 conference poster जैसे tight और information-heavy layouts, post-Soviet क्षेत्र के GOST जैसे national standard document styles, international traditions के हिसाब से तेजी से बढ़ती bibliography style requirements, किसी खास MS Word version की default style जैसा दिखाना, papers में quick fixes के लिए figures के ऊपर figures या text को precise तरीके से place करना, और ऐसी चीजों को consciously adjust करना शामिल है
      TeX world में technically यह सब संभव है, लेकिन practice में इसके लिए इतनी गहरी black magic चाहिए कि degree वाला सामान्य user भी उसमें उतरना नहीं चाहेगा
    • Nota अच्छा लगता है। मैंने Knuth की “literate programming” से प्रेरित Literate Markdown नाम की मिलती-जुलती चीज बनाई थी, और शुरुआत से ही computation और explanation को मिलाने पर focus किया था
      पिछले कुछ महीनों में SVG animation ideas(https://simpatico.io/svg) explore करने या नए data structure/algorithm(https://simpatico.io/stree3) को concrete बनाने में इसे मजे से इस्तेमाल किया है
      पूरा server और Markdown processor पढ़ने में आसान Node code की लगभग 500 lines हैं, dependencies बहुत कम हैं, transitive dependencies नहीं हैं, और compilation step भी जरूरी नहीं है। default रूप से server किसी भी तरह के third-party resources या cookies allow नहीं करता
      MIT license के तहत GitHub पर है, और personal repository से organization repository में move करते हुए साफ-सफाई कर रहा हूं। देखें: https://simpatico.io/lit
    • दिलचस्प बात यह है कि ऐसी problems और उससे भी ज्यादा चीजें Org Mode में काफी reasonable तरीके से solve हो चुकी हैं। लेकिन Emacs इस्तेमाल करने वाले बहुत कम हैं, इसलिए इसके बारे में जानने वाले भी बहुत कम हैं
  • जहां “ज़रूरी dynamicity” की जरूरत नहीं है, वहां उसका न होना ही feature है, bug नहीं, ऐसा मेरा मानना है

    • पूरी तरह सहमत। Dynamicity web apps के लिए शानदार है, लेकिन documents में यही सबसे अवांछित चीज़ है
    • छोटी screens, खासकर mobile पर PDF को आराम से पढ़ने के लिए बुनियादी dynamic layout की जरूरत लगती है
      Mobile पर मैं PDF की तुलना में web pages पढ़ना कहीं ज्यादा पसंद करता हूं, क्योंकि कोई समझदारी से बना web page आम तौर पर mobile screen के हिसाब से fit हो सकता है
    • PDF यह सीमित करता है कि information को digitally कैसे reproduce किया जाए। PDF में “बस” copy/paste जैसी कोई चीज़ नहीं होती, अजीब errors भरे रहते हैं, इसलिए text को बड़े पैमाने पर फिर से format करना पड़ता है या special software से गुजारना पड़ता है
      ऐसा format चाहिए जो visual information और digital information दोनों को साथ encode करे। Digital layer default रूप से दिखाई न भी दे, लेकिन जरूरत पड़ने पर accessible होनी चाहिए
    • Adobe का PDF spec अप्रत्याशित रूप से JavaScript execution(https://helpx.adobe.com/acrobat/using/applying-actions-scrip...), interactive 3D graphics(https://www.youtube.com/watch?v=PKfyFt3zT5A, https://www.youtube.com/watch?v=vW5-1LVtd9U), audio और video(https://helpx.adobe.com/acrobat/using/rich-media.html), responsive PDF documents के लिए “Liquid Mode”(https://www.adobe.com/acrobat/hub/what-is-adobe-liquid-mode....) तक support करता है
      बेशक, लंबे समय तक संरक्षण के लिए बने ISO PDF/A spec में इन “features” को bug माना गया और हटा दिया गया: https://en.wikipedia.org/wiki/PDF/A
      मुद्दा यह है कि कभी-कभी document को बस document ही होना चाहिए। Scientific papers में LaTeX वह चीज़ है जिसे इंसान, इंसानों के लिए लिखते हैं, और custom commands व packages की वजह से generated paper जितना पढ़ने योग्य plain-text document लिखा जा सकता है। Accessibility के लिहाज से भी अच्छा है
    • PLDI paper के example को देखें तो बड़े और घने formulas में symbols पर popup explanations लगे हुए हैं। ऐसी चीज़ सच में मददगार हो सकती है
      Dynamic documents में दिलचस्प unexplored area है, लेकिन उसे सुरुचिपूर्ण तरीके से इस्तेमाल करने के अच्छे examples चाहिए
  • सार यह है कि यह LaTeX के ज्यादा करीब है, इसमें Markdown elements भी कुछ हैं, JavaScript में लिखा गया है इसलिए कई लोग पहले से जानी हुई language से contribute कर सकते हैं, और MIT license होना अच्छी बात है
    अभी पता नहीं कि इसे तुरंत इस्तेमाल करने का कोई काम है या नहीं, लेकिन यह काफी अच्छा लगता है। अगर मुझे LaTeX जैसी functionality वाला text लिखना हो और submission venue LaTeX अनिवार्य न करता हो, तो शायद Nota आज़माऊंगा
    मैं Knuth को लगभग देवतुल्य शख्सियत मानता हूं, लेकिन ऐसा तो नहीं कि वे आसमान से उतरकर TeX देते हुए बोले हों, “हमेशा के लिए कभी नया मत आज़माना”

    • TeX निश्चित रूप से क्रांतिकारी था, लेकिन मुझे लगता है कि यह अपने दौर की उपज है। आज के हिसाब से हास्यास्पद memory limits में fit होने के लिए macro expansion और weaving techniques में जरूरत से ज्यादा चतुराई लगाई गई थी
      Modern languages जो mistake-prevention safeguards या convenience features देती हैं, उनमें से भी बहुत कुछ इसमें नहीं है। LaTeX इस्तेमाल करते समय एक escape छूटकर सब बिगड़ने से बचने के लिए मुझे blocks को isolate करने हेतु \input{} fragments पर काफी निर्भर रहना पड़ता है
      मैं लगातार modern reinterpretation की उम्मीद करता हूं, लेकिन TeX पर जमा दशकों की inertia और packages की वजह से लगता है कि हम ऐसे local optimum में फंसे हैं जिससे निकलना मुश्किल है
    • https://typst.app/ भी देखने लायक है
  • इससे मिलती-जुलती चीज़ों में https://pandoc.org/, https://quarto.org/, https://markdoc.dev/, https://mdxjs.com/, https://typst.app/ शामिल हैं

    • Pandoc की supported formats list प्रभावशाली है
  • इस क्षेत्र में किसी नए प्रयास की समस्या यह है कि वह पहले से ही बहुत भीड़-भाड़ वाली जगह में प्रवेश करता है। मौजूदा solutions perfect नहीं हैं या नहीं, यह बहुत मायने नहीं रखता
    यह कुछ वैसा है जैसे हजार साल की स्थापत्य-इतिहास से भरे किसी यूरोपीय ऐतिहासिक शहर में जाकर किसी शानदार नई इमारत के design का दावा करना। खाली जमीन दुर्लभ है, और लोग नई चीज़ आज़माने के लिए पुराने structures यूं ही नहीं गिराते। उन्हें भारी-भरकम फायदा महसूस होना चाहिए
    Architecture में steel और reinforced concrete ने vertical dimension खोला, जिससे space utilization में बड़ा सुधार हुआ, और उसके बाद history बदल गई
    ASCII, reStructuredText, wikitext, Markdown, TeX/LaTeX, AsciiDoc, HTML आदि को “improve” करने के नाम पर लोगों को एक और document format की ओर खींच लाने लायक कोई unexplored dimension है या नहीं, यही मुख्य बात है
    आम जवाब semantic hypertext infrastructure है। मूल vision अभी तक साकार नहीं हुआ है। अगर मान लें कि आज के closed ecosystems बस गुजर जाने वाला एक nightmare हैं, तो फिर से decentralized web को modern, user-friendly और empowering document authoring infrastructure की जरूरत होगी
    हालांकि document creation और sharing को नई ऊंचाई पर ले जाने वाला कोई और dimension भी हो सकता है। Innovation की खूबसूरती यही है कि वह मौजूदा rules और wisdom से बंधी नहीं होती

    • अगर आप decentralized web, यानी Usenet के कुछ समकक्ष “Userweb” चाहते हैं, तो मुझे लगता है कि BitTorrent जैसा protocol चाहिए
      Efficient document format चाहिए, और इसके लिए ऐसा format होना चाहिए जो सब कुछ करने की कोशिश न करे। यानी tables को standard spreadsheet format की तरह document types को file-wise अलग करना चाहिए, और HTML जैसा नहीं होना चाहिए जो tables, graphics(SVG) आदि सब खुद ही करने की कोशिश करता है
      हर चीज़ को अलग file में बांटने से users browser में सब कुछ देखने के बजाय अपनी पसंद का program चुनकर documents देख या manipulate कर सकते हैं, network distribution में भी मदद मिलती है, और storage या bandwidth कम होने वाले environments में भी यह फायदेमंद है
      इसलिए मेरे नज़रिए से invent करने के लिए कुछ नया नहीं है। जो पहले से invent हो चुका है, उसे specialize और refine करना भर है
  • लिंक खोलकर देखें तो https://willcrichton.net/nota/ दिखाता है कि Nota अपने इच्छित उपयोग, यानी programming language academic papers को ज़्यादा समझने योग्य बनाने वाले niche में काफ़ी मजबूत फायदे देता है
    क्या इसे high-quality PDF में render किया जा सकता है, यह स्वाभाविक रूप से ज़रूरी और सवाल दोनों है। मौजूदा systems के साथ compatibility के लिए LaTeX में render करना शायद बेहतर भी हो सकता है

  • मूल रूप से Nota markup + code (JavaScript) है, और यह combination वही क्षेत्र है जिसे MDX target करता है। पहले भी जब किसी ने इसका ज़िक्र किया था, तो बनाने वाले ने कहा था कि Nota documentation के लिए है, और MDX websites के लिए: https://news.ycombinator.com/item?id=31349579
    ऐसे में मुझे लगता है कि Nota को लोकप्रिय होने के लिए किसी को इसे product के रूप में wrap करना होगा। Output अच्छा दिखता है, लेकिन documents बनाने के लिए Node.js से जूझना बहुत झंझट भरा है, और फिर से LaTeX जैसा एहसास देता है। ज़्यादातर लोग Notion या word processor को prefer करेंगे

    • LaTeX, और ज़्यादा आम तौर पर TeX family, कभी गायब नहीं हुई। आज भी ज़्यादातर STEM fields में journal papers लिखने का standard tool है
      इसके अलावा Nota, TeX family का सीधा competitor नहीं है। Nota वह बनाता है जिसे web browser पढ़ेगा, और xxxTeX वह बनाता है जिसे PDF reader पढ़ेगा। मुझे पता है कि xxxTeX दूसरे output formats भी बना सकता है, लेकिन ज़्यादातर लोग इसका इस्तेमाल PDF generation के लिए करते हैं
    • केवल यह तथ्य कि Nota में default style, एक तरह की writing style, शामिल है, इसे MDX से बिल्कुल अलग league में रखता है
      MDX React/Vue आदि किसी भी framework के साथ इस्तेमाल के लिए तैयार है, लेकिन इसका मतलब यह भी है कि वह मूल रूप से कोई opinion नहीं देता
      Nota ऐसा लगता है जैसे इसे static site generator में plug किया जा सकता है। बेशक, इसके लिए दोनों को साथ काम करवाना होगा, लेकिन मुझसे थोड़ा ज़्यादा committed किसी व्यक्ति के लिए यह हासिल करने लायक उम्मीद लगती है
  • समझ नहीं आता कि text pages बनाने के लिए JavaScript में compile होने वाली language की ज़रूरत क्यों है। वही लक्ष्य AsciiDoc पूरा कर देता है
    O’Reilly जैसे वास्तविक publishers भी books और websites बनाने के input format के रूप में AsciiDoc का इस्तेमाल करते हैं

    • AsciiDoc से सहमत हूँ। Markdown अपेक्षाकृत छोटे content के लिए बेहतर है, और LaTeX citations, equations आदि वाले गंभीर academic papers के करीब है, तो AsciiDoc इनके बीच का सही sweet spot अच्छी तरह पकड़ता है
      पिछले कुछ वर्षों से AsciiDoc इस्तेमाल कर रहा हूँ और पसंद है। केवल उन जगहों पर Markdown पर वापस जाता हूँ जहाँ AsciiDoc अभी support नहीं है। उदाहरण के लिए GitHub और GitLab AsciiDoc rendering support करते हैं
      PyPI दुर्भाग्य से अभी support नहीं करता, लेकिन अच्छा है कि लगता है ज़्यादा लोग इस पर ध्यान दे रहे हैं: https://github.com/pypa/readme_renderer/issues/205
    • Asciidoctor की वजह से asciidoc सबसे अच्छा है। यह format के तौर पर बिल्कुल सही जगह पकड़ता है, इस बात से सहमत हूँ
      हालांकि हाल के tools में कुछ frustration है। Asciidoctor में भारी मेहनत लगी है, यह दिखता है और मैं इसकी सराहना करता हूँ, लेकिन semantic HTML5 output नहीं है, image generators के साथ integration मुश्किल है या कम से कम ज़रूरत से ज़्यादा मुश्किल है, और यह इतना भारी है कि मेरी पूरी machine पर यही अकेली Ruby dependency है
      Ruby वाली समस्या छोड़ दें तो ये issues GitHub पर खुले हैं, इसलिए समय और resources और लगें तो शायद हल हो जाएँगे
  • पक्का नहीं कह सकता। Emacs org-mode बेहतर लगता है और JavaScript dependency भी कम दिखती है
    https://docusaurus.io/ भी बहुत अच्छा और flexible है। अगर Nota को इसी तरह expand करना हो, तो इन दोनों को देखने की सलाह दूँगा

  • मैं अभी यही सोच रहा था कि ऐसा blog बनाने का सबसे आसान तरीका क्या है जो ज़्यादातर static content हो, लेकिन चाहें तो interactive graphs या arbitrary customization जोड़ सके। सोच रहा हूँ कि Nota अच्छा विकल्प है या नहीं
    दूसरे options के तौर पर Quarto(https://quarto.org/) भी देखा है, और शायद Jekyll जैसे simple static site blog का इस्तेमाल करके ज़रूरत पड़ने पर output HTML को सीधे edit करना भी संभव हो

    • मैं XHTML में थोड़ा custom XML मिलाता हूँ, और XSLT से final XHTML generate करता हूँ: https://git.uberspace.net/homepage/
      इससे पूरा HTML इस्तेमाल किया जा सकता है, generation process customize किया जा सकता है, dependencies भी अपेक्षाकृत आसानी से manage होती हैं, और संबंधित formats standardized हैं
    • Astro की बहुत मज़बूती से recommendation करता हूँ: https://astro.build/
      Astro में आप React-style components लिखते हैं और वह उन्हें, जहाँ वास्तव में JavaScript की ज़रूरत न हो, pure HTML/CSS में compile कर देता है। मैंने अपनी personal site और blog भी Astro से बनाया है: https://sjer.red/, source यहाँ है https://github.com/shepherdjerred/shepherdjerred.com
      Astro से blog बनाने का tutorial भी है: https://docs.astro.build/en/tutorial/0-introduction/
    • Hugo के shortcode का रास्ता भी है। Jekyll में भी शायद ऐसा कुछ हो, और Vega-Altair (Python) या plotly जैसी data visualization libraries के output HTML files को shortcode input के रूप में इस्तेमाल किया जा सकता है