1 puan yazan GN⁺ 2024-06-28 | 1 yorum | WhatsApp'ta paylaş
  • eplot, Emacs içinde sayısal verilerden basit grafikler çizmek için geliştirilen bir paket; çıkış noktası ise chart.el ile Org/Gnuplot birleşiminin eksen gösterimi ve kullanılabilirlik sınırlamaları
  • En büyük sorun Y ekseni işaretleri olmuş; 1·2·5 dizisindeki hoş görünen sayıları ve uç ölçekler ile zaman aralıklarını doğal biçimde ele almak gerekiyor
  • Önceki PHP grafik kütüphanesi deneyimi Emacs Lisp'e taşınırken SVG tabanlı gradient'ler ve karanlık mod gibi görsel özellikler uygulanmış, ancak piksel düzeyinde işleme gerektiren bazı efektler dışarıda bırakılmış
  • Sayıların yoğun olduğu bir buffer'da M-x eplot çalıştırıldığında grafik buffer'ı açılıyor ve headers ile C-c C-c kullanılarak ayarlar hızlıca değiştirilip sonuç görülebiliyor
  • Kod GitHub'da açık olsa da, bir haftalık test vakası odaklı hızlı geliştirme sonucu ortaya çıkmış bir work in progress; kod yollarının düzenlenmesi ve okunabilirliğin iyileştirilmesi hâlâ gerekiyor

Neden doğrudan Emacs içinde grafik çizmek istiyor?

  • Uzun zamandır basit plot'ları kolayca üretmenin bir yolunu ararken, film puanlarıyla ilgili bir yazı yazarken Emacs'in yerleşik chart.el aracını denemiş
  • chart.el Emacs'e dahil olsa da, başlangıçta eieio test aracı olarak ortaya çıkmış bir özellik olduğu için kullanım alanı sınırlı
  • Gerekli işlerin çoğu yapılabilse de, özellikle Y ekseni gösterimi tatmin edici bulunmamış

Grafik kalitesini belirleyen eksen işaretleri

  • Kötü eksen gösterimleri hemen göze çarpar, ama bunları gerçekten doğal göstermek için birçok sınır durumunu dikkatle ele almak gerekir
  • Google Finance da geçmişte en büyük değeri Y ekseninin en üst işareti olarak koyup başlangıç noktasına doğru eşit aralıklı çizgiler ekleyen doğal olmayan bir eksen kullanıyordu
    • Bunun 2021 civarına kadar sürdüğünü hatırlıyor
    • Sonrasında tüm site yeniden uygulanınca daha iyi eksenlere kavuşmuş
  • 1997 civarında bir aracı kurumda çalışırken chart library geliştirme deneyimi yaşamış
  • Eksen işaretleri sorunu zor bir matematik probleminden çok, göze hoş gelen sayıları ve istisna aralıklarını dikkatle seçme meselesine daha yakın
    • Hoş görünen sayılar genellikle 1, 2, 5'in farklı ölçekleri
    • Hisse senedi grafiklerinde $0.00001~$0.00002, 1e9~1e10 gibi aralıklar da görülebilir
    • Zaman ekseninde yıl, yarıyıl, çeyrek, ay, hafta ve hatta ayın haftalara bölünmesi gibi durumlar hesaba katılmalı

Mevcut araçları olduğu gibi kullanmanın zorlaştığı noktalar

  • Daha önce yaptığı PHP grafik kütüphanesi, web sunucusunda çıktı üretmek için kullanışlı olsa da, Emacs içinde sayılarla oynayıp deney yapmak için uygun değil
  • Excel ve Jupyter Notebook'un popüler olmasının nedenlerinden biri gibi, veriyi etkileşimli olarak ayarlayarak istenen grafiğe yaklaşma süreci önemli
  • Org da plot özelliği sunuyor, ancak Org plot arka uç olarak Gnuplot kullanıyor
  • Gnuplot genel olarak işe yarasa da, örnekteki Y ekseni sayı biçimi gibi varsayılanları değiştirmek istendiğinde yükü artabiliyor

