1 पॉइंट द्वारा GN⁺ 3 시간 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Emacs, operating system खुद होने के बजाय, kernel के ऊपर applications और utilities को coordinate करता है, और file system, network व external programs का उपयोग करके अलग-अलग services का client बन जाता है
  • Client के लिए ज़रूरी UI, communication layer और local data store को minibuffer, buffer, URL, TCP/UDP, JSON, SQLite जैसी built-in libraries से बनाया जा सकता है
  • Dynamic language Emacs Lisp(Elisp), चलते समय Elisp functions और shell commands को जोड़कर, Emacs जिन capabilities तक पहुंच सकता है उन्हें flexible तरीके से coordinate करता है
  • उदाहरण वाला wttr command location input लेकर wttr.in को HTTP request भेजता है, JSON से area, temperature और weather निकालकर minibuffer में दिखाता है और kill ring में भी save करता है
  • पूरा wttr.el, cloc के हिसाब से 67 lines का है; और अगर network request व JSON processing को Python जैसे command-line tools पर छोड़ दिया जाए, तो shell command को ही service मानने वाला और छोटा Elisp client भी बनाया जा सकता है

Operating system के ऊपर services coordinate करने वाला Emacs

  • Emacs को operating system कहना सटीक नहीं है, लेकिन operating system kernel के ऊपर applications और utilities को coordinate करने की उसकी क्षमता के कारण यह तुलना की जाती है
  • File system और network जैसी operating system services तक built-in features से पहुंच सकता है और दूसरे programs भी चला सकता है, इसलिए Emacs के अंदर client behavior को मौके पर compose करना आसान है
  • कई client modes के जरिए बहुत-से computing tasks संभाले जा सकते हैं, इसलिए user के “सिर्फ Emacs के अंदर ही रहने” का विचार भी संभव हो जाता है

Request और response से समझा client-server model

  • Client-server model एक interaction pattern है, जिसमें resources देने वाली service और उन्हें request करने वाला client काम बांटते हैं
    • Client request भेजता है
    • Server request process करने के बाद response लौटाता है
  • Request और response से बनी transaction network के जरिए या एक ही system के अंदर locally की जा सकती है
  • Network-based model REST style software architecture में व्यापक रूप से विकसित हुआ है

Emacs client बनाने वाले तीन हिस्से

  • सामान्य client ये तीन हिस्से संभालता है
    • UI: जरूरत के अनुसार user input और output संभालता है
    • Client Edge: service से communication करता है; network client में यह भूमिका network subsystem निभाता है
    • Local Database: server से exchange या sync किए जाने वाले data को represent करता है; management का具体 तरीका implementation requirements पर निर्भर करता है
  • User interface बनाना

  • Service communication और data conversion

    • Service से जुड़ने वाले client edge में इन features का इस्तेमाल किया जा सकता है
    • Serialization और deserialization के लिए built-in parsers का इस्तेमाल होता है
  • Local data management

    • Server data के local representation के लिए Elisp collections का उपयोग किया जा सकता है
    • अगर persistent local storage चाहिए, तो SQLite इस्तेमाल किया जा सकता है
    • वास्तविक client की complexity requirements के अनुसार बदलती है, और अगर heavy processing संभालने वाली मौजूदा command-line utility हो, तो उसे shell call से access की जाने वाली service के रूप में फिर से compose किया जा सकता है

Elisp से functions को जोड़ने का तरीका

  • ऊपर की सभी libraries Emacs Lisp(Elisp) से access की जा सकती हैं
  • Elisp एक dynamic programming language है जो runtime में high-level ad-hoc composition की अनुमति देती है
  • Elisp functions से लेकर shell commands तक, Emacs जिन actions का उपयोग कर सकता है उन्हें जोड़कर complex flows coordinate किए जा सकते हैं

