1 पॉइंट द्वारा GN⁺ 2024-06-28 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • eplot Emacs के अंदर संख्यात्मक डेटा से सरल चार्ट बनाने के लिए एक पैकेज है, जिसकी शुरुआत chart.el और Org/Gnuplot संयोजन की axis labeling और usability सीमाओं से हुई
  • सबसे बड़ी चुनौती Y-axis ticks थी, जिसमें 1·2·5 श्रृंखला के देखने में अच्छे नंबरों के साथ extreme scales और time ranges को स्वाभाविक रूप से संभालना पड़ता है
  • पुराने PHP chart library के अनुभव को Emacs Lisp में लाते हुए SVG-आधारित gradient और dark mode जैसी अभिव्यक्तियाँ लागू की गईं, लेकिन pixel-level processing की जरूरत वाले कुछ effects को छोड़ा गया
  • जब बहुत सारे नंबर वाले buffer में M-x eplot चलाया जाता है, तो chart buffer खुलता है, और headers तथा C-c C-c की मदद से settings को जल्दी बदलकर नतीजा देखा जा सकता है
  • कोड GitHub पर सार्वजनिक है, लेकिन यह एक हफ्ते तक test case-केंद्रित तरीके से जल्दी लिखा गया work in progress कोड है, इसलिए code paths को व्यवस्थित करना और readability सुधारना अभी बाकी है

Emacs के अंदर ही सीधे चार्ट बनाने की ज़रूरत क्यों पड़ी

  • आसान plots बनाने का तरीका लंबे समय से खोज रहे थे, और फ़िल्म ratings पर लेख लिखते समय Emacs के built-in chart.el को आज़माया
  • chart.el Emacs में शामिल है, लेकिन मूल रूप से eieio testing tool से निकली सुविधा होने के कारण इसकी उपयोग-सीमा सीमित है
  • ज़रूरी काम ज़्यादातर किए जा सकते थे, लेकिन खासकर Y-axis display संतोषजनक नहीं था

चार्ट की गुणवत्ता तय करने वाले axis ticks

  • खराब axis display तुरंत नज़र आ जाती है, लेकिन उसे वास्तव में स्वाभाविक बनाना हो तो कई edge cases को सावधानी से संभालना पड़ता है
  • Google Finance भी पहले unnatural axis का इस्तेमाल करता था, जिसमें सबसे बड़े मान को Y-axis के सबसे ऊपर वाले tick पर रखा जाता था और origin की दिशा में समान अंतराल वाली रेखाएँ जोड़ी जाती थीं
    • याद है कि ऐसे charts लगभग 2021 तक मौजूद थे
    • बाद में पूरी साइट को फिर से implement करने पर बेहतर axes मिल गए
  • लगभग 1997 में एक stock brokerage कंपनी में काम करते समय chart library लागू करने का अनुभव था
  • axis tick की समस्या कठिन गणित की समस्या से ज़्यादा, अच्छे दिखने वाले नंबर और exception ranges को ध्यान से चुनने की समस्या के करीब है
    • अच्छे दिखने वाले नंबर आम तौर पर 1, 2, 5 की अलग-अलग scales होते हैं
    • stock charts में $0.00001~$0.00002, 1e9~1e10 जैसी ranges भी आ सकती हैं
    • time axis में year, half-year, quarter, month, week, और month को week units में बाँटने तक पर विचार करना पड़ता है

जहाँ मौजूदा tools को जस का तस इस्तेमाल करना मुश्किल है

  • पहले बनाई गई PHP chart library web server पर output बनाने के लिए सुविधाजनक है, लेकिन Emacs के अंदर नंबरों के साथ काम करते हुए प्रयोग करने के लिए उपयुक्त नहीं है
  • Excel और Jupyter Notebook की लोकप्रियता की तरह, डेटा को interactive तरीके से समायोजित करते हुए मनचाहे chart के करीब पहुँचने की प्रक्रिया महत्वपूर्ण है
  • Org भी plot सुविधा देता है, लेकिन Org plot backend के रूप में Gnuplot का इस्तेमाल करता है
  • Gnuplot आम तौर पर उपयोगी है, फिर भी उदाहरण में Y-axis number format जैसे default बदलने हों तो यह बोझिल हो सकता है

