- Wandering Thoughts और CSpace के कुछ हिस्से पुराने browser User-Agent पर block page दिखाते हैं, जब वह crawler-रोधी नियमों में फंस जाता है
- 2025 की शुरुआत में बड़े पैमाने पर crawlers बढ़े, और कुछ का उद्देश्य LLM training के लिए data collection जैसा दिखता है; ये पुराने Chrome User-Agent का उपयोग करते हैं
- site load कम करने के लिए पुराने browser User-Agent को block करने का प्रयोग चल रहा है, और इसमें सामान्य users भी false positive के रूप में फंस सकते हैं
- अगर latest browser में भी block हो रहा है, तो Toronto University के personal page के जरिए संपर्क किया जा सकता है, और browser तथा सटीक User-Agent string भेजनी चाहिए
- archive.* श्रृंखला को पुराने Chrome User-Agent और distributed IPs की वजह से अलग पहचानना मुश्किल है, इसलिए Wandering Thoughts archive के लिए archive.org की सिफारिश की जाती है
block page क्यों दिखता है
- Wandering Thoughts या CSpace के कुछ हिस्सों तक पहुंचते समय, अगर browser version को site के crawler-रोधी नियम संदिग्ध मानते हैं, तो block page दिखाया जाता है
- 2025 की शुरुआत तक बड़े पैमाने पर crawlers बढ़ गए हैं, और कुछ LLM training के लिए data collection जैसे लगते हैं; वे पुराने Chrome User-Agent सहित कई पुराने browser User-Agent का उपयोग करते हैं
- site load कम करने के लिए पुराने browser User-Agent को block करने का प्रयोग चल रहा है, और सामान्य users भी इन नियमों में फंस सकते हैं
- अगर आप latest browser इस्तेमाल कर रहे हैं और फिर भी block हो रहे हैं, तो Toronto University personal page के जरिए संपर्क किया जा सकता है, और संभव हो तो उपयोग में लिया जा रहा browser तथा सटीक User-Agent string साथ में भेजनी चाहिए
user के अनुसार ध्यान देने योग्य बातें
-
Inoreader users
- Inoreader का feed fetcher खुद block target नहीं है, और वास्तव में feeds नियमित रूप से fetch कर रहा है
- Inoreader पुराने browser HTTP User-Agent या सचमुच पुराने browser से feed या page fetch करने के बाद, उसके परिणामस्वरूप मिला block page user को दिखा सकता है
- latest HTTP request result इस्तेमाल किए गए HTTP User-Agent के अनुसार बदल सकते हैं; संबंधित जानकारी HTTPResultsAndUserAgents में है
-
Vivaldi users
- चल रहे attack की वजह से latest Vivaldi भी अगर Google Chrome के रूप में पहचाना जाए तो block हो सकता है
- Vivaldi को Google Chrome नहीं बल्कि Vivaldi के रूप में पहचानने के लिए "User Agent Brand Masking" setting बदलनी पड़ सकती है
-
archive.* users
- archive.today, archive.ph, archive.is आदि के जरिए यह block page दिख सकता है
- archive.* पुराने Chrome User-Agent का उपयोग करता है, बहुत फैले हुए IP blocks से crawling करता है, और कुछ IPs में googlebot IP होने का दावा करने वाली forged reverse DNS entries होती हैं, इसलिए इसे malicious actors से अलग करना कठिन है
- Wandering Thoughts को archive करना हो, तो बेहतर काम करने वाले archive crawler archive.org का उपयोग करने की सिफारिश की जाती है
1 टिप्पणियां
Lobste.rs की रायें
कुछ भाषाओं में Eglot को ऑटो-स्टार्ट करने की सलाह बेहद ख़तरनाक हो सकती है। कई भाषाओं के LSP सर्वर untrusted code के साथ सुरक्षित रूप से इस्तेमाल नहीं किए जा सकते, और attacker के नियंत्रण वाले Rust या Elixir प्रोजेक्ट की फ़ाइल सिर्फ़ खोलने भर से भी मशीन compromise हो सकती है
अगर भाषा के लिए कोई ऐसा LSP सर्वर नहीं है जिसे सुरक्षित माना जाता हो, तो LSP auto-activation से बचना चाहिए। संदर्भ: https://rust-analyzer.github.io/book/security.html
git statusभी attack surface बन सकता है: https://github.com/justinsteven/advisories/…फ़र्क बस इतना है कि ऊपर वाले मामले में exploit repository के भीतर होना चाहिए, जबकि LSP में dependency side से भी समस्या आ सकती है। फिर भी अगर आदतन LSP चालू रखने की आदत पड़ जाए, तो warnings के प्रति सुस्त न होना मुश्किल लगता है
rust-analyzerprocess कई मिनट तक चल सकता है, और 1GB से बड़ाtarget/debug/directory बन सकता हैcargo buildचलाते ही मामला काफ़ी हद तक वैसा ही हो जाता है। बेशक LSP auto-load और user द्वारा साफ़ तौर पर चलाया गया command में बड़ा अंतर है, लेकिन व्यवहार में यह अंतर सोचे से कम भी हो सकता हैlsp-modeकी तरह activation से पहले पूछना और project को allowlist में जोड़ना बेहतर है। अगर पहले से कोई “अपने आप चलने” वाला hook है, तोread-from-minibufferसे पहले “क्या आप इस folder पर भरोसा करते हैं?” पूछने लायक बनाना लगभग 10 lines में हो सकता है, औरprojectileजैसी चीज़ से base directory तय कर लें तो सुरक्षा के ज़्यादातर फ़ायदे मिल जाते हैंमेरी setup
lsp-modeकी allowlist का इस्तेमाल करती है, लेकिन हर session में उसे साफ़ कर देती है, ताकि Emacs दोबारा खोलने पर हर project के लिए फिर से सहमति देनी पड़े। लगता है मैंने मूल रूप से यह performance की वजह से किया था, क्योंकिlsp-modeकभी-कभी किसी खास project को खोलने से पहले ही कई processes शुरू कर देता था। सुरक्षा जोखिम वास्तविक है, लेकिन ठीक-ठाक workflow बनाना बहुत मुश्किल भी नहीं हैEglot में सबसे परेशान करने वाली बात यह है कि यह ज़्यादातर commands को functions के रूप में expose नहीं करता, बल्कि उन्हें
xrefजैसे Emacs interfaces के ऊपर define करता है। Clojure जैसी स्थिति में, जहाँCIDERऔरclojure-lspदोनों केxrefbackend मौजूद हों, वहाँ आम तौर परCIDERको प्राथमिकता मिलती है क्योंकि वही loaded code की असली runtime state जानता हैclojure-lspका static analysis ख़ासकर remote REPL workflow में sync से बाहर हो सकता है।lsp-modeमें go to definition जैसी features को command के रूप में सीधे call करते हुए भीxrefइस्तेमाल किया जा सकता है, लेकिन Eglot में किसी खासxrefbackend को हटाना काफ़ी झंझट भरा है।lsp-modeके दूसरे commands भी Eglot में नहीं हैं, जबकि वे असल मेंxrefजैसे Emacs integration points के ज़रिए दिए जा सकते हैंमैंने
lsp-modeएक बार इस्तेमाल किया था, लेकिन उसमें इतने उलझाऊ popups और notifications आते थे कि मैंने तुरंत हटा दिया। Eglot एक कहीं ज़्यादा शांत LSP अनुभव देता हैइसे चालू रहने दें और जब तैयार हों तब features इस्तेमाल करें। ~cks का उलटी दिशा से आना और रास्ते में अलग-अलग tips व alternatives बताना दिलचस्प लगा
lsp-modeमें कई features बंद करके उसे काफ़ी शांत interface की तरह इस्तेमाल कर रहा हूँ। Eglot पर जाने की कोशिश की थी, लेकिन उसमें वह integration नहीं दिखा जो मैं चाहता था, इसलिए तब आगे कोशिश नहीं कीमैं सच में ऐसा LSP server चाहता हूँ जो बहुत बड़े repositories संभाल सके। यही चीज़ बार-बार सीमा बनकर सामने आई है, और कभी-कभी लगता है कि शायद ऐसा कुछ बनाना पड़े जो source indexing ज़्यादातर एक बार में कर ले और फिर उसे कई LSP-स्टाइल कामों में reuse करे, लेकिन डर है कि कहीं यह फिर एक और बहुत बड़ा काम न बन जाए
Emacs के लिए LSP clients में Eglot और
lsp-modeसबसे मशहूर हैं, लेकिन lspce और lsp-bridge जैसे alternatives भी हैंमैं कई सालों से Eglot संतोष के साथ इस्तेमाल कर रहा हूँ, लेकिन इसमें एक design limitation है जो आगे और बड़ी समस्या बन सकती है। यह प्रति buffer एक client मानकर चलता है; जब Eglot बनाया गया था तब यह उचित था, लेकिन अब एक ही buffer में कई LSP servers चलाने की ज़रूरत बढ़ती जा रही है। मौजूदा recommendation है कि किसी अलग program को LSP multiplexer की तरह इस्तेमाल किया जाए
4 दिन पहले मैंने Python के लिए
lsp-modeसे Eglot पर स्विच किया और संतुष्ट हूँअपनी मौजूदा configuration का एक minimal version यहाँ सार्वजनिक किया है: https://discuss.afpy.org/t/configuration-emacs-minimale-en-2026/3001
हाँ, completion को लेकर कुछ असुविधा है। उदाहरण के लिए
foo<tab><tab>दबाने पर, जबकि current scope में सही symbol मौजूद हो,basedpyrightकभी-कभी कोई अजीब auto-import कर देता है, और अभी तक मुझे ऐसा तरीका नहीं मिला जो सिर्फ़ सबसे लंबी common string तक completion करे। इसके अलावा यह काफ़ी अच्छा हैमुझे उन लोगों से जलन होती है जो Emacs को modern IDE की तरह इस्तेमाल कर लेते हैं। मैं Emacs key bindings इस्तेमाल करता हूँ, लेकिन 6–8 घंटे लगाने पर भी Emacs को IDE की तरह काम नहीं करा पाया
पहले Linux और FreeBSD development environment में TypeScript की जगह इस्तेमाल होने वाले FB Flow के हिसाब से सेट करने की कोशिश की थी और छोड़ दिया, और पिछले वीकेंड Windows पर tree-sitter के साथ एक full-featured Python environment बनाने की कोशिश की, वह भी छोड़नी पड़ी। सेट करने के लिए बहुत कुछ है, और tree-sitter parsers जैसी DLLs भी अलग से बहुत डाउनलोड करनी पड़ती हैं, इसलिए इसे एक ढंग का IDE बनाने के लिए ज़रूरत से ज़्यादा चीज़ें चाहिए। अब मैं इसमें समय नहीं लगाना चाहता, लेकिन कभी-कभी किसी भी terminal में
emacs -nwचलाते ही परिचित editing environment मिल जाना अच्छा लगता हैfido-vertical-mode,which-key-mode,global-completion-preview-mode,yasnippet,eglot-ensure,basedpyrightजैसी minimal configuration से शुरुआत करना काफ़ी हैअगर
basedpyrightpath में उपलब्ध है, तो tree-sitter syntax के बिना भी ठीक-ठाक completion और syntax highlighting मिल जाती है। यह मेरी पूरी setup का न्यूनतम किया हुआ version है, और पूरी setup my full config में हैdoom emacsआज़माने लायक है। इसे configure करना बहुत आसान है और default state में भी ज़्यादातर चीज़ें ठीक चलती हैं। अगरevil-modeपसंद न आए तो Emacs key bindings पर वापस भी जा सकते हैं