wttr.in weather client implementation

  • wttr.in console-centric weather forecast web service है और JSON output support करती है
  • Emacs के लिए wttr command इस क्रम में काम करता है
    1. User से location input लेता है
    2. wttr.in request URL बनाता है
    3. HTTP request भेजता है
    4. JSON response process करता है
    5. Result minibuffer में दिखाता है और kill ring में save करता है
    6. Processing के दौरान error हो तो minibuffer में error message दिखाता है
  • Request URL बनाना

    • wttr--request-url, https://wttr.in को base URL के रूप में इस्तेमाल करता है
    • Input की गई location में spaces को + से बदलता है और /<location>?0&format=j1 form की query बनाता है
    • तैयार URL बाद में JSON fetch function को दिया जाता है
  • HTTP request और JSON parsing

    • fetch-json-as-hash-table, url-retrieve-synchronously से URL को synchronously fetch करता है
    • अगर data नहीं मिलता, तो Failed to fetch data from <URL> error पैदा करता है
    • Response buffer में HTTP metadata header के बाद जाता है, फिर json-parse-buffer से बाकी content को Elisp hash-table में convert करता है
    • Processing पूरी होने पर downloaded network buffer को हमेशा हटाता है ताकि memory leak रोका जा सके
  • Weather message compose करना

    • wttr--report-message JSON data से ये values निकालता है
      • सबसे नज़दीकी area का नाम
      • Region
      • Country
      • मौजूदा Celsius temperature temp_C
      • मौजूदा Fahrenheit temperature temp_F
      • Weather description weatherDesc
    • खाली न होने वाले location elements को comma से जोड़ता है और location: Celsius, Fahrenheit weather description format का result बनाता है
    • पूरा implementation wttr.el source में देखा जा सकता है

Command-line tools को भी service की तरह इस्तेमाल करना

  • Emacs API high-level abstraction देती है, और HTTP request व JSON processing को directly implement करने वाला wttr.el भी cloc measurement के हिसाब से 67 lines का है
  • एक और आसान alternative यह है कि असली network request और JSON processing को weather नाम की Python script पर छोड़ दिया जाए
    • Elisp का weather command user से location input लेता है
    • Location को argument के रूप में जोड़कर weather shell command बनाता है
    • shell-command-to-string से command चलाता है
    • Returned result को kill ring में save करता है और minibuffer में दिखाता है
  • इस setup में request लेने वाली service shell command बन जाती है और Elisp function client की भूमिका निभाता है
  • Elisp की dynamic nature की वजह से Elisp libraries और command-line utilities को जरूरत के अनुसार जोड़ा जा सकता है, और यही integration capability Emacs के अंदर हर चीज़ को service की तरह handle करना संभव बनाती है