eplot का implementation और rendering features

  • chart नाम पहले से इस्तेमाल में था, इसलिए नए पैकेज का नाम eplot रखा गया
  • पुराने PHP library की सारी features लाने का इरादा नहीं था, लेकिन implementation शुरू करते ही अधिकांश चीज़ें फिर से बनानी पड़ीं
  • नए version में dark mode जैसी features भी शामिल हैं
  • PHP library के gradients हाथ से लिखे गए तरीके पर आधारित थे, और याद है कि उसमें GIF colormap resources जैसी चीज़ें भी शामिल थीं
  • Emacs Lisp version SVG का इस्तेमाल करता है
    • SVG gradients को support करता है, इसलिए polygon और gradients को मिलाकर मिलती-जुलती effect बनाई जाती है
    • PHP original के समान परिणाम प्राप्त किए जा सकते हैं
  • एक और अलग तरह का gradient implement नहीं किया गया
    • उसके लिए pixel-level या कम से कम line-level implementation की जरूरत है, इसलिए यह कठिन है
    • संभव है कि mathematical calculations की जरूरत पड़े, इसलिए इसे छोड़ा गया

उपयोग प्रवाह और settings का तरीका

  • बहुत सारे नंबर वाले buffer में M-x eplot चलाने पर अलग buffer में chart दिखता है
  • chart को मनचाहे रूप में समायोजित करने के लिए headers की अवधारणा लाई गई
  • ज़्यादातर उपयोगी options को headers से नियंत्रित किया जा सकता है
    • headers जोड़ने के बाद C-c C-c दबाएँ तो परिणाम तुरंत देखा जा सकता है
    • इसे आसान बनाने के लिए eplot mode भी है
  • सरल उदाहरण छोटे chart format के रूप में दिए गए हैं, और लेख की पहली image में दिखी कई variations भी ज़्यादातर headers से बनाई गई हैं

सार्वजनिक स्थिति और बाकी काम

  • विभिन्न संभावनाओं को दस्तावेज़ित करने के लिए README.md लिखा गया
  • कोड Microsoft Github पर सार्वजनिक है
  • मौजूदा स्थिति अभी भी work in progress है
  • बुनियादी रूप से यह कुछ हद तक उपयोगी हो सकता है, लेकिन एक हफ्ते तक लगातार बदलते हुए लिखे जाने के कारण इसकी स्थिरता के बारे में निश्चित रूप से कुछ कहना मुश्किल है
  • कोड test cases के हिसाब से अल्प-प्रभावी तरीके से लिखा गया है, इसलिए सफाई की जरूरत है
    • कई code paths को एकीकृत करना होगा
    • code readability बढ़ानी होगी
  • फिलहाल आराम के लिए इसे मौजूदा स्थिति में push किया गया है, इसलिए वास्तविक उपयोगकर्ताओं को अभी सावधानी बरतनी होगी

