Quiver - Modern bir değişmeli (commutative) diyagram editörü
(github.com/varkor)- Quiver, değişmeli diyagramları ve pasting diyagramlarını grafiksel olarak oluşturmayı, ekran için yüksek kaliteli işleme ve LaTeX·Typst dışa aktarmayı destekleyen bir editördür
- Elle LaTeX veya Typst yazmaya kıyasla diyagram oluşturma ve düzenleme çok daha hızlıdır; alışınca kalem ve kâğıda yakın bir çalışma hızına ulaşılabilir
- pullback, pushout, adjunction, higher cell gibi karmaşık diyagramları işleyebilir; etiket boyutuna göre ayarlanan esnek bir grid ve birleştirilebilir ok stilleri sunar
- Hem fareyle sürükleyerek hem de klavye kısayollarıyla çalışılabilir; çoklu seçim, geri alma·yeniden yapma, kullanıcı makroları, HTML'ye gömülebilir diyagram dışa aktarma, kaydırma ve yakınlaştırmayı destekler
- LaTeX veya Typst olarak dışa aktarırken diyagram bağlantısını da ekleyerek daha sonra yeniden açıp düzenlemeyi veya başkalarıyla paylaşmayı mümkün kılar
Quiver ne yapar
- Quiver, değişmeli diyagramlar ve pasting diyagramları oluşturmak için modern bir grafik editördür
- Ekranda iyi görünen yüksek kaliteli diyagramlar işler; LaTeX için tikz-cd üzerinden, Typst için fletcher üzerinden dışa aktarabilir
- Web'de doğrudan q.uiver.app üzerinden denenebilir
- Verimli kullanım ve yalnızca klavyeyle diyagram oluşturup düzenleme yöntemleri Quiver öğreticisinde derlenmiştir
Diyagram oluşturma özellikleri
- Karmaşık değişmeli diyagramlar ve pasting diyagramları oluşturmak için verimli ve sezgisel bir arayüz sunar
- Desteklenen örnekler şunlardır
- pullback ve pushout içeren diyagramlar
- adjunction
- higher cell
- Nesne yerleşimi, etiket boyutuna göre ayarlanan esnek bir grid temelindedir
- Oklar için çeşitli stiller birleştirilebilir
- Etiketlerde ve oklarda renk kullanılabilir
- Ekran görüntülerinde de iyi görünmesi, LaTeX·Typst olarak dışa aktarılan sonucun da özgün diyagrama olabildiğince yakın görünmesi için tasarlanmıştır
Girdi yöntemleri ve düzenleme iş akışı
- Diyagramlar fareyle tıklayıp sürükleyerek oluşturulup düzenlenebilir
- Tüm işlemleri gerçekleştirebilen bir klavye kısayolları seti sunar; bu sayede klavye tabanlı düzenleme de mümkündür
- Birden çok öğeyi aynı anda seçerek toplu değişiklikler kolay ve hızlı yapılabilir
- Geçmiş sistemiyle işlemler geri alınabilir·yeniden yapılabilir
- Büyük diyagramlarla çalışmak için kaydırma ve yakınlaştırmayı destekler
- Akıllı etiket hizalama ve edge offset sunar
Dışa aktarma ve yeniden kullanım
- Diyagramlar LaTeX veya Typst olarak dışa aktarılabilir
- Dışa aktarılan sonuca ilgili diyagrama geri dönmeyi sağlayan bir bağlantı eklenir
- Daha sonra düzenleme gerektiğinde yeniden açılabilir
- Başkalarıyla paylaşılabilir
- HTML'ye eklenebilen diyagram dışa aktarmayı da destekler
- Kullanıcı tanımlı makrolar,
\newcommandiçeren dosyanın URL'si yapıştırılarak kullanılabilir - Editör entegrasyonu Editor integration belgesinden ve Quiver wiki üzerinden görülebilir
Derleme ve çalıştırma koşulları
- Komut satırında
makeçalıştırıldıktan sonrasrc/index.htmltarayıcıda açılarak derleme sonucu kontrol edilebilir - Make veya Bash sürümü uyumlu değilse KaTeX'in en güncel sürümü elle indirilip
src/KaTeX/altına yerleştirilebilir - KaTeX yolu doğru değilse KaTeX yükleme hatası oluşur
- Quiver localhost üzerinden çalıştırılmalıdır
- Python kuruluysa Quiver dizininde
make serveçalıştırıldıktan sonra tarayıcıdalocalhost:8000açılabilir - Derleme sorunları varsa sorunun içeriğiyle birlikte GitHub issue açılabilir
1 yorum
Hacker News yorumları
Bu araç gerçekten harika. Fourier-Poisson küpünü [0] yaklaşık 10 dakikada yapabildim; arayüzü de çok sezgisel
Serbest bir tuval yerine değişmeli diyagramlara odaklanan tasarımın, onu temiz ve kullanımı kolay kılan mükemmel bir tercih olduğunu düşünüyorum. Makale yazarken bu olsaydı muazzam zaman kazanırdım
[0] https://q.uiver.app/#q=WzAsOCxbMCwxLCJnIFxcdGV4dHsgb24gfVxcb...
Benzer bir bağlamda, yakın zamanda bu Petri net editörü oldukça etkileyici gelmişti: https://pes.vsb.cz/petrineteditor/#/model
Petri net'ler harika. Sonlu durum makinesini çok iş parçacıklı hale getirirseniz buna yakın bir his veriyor
Petri net'i ilk kez “statebox” adlı bir organizasyonun yazılarını okurken öğrendim. Statebox, Petri net'ler, değişmeli diyagramlar ve çeşitli kategori kuramı kavramlarıyla ilgileniyordu; birkaç makale okuyup büyülenmiştim ve orada çalışmak hayalim olmuştu. Ne yazık ki şu an ana sayfada sadece “imagine being a category theorist” ifadesi ve gülmekten ağlayan emoji var; ne olduğunu bilmiyorum
Birkaç gün önce kitabıma [1] koymak üzere basit bir diyagram [0] çizmek için bunu kullandım
Ne yazık ki kategori kuramına özel olduğu için düğümleri güzelce süsleme desteği pek fazla değil; ama elbette LaTeX ile halledilebilir
[0] https://q.uiver.app/#q=WzAsNSxbMSw2LCJcXHRleHR7TmF0dXJhbCBEZ...
[1] http://abstractionlogic.com
Dün gece https://tikzcd.yichuanshen.de/ kullanıyordum; bu aracın daha az özellikli bir sürümüne yakın. Yine de basit diyagramlar oluşturmak için gayet iyi
Değişmeli diyagramın ve yapıştırma diyagramının ne olduğunu, mütevazı ve pek de yetkin olmayan bir yazılım geliştiriciye açıklayabilir misiniz?
Wikipedia maddesi temel düzeyde anlamak için fazla soyuttu [0]
[0]: https://en.wikipedia.org/wiki/Commutative_diagram
A → Büzerindefvarsa, A’dan bir girdi alıp B’den bir çıktı üreten f fonksiyonunu gösterirA → B’ninfolduğu, oradanB → C’ning,A → C’ninholduğu bir diyagramg ∘ f = hdemektir; yani önce f’yi yapıp sonra g’yi yapmakla h’yi yapmak aynıdır. Her fonksiyonun tanım kümesi ve değer kümesi birlikte yazıldığı için fonksiyonların bileştirilebilir olup olmadığını, yani tip denetiminden geçip geçmediğini görmek kolaylaşırDiyagram içindeki yolların kendisi de fonksiyon gibi bileştirildiğinden bu gösterim çok doğal biçimde yerine oturur. Örneğin birleşme yasası gösterimin kendisine gömülüdür;
A→B→C→Düç fonksiyonu bileştirmenin tek ifadesidir ve(f∘g)∘hilef∘(g∘h)arasındaki farkı yazmak bile mümkün değildirGenel olarak, yönlü bir çoklu grafa bu yolların hangilerinin birbirine eşdeğer olup olmadığına dair bir açıklama eklenir ve bu eşdeğerlik ilişkisi birkaç temel özelliği sağlarsa buna kategori denir. Bu kavram matematikte, soyut mantıkta vb. çok sık karşımıza çıkar. Değişmeli diyagramlar, bu bağlamda yolların eşdeğerliğini görsel olarak hızlıca çıkarsamak için kullanışlıdır
n(g(f(a)))anlamına gelir. Bu bir diyagramdır; diyagramın değişmeli olması ise başlangıç ve bitiş noktası aynı olan herhangi iki yolu izlediğinizde sonuçların birbirine eşit olduğu anlamına gelirBu yüzden
n(g(f(•))),s(r(l(•))),s(m(f(•)))ifadelerinin hepsi A’dan C'ye giden yollar ve fonksiyon çağrılarıdır; diyagramın değişmeli olduğu söylendiğine göre bu yolların hepsi aynıdırMonomorfizm, epimorfizm ve izomorfizm fonksiyonların önemli özellikleridir; eşitliğin iki tarafında belirli terimleri “sadeleştirmeyi” mümkün kılarlar. Örneğin genel olarak
f(g(x))=f(h(x))diyeg(x)=h(x)sonucuna varamazsınız. f’yi bu şekilde sadeleştirebiliyorsanız buna monomorfizm denir. Benzer biçimdeg(f(x))=h(f(x))ifadesinde f’yi sadeleştiripg(x)=h(x)elde edebiliyorsanız f epimorfizmdir. İzomorfizm ikisini birden sağlar. Bu özellikler sayesinde belirli durumlarda diyagramın bazı yollarında “ters yönde yürümek” mümkün olurKategori kuramında görülebilecek teoremlerin bir biçimi, five lemma[0] örneğinde olduğu gibi “bu diyagrama bak. g bir epimorfizm ve h bir monomorfizm ise f bir izomorfizmdir” şeklindedir. Yani bu tarafta ve şu tarafta sadeleştirme yapılabildiğini biliyorsanız, başka bir tarafta da sadeleştirme yapılabileceğini öğrenirsiniz
[0] https://en.wikipedia.org/wiki/Five_lemma
Basit düşünmek gerekirse nesneleri tipler, okları da tipler arasındaki fonksiyonlar olarak görebilirsiniz
Sol üst köşeden başlayıp iki yolu yürüyerek tipleri kontrol edersiniz. Diyagram doğru biçimde tip denetiminden geçerse değişmelidir denir ve iki yol bir anlamda eşdeğerdir. Bunun somut anlamı, burada atlanan birçok ayrıntıya göre değişir
Bir kategori örneği “kümeler ve fonksiyonlar” kategorisidir. O kategoride akla gelebilecek tüm kümeler nesne, yani düğüm olarak bulunur; herhangi iki küme arasındaki akla gelebilecek tüm fonksiyonlar da bu ikisi arasındaki oklar olarak bulunur
Böylece A’dan B’ye giden bir ok ve B’den C’ye giden bir ok alıp bunları fonksiyonlar gibi bileştirdiğinizde A’dan C’ye giden bir fonksiyon elde edersiniz
Değişmeli diyagram, tüm kategorinin bir alt kümesi gibi görülebilir; iki küme X ve Y arasında çizilmiş tüm yolları izleyip her yolun oklarını bileştirdiğinizde aynı fonksiyonun çıktığı durumdur
Daha yüksek kategoriler hakkında okumadığım için yapıştırma diyagramından emin değilim, ama muhtemelen bu fikrin bir şekilde genelleştirilmiş hâlidir
Web dostu bir biçimde dışa aktarabiliyor mu? Muhtemelen SVG doğru seçenek olur. quiver’ı localhost’ta çalıştırıyorsanız bağlantıyla paylaşmak bir seçenek değil
Birkaç yıl önce kategori kuramı dersi alırken Quiver gerçekten vazgeçilmezdi. Arayüzü temiz ve sezgiseldi, özellikleri de yeterliydi. TikZ ile boğuşmakla kıyaslanamaz bile
Çok iyi bir ürün. Eskiden genelde TikZ kodunu elle yazardım ve oldukça hızlıydım, ama artık çoğunu unuttum; bu yüzden değişmeli diyagramlar için bunun çok faydalı olacağını düşünüyorum
Burada yapılmaya değer bir kod üretme aracı gizli
Quiver’ı birkaç kez kullandım ve her seferinde iyi bir deneyimdi. Geliştirenlerin eline sağlık