1 poin oleh GN⁺ 2024-06-28 | 1 komentar | Bagikan ke WhatsApp
  • eplot adalah paket untuk menggambar chart sederhana dari data numerik di dalam Emacs, berawal dari keterbatasan tampilan sumbu dan kegunaan pada kombinasi chart.el serta Org/Gnuplot
  • Tantangan terbesar adalah skala sumbu Y, yang harus menangani angka yang enak dilihat dalam deret 1·2·5 serta skala ekstrem dan rentang waktu secara alami
  • Dengan memindahkan pengalaman dari library chart PHP lama ke Emacs Lisp, fitur visual seperti gradien berbasis SVG dan dark mode diimplementasikan, tetapi sebagian efek yang membutuhkan pemrosesan per piksel dikecualikan
  • Jika menjalankan M-x eplot di buffer yang berisi banyak angka, buffer chart akan terbuka, dan pengaturan dapat diubah cepat melalui headers serta C-c C-c untuk melihat hasilnya
  • Kodenya telah dipublikasikan di GitHub, tetapi masih berupa kode work in progress yang ditulis cepat selama seminggu dengan fokus pada test case, sehingga masih perlu perapian jalur kode dan peningkatan keterbacaan

Alasan ingin menggambar chart langsung di dalam Emacs

  • Setelah lama mencari cara mudah membuat plot sederhana, penulis mencoba chart.el bawaan Emacs saat menulis artikel tentang rating film
  • chart.el memang disertakan dalam Emacs, tetapi awalnya berasal dari alat pengujian eieio, sehingga cakupan penggunaannya terbatas
  • Pekerjaan yang dibutuhkan pada umumnya bisa dilakukan, tetapi terutama tampilan sumbu Y terasa kurang memuaskan

Skala sumbu yang menentukan kualitas chart

  • Tampilan sumbu yang buruk mudah terlihat, tetapi untuk membuatnya terasa alami sebenarnya perlu menangani banyak kasus batas dengan cermat
  • Google Finance dulu juga menggunakan sumbu yang tidak alami, dengan nilai terbesar ditempatkan sebagai skala paling atas sumbu Y lalu garis-garis berjarak sama ditambahkan ke arah titik asal
    • Chart seperti ini seingat penulis masih ada sampai sekitar 2021
    • Setelah itu, seluruh situs diimplementasikan ulang dan mendapatkan sumbu yang lebih baik
  • Sekitar 1997, penulis pernah bekerja di perusahaan pialang saham dan mengimplementasikan chart library
  • Masalah skala sumbu bukanlah soal matematika yang sulit, melainkan lebih dekat ke persoalan memilih angka yang enak dilihat dan rentang pengecualian dengan teliti
    • Angka yang enak dilihat umumnya berada pada berbagai skala 1, 2, 5
    • Pada chart saham, rentang seperti $0.00001~$0.00002 atau 1e9~1e10 juga bisa muncul
    • Untuk sumbu waktu, perlu mempertimbangkan tahun, semester, kuartal, bulan, minggu, hingga pembagian satu bulan dalam satuan minggu

Titik yang membuat alat yang ada sulit dipakai langsung

  • Library chart PHP yang dulu dibuat memang praktis untuk menghasilkan output di server web, tetapi tidak cocok untuk bereksperimen dengan angka di dalam Emacs
  • Seperti alasan Excel dan Jupyter Notebook populer, proses menyesuaikan data secara interaktif hingga mendekati chart yang diinginkan itu penting
  • Org juga menyediakan fitur plot, tetapi Org plot menggunakan Gnuplot sebagai backend
  • Gnuplot pada umumnya cukup bisa dipakai, tetapi saat ingin mengubah default, seperti format angka sumbu Y pada contoh, bebannya bisa menjadi besar

Implementasi eplot dan fitur visual

  • Karena nama chart sudah digunakan, nama paket baru ditetapkan sebagai eplot
  • Awalnya tidak berniat memindahkan semua fitur library PHP lama, tetapi begitu implementasi dimulai, sebagian besar akhirnya dibuat ulang
  • Versi baru ini juga memasukkan fitur seperti dark mode
  • Gradien pada library PHP dibuat secara manual, dan seingat penulis juga menyertakan hal seperti resource colormap GIF
  • Versi Emacs Lisp menggunakan SVG
    • Karena SVG mendukung gradien, efek serupa dibuat dengan menggabungkan poligon dan gradien
    • Hasil yang mirip dengan versi PHP asli dapat diperoleh
  • Satu gradien lain yang agak unik tidak diimplementasikan
    • Sulit karena membutuhkan implementasi per piksel, atau setidaknya per baris
    • Dikecualikan karena mungkin memerlukan perhitungan matematika

Alur penggunaan dan cara pengaturan

  • Jika menjalankan M-x eplot di buffer yang berisi banyak angka, chart akan ditampilkan di buffer terpisah
  • Untuk menyesuaikan chart ke bentuk yang diinginkan, konsep headers diperkenalkan
  • Sebagian besar opsi yang berguna dapat dikendalikan melalui headers
    • Setelah menambahkan headers, tekan C-c C-c untuk langsung melihat hasilnya
    • Ada juga eplot mode untuk mempermudah hal ini
  • Contoh sederhana disediakan dalam format chart berukuran kecil, dan sebagian besar variasi yang terlihat pada gambar pertama artikel juga dibuat dengan headers