eplot'un uygulanışı ve görsel özellikleri

  • chart adı zaten kullanımda olduğu için yeni paket adı eplot olarak belirlenmiş
  • Eski PHP kütüphanesinin tüm özelliklerini taşımayı planlamasa da, uygulamaya başlayınca çoğunu yeniden yapmış
  • Yeni sürümde karanlık mod gibi özellikler de yer alıyor
  • PHP kütüphanesindeki gradient'ler elle yazılmış bir yöntemdi ve GIF renk haritası kaynakları gibi şeyler de içerdiğini hatırlıyor
  • Emacs Lisp sürümü SVG kullanıyor
    • SVG gradient desteği sunduğu için, polygon ve gradient birleştirilerek benzer bir etki elde ediliyor
    • PHP özgün sürümüne benzer sonuçlar alınabiliyor
  • Farklı bir sıra dışı gradient uygulanmamış
    • Piksel düzeyinde, en azından satır düzeyinde uygulama gerektiği için zor
    • Matematiksel hesaplama gerektirebileceğinden dışarıda bırakılmış

Kullanım akışı ve yapılandırma yöntemi

  • Çok sayıda sayı içeren bir buffer'da M-x eplot çalıştırıldığında grafik ayrı bir buffer'da gösteriliyor
  • Grafiği istenen biçime ayarlamak için headers kavramı eklenmiş
  • Faydalı seçeneklerin çoğu headers üzerinden kontrol edilebiliyor
    • Header'lar eklendikten sonra C-c C-c tuşlanarak sonuç anında görülebiliyor
    • Bunu kolaylaştırmak için bir eplot mode da var
  • Basit örnekler küçük gösterimli grafik biçiminde sunuluyor ve yazının ilk görselindeki çeşitli varyasyonların çoğu da headers ile üretilmiş

Açık durum ve kalan işler

  • Çeşitli olasılıkları belgeleyen bir README.md hazırlanmış
  • Kod Microsoft Github üzerinde yayımlanmış
  • Mevcut durum hâlâ work in progress
  • Temelde belli ölçüde faydalı olabileceğini düşünse de, bir hafta boyunca sürekli düzeltilerek yazıldığı için kararlılığı konusunda kesin konuşmak zor
  • Kod, test vakalarına göre verimsiz biçimde yazıldığından düzenlenmesi gereken bir durumda
    • Birden çok kod yolunun birleştirilmesi gerekiyor
    • Kod okunabilirliği artırılmalı
  • Şimdilik dinlenmek için mevcut hâliyle push etmiş; gerçek kullanıcıların ise hâlâ dikkatli olması gerekiyor

