- 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/notapaketiylenotaç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
Notakelimesi, ö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
Notareferansına tıklayarak veya çift tıklayarak davranışını görebilirsiniz
- Örneğin
- 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/notapaketiylenotaçalıştırılabilir dosyası kurularak kullanılabilir- Gereksinimler NodeJS ≥ 16 ve npm ≥ 6’dır
- NodeJS global binary dizini, kabuğun
PATHdeğişkeninde bulunmalıdır
- Tek bir Nota belgesi şu akışla derlenebilir
npm install --global @nota-lang/notaecho "@Title: Hello world" > index.notanota build index.notaopen dist/index.html
- Nota dosyaları
nota edit index.notakomutuyla 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
@Definitionve@Refbileş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
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 :-)
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
Bir belge dilinde en önemli şey bu ikisine öncelik vermek. Örneğin bir TeX belgesi
\documentclass, çeşitli\usepackagekomutları, 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ıyorVurgu farkı açıkça görülüyor
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
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
“Zorunlu dinamizm”in gerekmediği yerlerde, bunun olmamasının bir hata değil, aksine bir özellik olduğunu düşünüyorum
Mobilde PDF yerine web sayfası okumayı çok daha fazla tercih ediyorum; çünkü makul tasarlanmış bir web sayfası genelde mobil ekrana uyum sağlayabiliyor
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ı
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
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
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ıyorumSü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
Benzer şeyler arasında https://pandoc.org/, https://quarto.org/, https://markdoc.dev/, https://mdxjs.com/, https://typst.app/ var
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
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
Ü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
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
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
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
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, 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/