Status publik dan pekerjaan yang tersisa

  • README.md yang mendokumentasikan berbagai kemungkinan telah ditulis
  • Kodenya dipublikasikan di Microsoft Github
  • Status saat ini masih work in progress
  • Pada dasarnya penulis menilai paket ini mungkin sudah cukup berguna, tetapi karena ditulis sambil terus diperbaiki selama seminggu, stabilitasnya sulit dipastikan
  • Kode ditulis dengan cara yang tidak efisien per test case, sehingga masih perlu dirapikan
    • Beberapa jalur kode perlu digabungkan
    • Keterbacaan kode perlu ditingkatkan
  • Untuk saat ini kode di-push dalam keadaan sekarang agar penulis bisa beristirahat, dan pengguna nyata masih perlu berhati-hati

1 komentar

 
GN⁺ 2024-06-28
Opini Hacker News
  • Rapi! Cara memasukkan gradien itu sederhana sekaligus cerdik
    Karena saya menyukai bidang ini, saya tambahkan saran umum: dulu saat bekerja sebagai engineer untuk library Grapher (https://github.com/owid/owid-grapher) di Our World in Data bersama Max Roser dan Hannah Ritchie, saya belajar banyak tentang cara membuat chart yang bagus
    Dari contoh-contohnya, sebaiknya jangan menyepelekan judul, subjudul, dan caption. Karena sudah ada “header sederhana”, mestinya mudah untuk memasukkannya dengan baik, dan beberapa kalimat pendek bisa membuat perbedaan besar. Saya juga merekomendasikan “Storytelling with Data” karya Cole Nussbaumer Knaflic
    Jika terus dikembangkan, suatu saat mungkin akan ingin menambahkan library alur data dan DSL juga. dplyr dari Hadley Wickham di R adalah yang terbaik, dan saya juga mengacu pada pendekatan itu di tool Ohayo saya serta library CoreTable milik OWID Grapher (https://github.com/owid/owid-grapher/tree/master/packages/%4...). Library yang relatif baru dari Jeffrey Heer, Arquero (https://idl.uw.edu/arquero/), juga masih satu aliran
    Belakangan saya sedang melihat tool baru Mike Bostock, Plot (https://observablehq.com/plot/); baru memakainya sehari-dua hari, tetapi tampak menjanjikan. Saya sekarang tidak memakai Emacs, tetapi semoga hal-hal di atas membantu
  • Jadi itu sebabnya belakangan saya tidak menemukan tulisan “memperbaiki 10% bug Emacs”. Rupanya ia sedang membuat ini. Keren, benar-benar ahli Emacs
  • Terlihat keren! Kalau memakai fitur variabel lokal file dan direktori Emacs untuk konfigurasi chart, pengalaman pengguna bisa jadi lebih fleksibel
    Misalnya, saat sedang membuat file data sehingga tidak ingin mengeditnya secara manual sebelum menggambar chart, atau saat ingin mencoba menggambar setiap kali diperlukan dari direktori berisi file data besar tanpa menambahkan header ke tiap file dengan tangan
  • Saat menggambar grafik di org mode, Python dan matplotlib juga bisa dipakai. Bukan hanya Gnuplot
    • API Matplotlib sendiri sudah cukup merepotkan, dan saya tidak yakin membungkusnya dengan wrapper elisp akan membuatnya jadi sesuatu yang nyaman dipakai
      Seperti yang disebut di tulisan asli, besar kemungkinan jumlah kode yang dibutuhkan malah lebih banyak daripada mengimplementasikannya langsung
    • Hal yang selalu mengganggu saya di matplotlib dan gnuplot adalah, tampaknya benar-benar ada perintah atau pemanggilan fungsi tersendiri untuk segala hal
      Untuk mengubah ukuran tick tingkat ketiga pada sumbu Y, seolah harus memanggil sesuatu seperti set_third_level_y_ticks(). Bukan berarti itu buruk, dan mungkin memang tidak terhindarkan, tetapi semuanya terasa diperlakukan secara khusus sehingga kesan ortogonalitas-nya berkurang
    • Ada juga ESS (Emacs Speaks Statistics). Karena menghubungkan R/Julia dengan kuat ke org-mode, kita bisa memakai hal seperti ggplot2 atau makie
      Meski begitu, saya menghargai upaya membuat sesuatu dengan elisp murni
    • R dan library grafik-nya juga bisa dipakai
  • Ini hacking yang proper. Saya terutama suka bagian gradien-nya
    Fakta bahwa plot-plot ini berupa SVG sehingga bisa dibawa ke LaTeX atau browser web juga penting. Yang pertama menjadikannya kandidat yang cukup kuat saat perlu membuat plot untuk disisipkan ke makalah. Hasil yang bagus
  • Ini pertama kalinya saya melihat dua kata “Microsoft Github” ditempelkan secara terang-terangan, dan meskipun sudah beberapa tahun sejak itu menjadi kenyataan, tetap membuat tidak nyaman
    • Saya masih tidak paham mengapa begitu banyak proyek bebas dan open-source masih memakai platform itu. GitHub sangat berhasil membuat orang tidak melihat prefiks Microsoft
      Meski begitu, sekarang Codeberg akhirnya tampaknya mulai mendapat momentum tertentu di antara proyek-proyek bebas dan open-source
    • Karena itu GitHub tampaknya masih berusaha terlihat seperti startup independen lama. Banyak developer independen merasakan hal serupa, dan lebih condong ke nilai kebebasan perangkat lunak daripada nilai pemegang saham atau kapitalisme big tech
      Saya baru saja membuka halaman depan github.com dan mencari “Microsoft” dengan Ctrl-F: hasilnya 0
    • Reaksi saya persis sama. Semoga suatu hari nanti mereka tidak melakukan rebranding menjadi MS GitHub