Nomnoml: Metin sözdizimiyle çizilen UML diyagramları
(nomnoml.com)- UML diyagramlarını kod yazar gibi oluşturmanızı sağlayan bir araç; soldaki metin sözdizimini düzenlediğinizde render edilen diyagram da birlikte değişir
- Sınıf, bileşen, akış şeması, kullanım senaryosu, veritabanı·tablo gibi çeşitli diyagram öğelerini ve ilişki çizgisi gösterimlerini destekler
- Düzenleme içeriği tarayıcının localStorage alanına kaydedilir ve bir sonraki ziyarette kalmış olabilir; ancak kaydın garanti edildiği söylenemez
- Kanvas, sağdaki 1/3’lük alanda sürükleme ve kaydırma ile taşınabilir ve yakınlaştırılıp/uzaklaştırılabilir; düzenleyici Sublime Text tuş eşlemelerinin bir kısmını destekler
#direktifleri ve.stil direktifleriyle yazı tipi, yön, aralık, renk, çizgi biçimi ve özel sınıflandırıcı stilleri ayarlanabilir
Metin sözdizimiyle oluşturulan diyagramlar
- Nomnoml, metin tabanlı sözdizimiyle diyagram yazıp render eden bir araçtır
-
İlişki çizgisi gösterimleri
- association, dependency, generalization, implementation, composition, aggregation, ball and socket, note, hidden gibi gösterimler kullanılabilir
- Örnek:
[Car]->[Engine] - Örnek:
[Car] +-> 0..* [RustPatch] - Örnek:
[Car]o->[Manufacturer] - Örnek:
[Car]<:-[Pickup]
-
Desteklenen sınıflandırıcılar
- Sınıf diyagramlarında temel sınıfın yanı sıra
abstract,instance,reference,package,framedesteklenir - Bileşen diyagramlarında
socket,lollipopgösterimleri kullanılabilir - Akış şeması öğeleri arasında
start,end,state,choice,sync,input,sender,receiver,transceiverbulunur - Kullanım senaryosu diyagramları
actor,usecasedestekler - Diğer öğeler olarak
note,label,hidden,database,pipe,tablekullanılabilir- Tablo örneği şu biçimdedir:
[<table>Fruits| Apples | 17 || Oranges | 4711]
- Tablo örneği şu biçimdedir:
- Sınıf diyagramlarında temel sınıfın yanı sıra
Düzenleme, direktifler ve stiller
- Satır başındaki
//yorum olarak işlenir[not //commented]gibi satır ortasındaki//yorum değildir
idözelliği kullanılırsa görünen adı aynı olan iki düğüm birbirinden farklı düğümler yapılabilir- Örnek:
[<actor id=a>User],[<actor id=b>User],[a] -- [b]
- Örnek:
-
#direktifleriyle yerleşim ve render ayarları#import: filename#direction: down | right#edges: hard | rounded#background: transparent#font,#fontSize,#spacing,#padding,#stroke,#fill,#zoom#ranker: network-simplex | tight-tree | longest-path
-
.direktifleriyle sınıflandırıcı stili tanımlama- Örnek:
#.box: fill=#8f8 dashed - Örnek:
#.blob: visual=ellipse title=bold fill,stroke,align,direction,visualgibi anahtar/değerler kullanılabilirtitle=left,italic,bold,body=center,italic,boldgibi başlık ve gövde metni stilleri belirtilebilir- Kullanım örnekleri yazı tipi değiştirme, sıkı yerleşim, tablo oluşturma, özel stil ve birden çok dosyaya bölmeyi içerir
- Birden çok dosyaya bölme için
#import: blobby_stylesbiçimi kullanılır - Düzenleme ekranındaki değişiklikler tarayıcının localStorage alanına kaydedilir; kanvas, sağdaki 1/3’lük alanda sürükleme ve kaydırma ile taşınabilir ve yakınlaştırılıp/uzaklaştırılabilir
- Düzenleyici Sublime Text tuş eşlemelerinin bir kısmını destekler ve Nomnoml GitHub üzerinde barındırılır
- Örnek:
1 yorum
Hacker News yorumları
GitHub bağlantısı: https://github.com/skanaar/nomnoml
İlk başta epey kafam karıştı; ancak about düğmesini bulunca anladım.
UML’i bir bakışta tanıyamıyor olmam belki de şanslı bir hayat sürdüğüm anlamına geliyordur. Başta sahte korsan konuşması sözdizimi gibi bir şeyi açıklıyor sandım.
Bazen bir UML diyagramını okumak için 10 çeşit oku ezberleyen kimse olmadığını kabul eden bu tür yaklaşımların çok daha iyi olduğunu düşünüyorum: https://buck2.build/docs/concepts/concept_map/
Ama “UML” adını kullanan araçların önemli bir kısmı da böyle; pratikte çoğu zaman teorik UML’den daha az kesin ve daha az laf kalabalığı içeren bir şeye ihtiyaç oluyor.
Eskiden “metinden diyagrama” dönüştüren araçları karşılaştıran açık kaynaklı bir site vardı: https://text-to-diagram.com/
nomnoml listede yok.
[1]: https://d2lang.com/
Nomnoml’u seviyorum. Son zamanlarda üzerinde çalıştığım tarayıcı tabanlı kişisel bilgi yönetimi (PKM) projesinde hiyerarşik etiket yapısını görselleştirmek için kullanıyorum.
Yerleşim genelde oldukça temiz çıkıyor. Örnek: https://imgbox.com/9A1mDyNv
Mobil tarafın elden geçirilmesi gerekiyor gibi. Telefonda açtığımda diyagram editörün üzerine çizildiği için editörü kullanamadım.
Alttaki JavaScript kütüphanesi doğrudan HTML canvas’a veya bir Node.js programından SVG’ye render edebiliyor; isterseniz komut satırından da çalıştırılabiliyor.
Eskiden nomnoml ile birkaç araç yapmıştım; bunların içinde GPU assembly kodunun kontrol akışı grafikleri ve bağımlılık grafikleri de vardı.
Gerçekten çok hoşuma gitmişti, ama belirli öğelerin birbirine yakın yerleştirilmesini güvenilir biçimde zorlamanın bir yolu olmaması üzücüydü. Çok büyük diyagramlarda bazen kötü seçimler yapıp ortalığı dağınık hale getiriyor.
Dokümantasyon eksiksiz olmasa da kodu değiştirmek oldukça kolaydı; fareyle üzerine gelince tooltip gösterecek ve belirli bir kutuya tıklanınca başka bir diyagrama bağlanacak şekilde hackleyebilmiştim. Böyle iyi bir aracın açık kaynak olmasına minnettarım.
İyi bir yerleşim elde etmek tanım sırasına fazlasıyla bağlı. Büyük diyagramlarda kullanıcının çözmesi zorlaşabilir, ama küçük diyagramlarda fena görünmüyor.
Örneğin aynı korsan örneğini farklı sırada yazınca geçerli olsa da kötü görünen bir yerleşim çıkıyor.
Diyagramlar dâhil teknik dokümanların proje kaynak kodunun bir parçası olduğu bir dünya hayal ettiğim için bu kod tabanlı diyagram ürünlerinden birkaçını denedim; ama özellikle dış dağıtım için, hatta iç kullanım için bile kabul edilebilir yerleşim elde etmek zordu.
Bu hayal kırıklığı genelde iki kötü sonuca yol açıyor: diyagram ya okunamaz hale geliyor ya da bakım görmez oluyor.
Açıkçası check-in sırasında dokümanların code review’dan geçirilmesi fikri de neredeyse bir efsane. Bu tür dokümanların diff’lerini anlamak çok zor; render edip çıktıya bakmadan dokümanın doğru olup olmadığını anlamlı biçimde doğrulamak neredeyse imkânsız.
Gerçekten iyi çalışmasını istediğim türden bir problem; belki bir gün çözülmüş bir problem haline gelir.
Orijinal Pirate tablosu ile üst yorumdaki Pirate tablosu karşılaştırılınca üst-alt ters dönüyor. beard ve parrot’u istenen gösterim sırasına göre önce tanımlasanız bile yine ters çıkıyor.
Güzel görünüyor ve PlantUML sınıf diyagramlarından çok daha iyi duruyor.
[0]: https://plantuml.com/class-diagram
graphviz’i akla getiriyor