1 टिप्पणियां

 
GN⁺ 3 시간 전
Hacker News की राय
  • Lisp Machine परिवार मुख्यधारा में जगह नहीं बना पाया, इसलिए Emacs ऑपरेटिंग सिस्टम जैसा दिखता है
    “Symbolics Lisp Machine demo”
    https://www.youtube.com/watch?v=o4-YnLpLgtk
    “Emacs and Lisp”
    https://funcall.blogspot.com/2025/04/emacs-and-lisp.html
    Lucid ने शुरुआती LSP विचारों में से एक को लागू करने की कोशिश में Emacs को XEmacs के रूप में fork किया था, और उस समय की ज्यादातर सुविधाएं अब फिर से Emacs में merge हो चुकी हैं
    https://dreamsongs.com/Cadillac.html
    “Lucid Energize Demo”
    https://www.youtube.com/watch?v=pQQTScuApWk

    • ऑपरेटिंग सिस्टम एक virtual machine है जिसे कई प्रोग्राम साझा कर सकें, इसके लिए बनाया जाता है। आम तौर पर यह जिस instruction set architecture (ISA) पर चलता है, उसका बड़ा हिस्सा expose करता है, लेकिन Inferno, Taos, AS/400 जैसे अपवाद भी हैं
    • अगर LISP मशीन सफल भी हो जाती, तब भी उसके ऊपर चलने वाला editor ऑपरेटिंग सिस्टम नहीं बन जाता। platform और ऑपरेटिंग सिस्टम को मिलाने पर web browser या यहां तक कि Roblox को भी ऑपरेटिंग सिस्टम कहा जा सकता है
  • client, server, request को काफी व्यापक रूप से define करें, तो किसी भी चीज़ को client/server architecture में फिट किया जा सकता है। यह उस कोशिश जैसा है जिसमें सिर्फ इसलिए Emacs को Unix philosophy का पालन करने वाला बताया जाता था, क्योंकि LISP function एक काम अच्छी तरह करता है
    इस बात पर ज्यादातर लोग सहमत हो सकते हैं कि Emacs LISP मशीन के विचारों का अनुसरण करता है, और उसके ऊपर व्यावहारिक रूप से जो चाहें implement किया जा सकता है। यह CLI tools के साथ शानदार तरीके से integrate होता है, लेकिन इसे client/server कहकर क्या हासिल होता है, यह स्पष्ट नहीं है
    कई दशकों में इसने अलग-अलग trends से गुजरते हुए features absorb किए हैं, और इसके अंदर अब लगभग इस्तेमाल न होने वाला CEDET semantic analysis engine भी है। बाद में LSP आया, और अब agents का दौर है; Emacs agents के लिए frontend के रूप में भी काफी अच्छा है

    • Emacs Unix दुनिया में शरण लेने वाला LISP refugee है। यह Unix philosophy नहीं, बल्कि LISP philosophy का पालन करता है, लेकिन Unix के साथ अच्छी तरह integrate होता है
    • पहले ज्यादातर IDEs का अपना semantic analysis engine होना आम बात थी। मुझे याद है कि पहला Java language server भी Eclipse के Java semantic analysis engine से अलग होकर निकला था
  • Emacs को 25 साल से ज्यादा इस्तेमाल किया, लेकिन पिछले साल जिस कंपनी में नौकरी बदली, वहां Emacs खास तौर पर जिन कामों के लिए अच्छी तरह फिट बैठता है, उनमें भी उसे इस्तेमाल करने नहीं दिया गया। वजह यह थी कि सभी team members को एक ही tools इस्तेमाल करने चाहिए, और मैं दूसरों को Emacs पर switch कराने में असफल रहा
    अब हर काम के लिए अलग-अलग single-purpose tools कहीं ज्यादा inefficient तरीके से इस्तेमाल कर रहा हूं, और साथ में नए UI और key mappings भी लगातार सीख रहा हूं

    • कंपनी बड़ी होने के साथ installed software को control करने लगी, और लगता है Microsoft Intune से install allow/block manage किया जा रहा है। Emacs अब इस्तेमाल नहीं कर पाऊंगा, इस डर से laptop update या replacement भी टाल रहा हूं
      administrator कहेगा कि नए project में सब Visual Studio Code इस्तेमाल करें, लेकिन जिस consumption model का उपयोग हो रहा है, उसे VSCode भी support नहीं करता। Git और deployment procedure मिल जाएं, तो editor हर कोई वही चुन सकता है जिसमें वह अच्छा है; लेकिन शायद जवाब मिलेगा कि यह Microsoft द्वारा supported open source नहीं है, इसलिए risky है और कंपनी द्वारा validate न किया गया software है
      Emacs मेरा रोज़ का core tool है, इसलिए अगर इसे ban किया गया तो resign करने का सोचूंगा। administrator समझने या logically judge करने की कोशिश नहीं करता, बस किसी दूसरे IT department के निर्देशों का पालन करता है
    • क्या सभी team members से telnet इस्तेमाल करवाना और ssh ban करना भी जायज़ माना जाएगा? अहम बात यह है कि Emacs इस्तेमाल करने की अनुमति न पूछें, बस इस्तेमाल करें
      अगर कंपनी ने general-purpose text editor तय किया है, तो जांचना चाहिए कि Notepad चलाने पर भी समस्या है या नहीं, और क्या personal to-do management tool तक तय किया गया है। ऐसी category खोजें जिसे Emacs कर सकता हो और जिसके लिए कंपनी ने अभी tool तय न किया हो, और उसी उपयोग के लिए इसे install करें
    • यह वैसा ही logic है जैसे अलग-अलग personalities को manage करने के लिए हर व्यक्ति से अलग व्यवहार करना पड़ता है, जो inefficient है, इसलिए सभी team members की frontal lobotomy कर दी गई
    • अगर दूसरे tools में भी Emacs जितनी freedom और customizability होती, तो Emacs users भी सारा काम उसी में ठूंसने की कोशिश नहीं करते। बात यह नहीं कि Emacs हमेशा superior है, बल्कि दूसरे tools ज्यादा restrictive हैं और उनकी self-documentation कमजोर है
    • यह दावा क्यों सही है कि सभी team members को एक ही tools इस्तेमाल करने चाहिए, समझ नहीं आता
  • Emacs एक platform है, और ऑपरेटिंग सिस्टम भी कई platforms में से एक है। platform software layer है जिसे उसके ऊपर नई चीज़ें बनाने के लिए design किया जाता है, इसलिए पूछना चाहिए कि जिस Y को बनाना है उसके लिए कौन-सा platform X उपयुक्त है
    मेरे लिए X अक्सर Emacs होता है, लेकिन Racket या Rust भी हो सकता है। अगर कोई tool application होने के साथ अच्छा platform भी है, तो उसमें simple application की तुलना में ज्यादा learning investment करना worth it है

  • Emacs को पर्याप्त इस्तेमाल करके “Emacs एक ऑपरेटिंग सिस्टम है” वाली बात को joke नहीं, बल्कि वास्तव में believe करने योग्य concept के रूप में समझने का क्षण career का अहम turning point बन गया

    • पहले से ऑपरेटिंग सिस्टम भी था और programming भी कर सकते थे, इसलिए सवाल है कि क्या Emacs ने सच में कोई नई क्षमता दी। Emacs IDE या general-purpose automation execution environment नहीं, बल्कि text editor है; MSPaint में Lisp जोड़ देने से वह अचानक कोई महान tool बन जाएगा, यह logic समझना मुश्किल है
  • org mode आज़माने के लिए कुछ साल पहले Emacs शुरू किया था, और इसकी अत्यधिक flexibility के कारण इस्तेमाल जारी रखा

    • कुछ समय तक Spacemacs इस्तेमाल किया, लेकिन अब Keychron G6 Pro मिल गया है जिसमें Caps Lock को reprogram किया जा सकता है, इसलिए अब सचमुच अपना init.el खुद configure करने का सोच रहा हूं
  • Emacs text editor embedded वाले programming environment के ज्यादा करीब है। कुछ Smalltalk images जैसा समझें, तो यह काफी दिलचस्प tool है

  • Emacs ऑपरेटिंग सिस्टम नहीं, बल्कि shell के ज्यादा करीब है, लेकिन shell की अवधारणा खुद ही व्यापक रूप से समझी नहीं जाती

    • अगर shell को दूसरे tools इस्तेमाल करने का माध्यम माना जाए, तो vi बल्कि shell के ज्यादा करीब है। क्योंकि कई features को :.! के जरिए दूसरे standard Unix programs पर छोड़ना पड़ता है
      इसके उलट Emacs ऑपरेटिंग सिस्टम की तरह तरह-तरह की features को एक विशाल distribution में शामिल करता है
  • Emacs न इस्तेमाल करने वाले लोगों को दिखाने लायक एक छोटा introductory video हाल में मिला
    https://www.youtube.com/watch?v=mJZDmO5yOxE

    • Anon Emoose का init.el सच में जानने की उत्सुकता हो रही है
  • Emacs को खुद client और server के रूप में चलाया जा सकता है। emacs --daemon से server शुरू करने के बाद emacsclient से connect करें, तो terminal और GUI के सभी instances वही server इस्तेमाल करते हैं और खुले files तथा buffers share करते हैं
    अफसोस, यह केवल local पर काम करता था; Emacs server socket को ssh से forward करके remote client से connect करने की कोशिश की, लेकिन असफल रहा

    • पीछे मुड़कर देखें तो emacsclient नाम अच्छा नहीं था। 2026 में Emacs से पहली बार परिचित होने वाला व्यक्ति आसानी से उम्मीद कर सकता है कि REST client की तरह client और server की execution state network के जरिए synchronize होगी
      यहां client और server का मतलब Unix local domain, यानी file-system socket के जरिए client द्वारा simple control commands भेजने वाली संरचना है। बाद में network sockets का support भी आया, लेकिन client जो भेजता है वह अब भी सिर्फ simple control commands ही हैं
    • socket forwarding नहीं होती, लेकिन अगर X11 इस्तेमाल कर रहे हैं, तो ssh -X से remote Emacs का frame local X server पर दिखाया जा सकता है। हालांकि non-PGTK GTK build में नया frame बंद करते समय remote Emacs crash हो सकता है, इसलिए सावधान रहें
    • उत्सुकता है कि socket forwarding fail होने की वजह जांची गई थी या नहीं