2 puan yazan GN⁺ 2023-10-21 | 1 yorum | WhatsApp'ta paylaş
  • PDF ve statik web sayfalarının sınırlarının ötesine geçerek, belge yapısının tarayıcı tarafından anlaşılmasını ve okuyucunun bunu doğrudan kullanabilmesini sağlayan bir belge dili olmayı hedefler
  • Nota belgeleri JavaScript programları olarak derlenip tarayıcıda çalışır; belge yazımında değişkenler, fonksiyonlar ve veri yapıları kullanılabilir
  • KaTeX, Vega-Lite, Penrose gibi JavaScript kütüphaneleriyle entegrasyon ve erişilebilirlik gereksinimlerini destekleme düşünülerek tasarlanmıştır
  • @nota-lang/nota paketiyle nota çalıştırılabilir dosyası kurulabilir; belgeler derleme veya etkileşimli düzenleme akışıyla ele alınabilir
  • Henüz yeni ve değişmekte olan bir teknoloji olduğundan mimarisi ve API’si değişebilir; araçlardaki ve dokümantasyondaki hatalar, eksikler ve yanlışlıklar dikkate alınmalıdır

Tarayıcının anladığı belge yapısı

  • Nota, akademik makaleler ve blog yazıları gibi belgeler yazmak için bir dildir
  • Amacı, belgeleri 21. yüzyıla uygun bir ortam hâline getirmektir
  • Belgelerin içinde, terim tanımları ve referanslar gibi okuyucunun takip etmesi gereken çok sayıda yapı bulunur
    • Örneğin Nota kelimesi, önceki paragrafta tanımlanan bir terime referans verir
    • Nota, yazarların bu tür yapıları ifade etmesini ve tarayıcının bunları anlayarak okuyucunun kullanabilmesini sağlar
    • Örnek sayfada Nota referansına tıklayarak veya çift tıklayarak davranışını görebilirsiniz
  • Nota belgeleri JavaScript programları olarak derlenir
    • Web tarayıcısı olan her cihazda belgeler görüntülenebilir
    • Değişkenler, fonksiyonlar ve veri yapıları kullanılarak belge yazımı basitleştirilebilir
    • KaTeX, Vega-Lite, Penrose gibi JavaScript kütüphaneleriyle entegre edilebilir
    • Ekran okuyucular gibi erişilebilirlik gereksinimlerini desteklemek daha kolaydır

Kurulum ve düzenleme akışı

  • Nota, @nota-lang/nota paketiyle nota çalıştırılabilir dosyası kurularak kullanılabilir
    • Gereksinimler NodeJS ≥ 16 ve npm ≥ 6’dır
    • NodeJS global binary dizini, kabuğun PATH değişkeninde bulunmalıdır
  • Tek bir Nota belgesi şu akışla derlenebilir
    • npm install --global @nota-lang/nota
    • echo "@Title: Hello world" > index.nota
    • nota build index.nota
    • open dist/index.html
  • Nota dosyaları nota edit index.nota komutuyla etkileşimli olarak düzenlenebilir
  • Belge yazım biçimi Reference sayfasında görülebilir
  • Bir web sitesine Nota eklemek veya mimarisini görmek için Integration guide’a bakılabilir

PDF ile statik web arasındaki boşluk

  • Dijital belgelerin başlıca ortamları PDF ve web sayfaları olarak ayrılır
    • PDF, fiziksel belgeleri yansıtacak şekilde tasarlanmıştır; bu yüzden sayfa bölme, sabit genişlik ve değişmeyen stil gibi kâğıt kısıtlarına sahiptir
    • Web sayfaları, telefonlara göre boyutlandırma, başka dillere çeviri, renk görme farklılığı olan kullanıcılar için renk değiştirme gibi dinamik biçimlendirme imkânı sunar
    • Web sayfaları ayrıca daha fazla bağlam isteyen metin, bakış açısı değişen diyagramlar, sonrası için notlar gibi dinamik etkileşimler de sağlayabilir
  • Bu dinamik özelliklere bugün ağırlıklı olarak yalnızca profesyonel web geliştiricileri erişebiliyor
    • LaTeX, Pandoc, Markdown, Scribble gibi mevcut belge araçları çoğunlukla yalnızca statik web sayfaları üretebilir
    • Nota, düşük giriş eşiği, yüksek genişleme sınırı ve yumuşak bir öğrenme eğrisi olan bir belge diliyle bu boşluğu kapatmayı amaçlar