1 टिप्पणियां

 
GN⁺ 2024-06-28
Hacker News की राय
  • बढ़िया! gradient डालने का तरीका सरल होते हुए भी चतुर है
    मुझे यह क्षेत्र पसंद है, इसलिए सामान्य सलाह के तौर पर जोड़ना चाहूँगा: पहले Our World in Data में Max Roser और Hannah Ritchie के साथ Grapher library(https://github.com/owid/owid-grapher) engineer के रूप में काम करते हुए मैंने अच्छे chart बनाने के बारे में बहुत कुछ सीखा
    उदाहरणों को देखकर लगता है कि title·subtitle·caption को हल्के में न लेना बेहतर होगा। आपने पहले ही “simple header” बना रखा है, इसलिए इन्हें जोड़ना आसान होगा, और कुछ छोटे वाक्य बड़ा फर्क ला सकते हैं। Cole Nussbaumer Knaflic की “Storytelling with Data” भी recommend करता हूँ
    अगर इसे आगे विकसित करते रहे, तो किसी दिन आप data flow library और DSL भी जोड़ना चाहेंगे। R के Hadley Wickham dplyr सबसे अच्छे थे, और मेरे Ohayo tool तथा OWID Grapher की CoreTable library(https://github.com/owid/owid-grapher/tree/master/packages/%4...) में भी मैंने उसी approach से प्रेरणा ली। Jeffrey Heer की अपेक्षाकृत नई library Arquero(https://idl.uw.edu/arquero/) भी इसी तरह की है
    हाल में मैं Mike Bostock के नए tool Plot(https://observablehq.com/plot/) को देख रहा हूँ; अभी बस एक-दो दिन ही इस्तेमाल किया है, लेकिन उम्मीद जगाता है। मैं अभी Emacs इस्तेमाल नहीं करता, फिर भी आशा है कि ऊपर की बातें मददगार होंगी
  • तो इसीलिए हाल का “Emacs bugs का 10% fix” वाला लेख नहीं मिल रहा था। असल में आप यह बना रहे थे। शानदार, आप सचमुच Emacs के उस्ताद हैं
  • शानदार लग रहा है! chart settings के लिए Emacs की file और directory local variables feature इस्तेमाल करें तो user experience और flexible हो सकता है
    उदाहरण के लिए, आप कोई data file generate कर रहे हों और chart बनाने से पहले उसे manually edit नहीं करना चाहते हों, या बड़े data file directory में हर file में हाथ से header जोड़े बिना जरूरत पड़ने पर उसे plot करके देखना चाहते हों
  • org mode में graph बनाते समय Python और matplotlib भी इस्तेमाल कर सकते हैं। सिर्फ Gnuplot ही विकल्प नहीं है
    • Matplotlib की API पहले से ही काफी असुविधाजनक है; उसके ऊपर elisp wrapper चढ़ाने से वह उपयोग में अच्छी चीज बन जाएगी, ऐसा नहीं लगता
      मूल लेख में जैसा कहा गया है, यह ऐसा मामला हो सकता है जहाँ जरूरी code की मात्रा सीधे implement करने से भी ज्यादा हो जाए
    • matplotlib और gnuplot में जो चीज हमेशा खटकती है, वह यह है कि सचमुच हर चीज के लिए अलग command या function call लगता है
      Y-axis के third-level tick size को बदलना हो तो set_third_level_y_ticks() जैसा कुछ call करना पड़े। यह जरूरी नहीं कि बुरा हो, और शायद ऐसा होना अपरिहार्य भी हो, लेकिन सब कुछ special-case किया हुआ लगता है, इसलिए orthogonality कम महसूस होती है
    • ESS(Emacs Speaks Statistics) भी है। यह org-mode के साथ R/Julia को मजबूती से जोड़ता है, इसलिए ggplot2 या makie जैसी चीजें इस्तेमाल कर सकते हैं
      फिर भी pure elisp में कुछ बनाने की कोशिश का सम्मान है
    • R और उसकी graph libraries भी इस्तेमाल की जा सकती हैं
  • यह असली hacking है। खासकर gradient वाला हिस्सा पसंद आया
    ये plots SVG हैं, इसलिए इन्हें LaTeX या web browser में ले जाया जा सकता है—यह भी बड़ी बात है। पहला वाला paper में डालने के लिए plots बनाने में काफी मजबूत उम्मीदवार बनता है। अच्छा काम है
  • Microsoft Github” ये दो शब्द पहली बार इतनी साफ तरह से साथ लगे देखे, और भले ही यह कई सालों से सच हो, फिर भी मन असहज हो गया
    • अब भी इतने सारे free और open-source projects उस platform का इस्तेमाल करते हैं, यह समझ नहीं आता। GitHub लोगों को Microsoft prefix न दिखाने में बहुत सफल रहा है
      फिर भी अब लगता है कि Codeberg को आखिरकार free और open-source projects के बीच कुछ traction मिलने लगा है
    • इसलिए लगता है GitHub अब भी खुद को पुराने independent startup जैसा दिखाने की कोशिश करता है। कई independent developers भी ऐसा ही महसूस करते हैं, और shareholder value या big-tech capitalism की तुलना में software freedom वाले मूल्यों की ओर अधिक झुकते हैं
      अभी github.com का home page खोला और Ctrl-F से “Microsoft” खोजा, तो 0 results मिले
    • मेरी भी बिल्कुल यही प्रतिक्रिया थी। आशा है कि किसी दिन इसे MS GitHub के रूप में rebrand न किया जाए