1 yorum

 
GN⁺ 2024-06-28
Hacker News yorumları
  • Temiz! Gradyanı ekleme biçimi basit ama zekice.
    Bu alanı sevdiğim için genel bir tavsiye ekleyeyim: Bir dönem Our World in Data’da Max Roser ve Hannah Ritchie ile birlikte Grapher kütüphanesinde (https://github.com/owid/owid-grapher) mühendis olarak çalışırken iyi grafik yapma konusunda çok şey öğrendim.
    Örneklere bakınca başlık, alt başlık ve açıklamayı ihmal etmemek iyi olur. Zaten “basit bir header” hazırlamışsınız; bunları eklemek kolay olacaktır, birkaç kısa ifade büyük fark yaratır. Cole Nussbaumer Knaflic’in “Storytelling with Data” kitabını da öneririm.
    Geliştirmeye devam ederseniz bir noktada veri akışı kütüphanesi ve DSL de eklemek isteyeceksiniz. R’den Hadley Wickham’ın dplyr’ı bu konuda en iyisiydi; kendi Ohayo aracımda ve OWID Grapher’ın CoreTable kütüphanesinde (https://github.com/owid/owid-grapher/tree/master/packages/%4...) de bu yaklaşımdan esinlendim. Jeffrey Heer’in görece yeni kütüphanesi Arquero (https://idl.uw.edu/arquero/) da benzer çizgide.
    Son zamanlarda Mike Bostock’ın yeni aracı Plot’a (https://observablehq.com/plot/) bakıyorum; henüz sadece bir iki gün kullanmış olsam da umut verici. Şu anda Emacs kullanmıyorum ama umarım bunlar faydalı olur.
  • Demek son zamanlarda “Emacs hatalarının %10’u düzeltildi” yazısını bulamamamın nedeni buymuş. Meğer bunu yapıyormuş. Harika; gerçekten bir Emacs ustası.
  • Harika görünüyor! Grafik ayarlarında Emacs’in dosya ve dizine yerel değişkenler özelliğini kullanmak daha esnek bir kullanıcı deneyimi sağlayabilir.
    Örneğin veri dosyasını üretme aşamasındayken grafiği çizmeden önce elle düzenlemek istemeyebilirsiniz ya da büyük bir veri dosyaları dizininde, her dosyaya elle header eklemeden gerektiğinde çizip görmek isteyebilirsiniz.
  • org mode’da grafik çizerken Python ve matplotlib de kullanılabilir. Yalnızca Gnuplot mümkün değil.
    • Matplotlib’in API’si zaten epey kullanışsız; bunun üstüne bir elisp sarmalayıcısı koymanın kullanımı iyi bir şeye dönüşeceğini sanmıyorum.
      Orijinal yazıda söylendiği gibi, gereken kod miktarının doğrudan uygulamaktan daha fazla olduğu bir duruma dönüşmesi muhtemel.
    • matplotlib ve gnuplot’ta beni hep rahatsız eden şey, kelimenin tam anlamıyla her şey için ayrı bir komut ya da fonksiyon çağrısı varmış gibi görünmesi.
      Y eksenindeki üçüncü seviye tik işaretlerinin boyutunu değiştirmek için set_third_level_y_ticks() gibi bir şey çağırmak gibi. Bunun mutlaka kötü olduğunu söylemiyorum; belki de başka türlü olamaz, ama her şey özel durum gibi ele alınmış görünüyor ve ortogonallik düşükmüş hissi veriyor.
    • ESS (Emacs Speaks Statistics) de var. org-mode’u R/Julia ile güçlü biçimde bağladığı için ggplot2 veya makie gibi şeyler kullanılabiliyor.
      Yine de saf elisp ile bir şey yapma girişimine saygı duyuyorum.
    • R ve onun grafik kütüphaneleri de kullanılabilir.
  • Tam anlamıyla iyi bir hack. Özellikle gradyan kısmı hoşuma gitti.
    Bu plot’ların SVG olması ve LaTeX’e ya da web tarayıcısına aktarılabilmesi de önemli. İlki, bir makaleye eklenmesi gereken plot’ları üretirken oldukça güçlü bir aday olur. Güzel iş.
  • Microsoft Github” kelimelerini bu kadar açık biçimde yan yana ilk kez görüyorum; bunun gerçek olmasının üzerinden kaç yıl geçmiş olursa olsun içimi rahatsız ediyor.
    • Hâlâ bu kadar çok özgür ve açık kaynak projenin o platformu kullanmasını anlamıyorum. GitHub, insanların Microsoft önekini görmemesini sağlama konusunda çok başarılı oldu.
      Yine de Codeberg artık özgür ve açık kaynak projeleri arasında nihayet bir miktar ivme kazanıyor gibi görünüyor.
    • Bu yüzden GitHub hâlâ eski bağımsız startup’mış gibi görünmeye çalışıyor sanırım. Pek çok bağımsız geliştirici de benzer hissediyor ve hissedar değeri ya da büyük teknoloji kapitalizminden çok yazılım özgürlüğü tarafındaki değerlere yakın duruyor.
      Az önce github.com ana sayfasını açıp Ctrl-F ile “Microsoft” aradım; 0 sonuç.
    • Ben de tamamen aynı tepkiyi verdim. Umarım bir gün MS GitHub olarak yeniden markalaşmaz.