Mevcut durum ve referanslar

  • Nota hâlâ yeni ve evrilmekte olan bir teknolojidir
    • Mimarisi ve API’si sürekli değişmektedir
    • Araçlarda hatalar ve eksik özellikler olabilir
    • Dokümantasyon eksik veya hatalı olabilir
    • Şu anda Nota’yı geleceğin belge dili hâline getirmeye katılacak erken kullanıcılar aranmaktadır
  • @Definition ve @Ref bileşenleri, yazar az miktarda belge açıklaması eklediğinde Nota runtime’ının referansın tanımını bağlam içinde tooltip olarak gösterebilmesini sağlar
    • Nota’nın gelecek sürümlerinde belirli bir tanıma yapılan tüm referansları bulma gibi özellikler yer alabilir
  • Tasarım felsefesi hakkında daha fazlası A New Medium for Communicating Research on Programming Languages sayfasında görülebilir

1 yorum

 
GN⁺ 2023-10-21
Hacker News yorumları
  • Nota'yı yapan kişiyim; web sayfasının ilk prototipinden sonra tasarımı yeniden rafine ediyorum
    İçerik ile hesaplamanın nasıl harmanlanacağı(https://arxiv.org/abs/2310.04368), söz diziminin belge işlerini nasıl kolaylaştırdığı/zorlaştırdığı/imkânsız kıldığı(https://github.com/cognitive-engineering-lab/doclang-benchma...) gibi konular için daha sağlam bir temel oluşturuyorum
    Büyük felsefeye hâlâ inanıyorum, ama Nota'nın yaklaşık 6 ay içinde epey değişeceğini düşünüyorum. Bu arada belge dili alanındaki en havalı gelişmenin Typst olduğunu düşünüyorum; göz atmanızı öneririm: https://typst.app/
    Nota'nın bir sonraki sürümü %99 Rust ile yazılacak :-)

    • Dil seçiminden çok, API'yi geniş bir kullanıcı kitlesi için kullanımı kolay hâle getirmek daha önemli görünüyor
      Performans gerçekten bir sorunsa Rust, JavaScript'e göre daha mantıklı; ama çoğu kullanım senaryosunda belirleyici olup olmayacağından emin değilim
      Çok sayıda büyük belge yazmış olsam da LaTeX'i hiç sevmedim; akademi için bir canavardı, iş dünyası için değil. Word'de bile tutarlı yapmak istediğim işler her zaman kolay değildi; stiller hızla birbirine giriyor, numaralandırma ve madde işaretlerine de kolayca hatalar sızıyor
      Birden fazla revizyon turu gidip geldiğinde değişiklik izleme büyük bir sorun hâline geliyor ve sonunda karşı tarafın izlemeyi ezmeyeceğine duyulan güvene dayanıyorsunuz. En baştan nihai onaya kadar tüm değişikliklerin doğru şekilde görünmesini garanti eden bir ürün bile şirketlerin ve avukatların seveceği bir killer app olabilir
      Bunun üstüne blockchain serperseniz yatırım almak kolaylaşabilir, ama aslında bu blockchain'den çok temel bir kriptografi meselesi gibi görünüyor ve o düzeyde karmaşıklığa gerek yok gibi
    • Akademiden biri olarak zamanımın %99'u iki şeye gidiyor: R veya Python gibi dillerle istatistiksel hesaplamalar yazmak ve İngilizce metin yazmak
      Bir belge dilinde en önemli şey bu ikisine öncelik vermek. Örneğin bir TeX belgesi \documentclass, çeşitli \usepackage komutları, theorem tanımları, font ayarları gibi hazırlık kodlarıyla başlarken, R Markdown/Quarto belgesi başlık, yazar, özet gibi doğrudan metnin gerçek anlamıyla başlıyor
      Vurgu farkı açıkça görülüyor
    • Nota, TeX/LaTeX'in teoride mümkün olup pratikte iyi çözemediği bir sorunu çözebilirse ilginç olurdu. Yani aptalca dış gereksinimlere uygun stil vermenin kolaylığı
      A0 konferans posteri gibi sıkışık ve bilgi yoğun düzenler, post-Sovyet coğrafyasındaki GOST gibi ulusal standart belge stilleri, uluslararası geleneklere göre patlayarak artan kaynakça stili gereksinimleri, belirli bir MS Word sürümünün varsayılan stili gibi görünmesini sağlamak, makalelerde hızlı düzeltmeler için görsellerin üzerine görsel veya metni hassas biçimde yerleştirmek ve bunları bilinçli olarak ayarlamak buna dahil
      TeX dünyasında teknik olarak bunların hepsi mümkün, ama pratikte diplomalı sıradan bir kullanıcının bile içine dalmak istemeyeceği kadar derin bir kara büyü gerekiyor
    • Nota iyi görünüyor. Knuth'un “edebî programlama” fikrinden alınmış, Literate Markdown adlı benzer bir şey yaptım; en başından beri hesaplama ile açıklamayı karıştırmaya odaklanmıştı
      Son birkaç ayda SVG animasyon fikirlerini(https://simpatico.io/svg) keşfetmek veya yeni veri yapıları/algoritmaları(https://simpatico.io/stree3) somutlaştırmak için keyifle kullandım
      Tüm sunucu ve Markdown işleyici, okunması kolay yaklaşık 500 satırlık Node kodundan oluşuyor; çok az bağımlılığı var, geçişli bağımlılığı yok ve derleme aşaması da gerekmiyor. Varsayılan olarak sunucu, hiçbir türden üçüncü taraf kaynağa veya çereze izin vermiyor
      MIT lisansıyla GitHub'da; kişisel depodan organizasyon deposuna taşırken düzenliyorum. Bakınız: https://simpatico.io/lit
    • İlginçtir ki bu tür sorunlar ve daha fazlası Org Mode içinde oldukça makul biçimde çözülmüş durumda. Ancak Emacs kullanan çok az kişi olduğu için bilen de çok az
  • “Zorunlu dinamizm”in gerekmediği yerlerde, bunun olmamasının bir hata değil, aksine bir özellik olduğunu düşünüyorum

    • Tamamen katılıyorum. Dinamizm web uygulamaları için harika, ama belgelerde en son istenecek şey
    • PDF’leri küçük ekranlarda, özellikle mobilde rahat okuyabilmek için temel bir dinamik yerleşim gerekli görünüyor
      Mobilde PDF yerine web sayfası okumayı çok daha fazla tercih ediyorum; çünkü makul tasarlanmış bir web sayfası genelde mobil ekrana uyum sağlayabiliyor
    • PDF, dijital olarak yeniden üretilebilme biçimini sınırlayarak bilgiyi kısıtlıyor. PDF’te “sadece” kopyala/yapıştır diye bir şey yok; tuhaf hatalarla dolu, bu yüzden metni büyük ölçüde yeniden biçimlendirmek ya da özel yazılımlardan geçirmek gerekiyor
      Görsel bilgiyle dijital bilgiyi birlikte kodlayan bir formata ihtiyaç var. Dijital katman varsayılan olarak görünmez olabilir, ama gerektiğinde erişilebilir olmalı
    • Adobe’nin PDF şartnamesi şaşırtıcı biçimde JavaScript çalıştırmayı (https://helpx.adobe.com/acrobat/using/applying-actions-scrip...), etkileşimli 3D grafikleri (https://www.youtube.com/watch?v=PKfyFt3zT5A, https://www.youtube.com/watch?v=vW5-1LVtd9U), ses ve videoyu (https://helpx.adobe.com/acrobat/using/rich-media.html), duyarlı PDF belgeleri için “Liquid Mode”u (https://www.adobe.com/acrobat/hub/what-is-adobe-liquid-mode....) bile destekliyor
      Elbette bu “özellikler”, uzun süreli arşivleme için olan ISO PDF/A şartnamesinde hata sayılıp çıkarılmış: https://en.wikipedia.org/wiki/PDF/A
      Mesele şu: Bazen belge sadece belge olmalı. Bilimsel makalelerde LaTeX, insanın insan için yazdığı şeydir; özel komutlar ve paketler sayesinde, üretilen makale kadar okunabilir düz metin belgeler yazılabilir. Erişilebilirlik açısından da iyi
    • PLDI makalesi örneğine bakınca, büyük ve yoğun bir formül içindeki sembollere açılır açıklamalar eklenmiş. Böyle şeyler gerçekten yardımcı olabilir
      Dinamik belgelerde ilginç ve keşfedilmemiş bir alan var, ama bunların zarif biçimde kullanıldığı iyi örneklere ihtiyaç var
  • Özetle LaTeX tarafına daha yakın, bazı Markdown öğeleri de var; JavaScript ile yazılmış olması, birçok kişinin zaten bildiği bir dille katkı verebilmesi ve MIT lisanslı olması güzel
    Hemen kullanacağım bir iş var mı bilmiyorum, ama oldukça hoş görünüyor. LaTeX benzeri özellikler gerektiren bir metin yazıp gönderilecek yer LaTeX’i zorunlu tutmuyorsa Nota’yı denemeyi düşünürdüm
    Knuth’un neredeyse yarı tanrı gibi bir figür olduğunu düşünüyorum, ama gökten inip TeX’i vererek “sonsuza dek yeni hiçbir şey denemeyin” demiş değil

    • TeX kesinlikle çığır açıcıydı, ama bence kendi döneminin ürünü. Bugünün ölçütlerine göre komik kalan bellek sınırlarına uymak için makro genişletme ve düğümleme tekniklerine aşırı zekâ harcanmış
      Modern dillerin sunduğu hata önleme mekanizmalarının ve kolaylıkların da fazlasıyla eksiği var. LaTeX kullanırken tek bir kaçış karakterini kaçırıp her şeyi bozmayı önlemek için blokları yalıtmak adına \input{} parçalarına ciddi biçimde bel bağlıyorum
      Sürekli modern bir yeniden yorumunu istiyorum, ama TeX’in üzerinde biriken onlarca yıllık atalet ve paketler yüzünden çıkması zor bir yerel optimuma sıkışmış gibiyiz
    • https://typst.app/ de bakmaya değer
  • Benzer şeyler arasında https://pandoc.org/, https://quarto.org/, https://markdoc.dev/, https://mdxjs.com/, https://typst.app/ var

    • Pandoc’un desteklenen formatlar listesi etkileyici
  • Bu alandaki yeni girişimlerin sorunu, zaten fazlasıyla kalabalık bir yere girmeleri. Mevcut çözümlerin kusursuz olmaması pek önemli değil
    Bu, bin yıllık mimarlık tarihi birikmiş bir Avrupa tarihî kentinde ortaya çıkıp harika bir yeni bina tasarımı savunmaya benziyor. Boş arsa nadir, insanlar da yenisini denemek için eski yapıları öylece yıkmıyor. Ezici bir avantaj hissettirmesi gerekiyor
    Mimarlıkta çelik ve betonarme dikey boyutu açarak alan kullanımını büyük ölçüde iyileştirdi ve sonrasında tarih değişti
    ASCII, reStructuredText, wikitext, Markdown, TeX/LaTeX, AsciiDoc, HTML vb.’yi “iyileştireceğim” diye insanları başka bir belge formatına çekmeye değecek keşfedilmemiş bir boyut olup olmadığı asıl mesele
    Yaygın cevap semantik hiper metin altyapısı. İlk vizyon hâlâ gerçekleşmiş değil. Bugünün kapalı ekosistemlerinin geçici bir kâbus olduğunu varsayarsak, yeniden merkezsizleşmiş web için modern, kullanıcı dostu ve güç veren bir belge yazma altyapısına ihtiyaç var
    Yine de belge yazmayı ve paylaşmayı yeni bir seviyeye taşıyacak başka boyutlar da olabilir. İnovasyonun güzelliği, mevcut kurallara ve yerleşik bilgeliğe bağlı olmamasında

    • Merkeziyetsiz bir web, biraz Usenet’e karşılık gelen bir “Userweb” istiyorsanız BitTorrent benzeri bir protokole ihtiyaç olduğunu düşünüyorum
      Verimli bir belge formatı gerekir; bunun için de her şeyi yapmaya çalışmayan bir format olmalı. Yani tablolar, standart elektronik tablo formatı gibi belge türlerini dosya bazında ayırmalı; tabloyu, grafikleri (SVG) vb. kendi başına yapmaya çalışan HTML’den farklı olmalı
      Her birini ayrı dosyalara ayırınca kullanıcılar her şeyi tek bir tarayıcıyla görmek yerine belgeleri görüntülemek ya da işlemek için istedikleri programı seçebilir; bu ağ üzerinden dağıtıma da yardımcı olur ve depolama ya da bant genişliğinin düşük olduğu ortamlarda avantaj sağlar
      Bu yüzden benim bakış açıma göre yeniden icat edilecek bir şey yok. Zaten icat edilmiş olanı uzmanlaştırıp rafine etmek yeterli
  • Bağlantıyı takip edince https://willcrichton.net/nota/, Nota’nın hedeflediği kullanım alanında, yani programlama dili akademik makalelerini daha anlaşılır kılma nişinde ikna edici avantajlar gösteriyor
    Yüksek kaliteli PDF olarak render edilebilmesi elbette gerekli ve sorulması gereken bir konu. Mevcut sistemlerle uyumluluk için LaTeX’e render etmek belki daha iyi bile olabilir

  • Temelde Nota, markup + kod (JavaScript) ve bu kombinasyon MDX’in hedeflediği alan. Daha önce biri bunu gündeme getirdiğinde yaratıcısı, Nota’nın dokümantasyona, MDX’in ise web sitelerine göre tasarlandığını söylemişti: https://news.ycombinator.com/item?id=31349579
    Öyleyse Nota’nın yaygınlaşması için birinin bunu bir ürünle sarmalaması gerektiğini düşünüyorum. Çıktı iyi görünüyor ama belge oluşturmak için Node.js ile uğraşmak fazla zahmetli; yeniden LaTeX gibi hissettiriyor. Çoğu kişi Notion’ı ya da bir kelime işlemciyi tercih edecektir

    • LaTeX, daha genel olarak TeX ailesi, hiçbir zaman ortadan kaybolmadı. Bugün de çoğu STEM alanında dergi makalesi yazmak için standart araç
      Üstelik Nota, TeX ailesinin doğrudan rakibi değil. Nota, web tarayıcılarının okuyacağı şeyler üretir; xxxTeX ise PDF okuyucularının okuyacağı şeyler üretir. xxxTeX’in başka çıktı biçimleri de üretebildiğini biliyorum ama çoğu kişi onu PDF üretmek için kullanıyor
    • Nota’nın varsayılan stiller, bir tür yazı stili içermesi bile onu MDX’ten tamamen farklı bir sınıfa koyuyor
      MDX, React/Vue gibi herhangi bir framework ile kullanılmaya hazırdır; ama bu aynı zamanda varsayılan olarak hiçbir görüş sunmadığı anlamına gelir
      Nota, statik site oluşturucularına takılabilecek gibi hissettiriyor. Elbette bunun için ikisini birlikte çalışır hâle getirmek gerekir, ama benden biraz daha adanmış biri için ulaşılabilir bir beklenti olduğunu düşünüyorum
  • Metin sayfaları oluşturmak için neden JavaScript’e derlenen bir dile ihtiyaç olduğunu anlamıyorum. Aynı hedefi AsciiDoc zaten karşılıyor
    O’Reilly gibi gerçek yayıncılar da kitap ve web sitesi üretmek için girdi biçimi olarak AsciiDoc kullanıyor

    • AsciiDoc konusunda katılıyorum. Markdown nispeten kısa içeriklere daha uygunsa, LaTeX de atıf ve formüller içeren ciddi akademik makalelere daha yakınsa, AsciiDoc bu ikisinin arasındaki doğru noktayı iyi tutturuyor
      Son birkaç yıldır AsciiDoc kullanıyorum ve seviyorum. AsciiDoc’un henüz desteklenmediği yerlerde ancak Markdown’a dönüyorum. Örneğin GitHub ve GitLab AsciiDoc render etmeyi destekliyor
      PyPI ne yazık ki hâlâ desteklemiyor, ama daha fazla kişinin buna baktığını görmek güzel: https://github.com/pypa/readme_renderer/issues/205
    • Asciidoctor sayesinde asciidoc en iyisi. Bir format olarak tam doğru dengeyi yakaladığına katılıyorum
      Yine de mevcut araçlarda can sıkan noktalar var. Asciidoctor’a muazzam emek harcandığı görülüyor ve bunu takdir ediyorum, fakat anlamsal HTML5 çıktısı yok, görsel üreticilerle entegrasyon zor ya da en azından gerektiğinden daha zor ve tüm makinemdeki tek Ruby bağımlılığı olacak kadar ağır
      Ruby meselesi hariç, bu sorunlar GitHub’da açık olduğuna göre daha fazla zaman ve kaynakla çözülecek gibi görünüyor
  • Emin değilim. Emacs org-mode daha iyi ve JavaScript’e bağımlılığı da daha düşük görünüyor
    https://docusaurus.io/ da çok iyi ve esnek. Nota’yı benzer biçimde genişletmek istiyorlarsa bu ikisine bakmalarını öneririm

  • Çoğunlukla statik içerikten oluşan, ama istenirse etkileşimli grafikler veya keyfi özelleştirmeler eklenebilen bir blog yapmanın en kolay yolunu düşünüyordum. Nota iyi bir seçenek mi merak ediyorum
    Diğer seçenek olarak Quarto’ya (https://quarto.org/) da baktım; ayrıca Jekyll gibi basit bir statik site blogu kullanıp gerektiğinde çıktı HTML’ini elle düzenlemek de mümkün olabilir mi bilmiyorum

    • Ben XHTML’e biraz özel XML karıştırıyor, son XHTML’i XSLT ile üretiyorum: https://git.uberspace.net/homepage/
      Böylece HTML’in tamamını kullanabiliyor, üretim sürecini özelleştirebiliyor, bağımlılıkları görece kolay yönetebiliyor ve ilgili formatların standartlaşmış olmasından yararlanabiliyorum
    • Astro’yu çok güçlü şekilde öneririm: https://astro.build/
      Astro, React tarzı bileşenler yazdığınızda, gerçekten JavaScript gereken durumlar dışında bunları saf HTML/CSS olarak derliyor. Kendi kişisel sitemi ve blogumu da Astro ile yaptım: https://sjer.red/, kaynak kodu da https://github.com/shepherdjerred/shepherdjerred.com
      Astro ile blog yapma eğitimi de var: https://docs.astro.build/en/tutorial/0-introduction/
    • Hugo’nun shortcode yolunu kullanmak da mümkün. Jekyll’de de benzer bir şey vardır diye tahmin ediyorum; Vega-Altair (Python) veya plotly gibi veri görselleştirme kütüphanelerinin çıktı HTML dosyasını shortcode girdisi olarak kullanabilirsiniz