2 पॉइंट द्वारा GN⁺ 3 시간 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • headless Chrome से पेज रेंडर करके, इंसान को दिखने वाला अंतिम DOM स्नैपशॉट लिया जाता है; फिर सारा JavaScript हटाकर CSS·इमेज·फ़ॉन्ट को लोकल पाथ पर डाउनलोड किया जाता है, ताकि बिना कोड के चलने वाली स्थिर कॉपी बन सके
  • "Save As" से सेव किए गए पेज समय के साथ खाली स्क्रीन, रुका हुआ स्पिनर, या गायब analytics सर्वर से कनेक्ट करने की कोशिश जैसी वजहों से टूट जाने की समस्या का समाधान
    • ट्रैकिंग, नेटवर्क कॉल, या अप्रत्याशित व्यवहार के बिना, डिस्क से सीधे खुलने वाली .html फ़ाइल प्रदान करता है
  • breadth-first crawling के ज़रिए robots.txt पढ़ता है, sitemap.xml से शुरुआती बिंदु तय करता है, और seed host के भीतर ही रहता है
    • idempotent गुण के कारण http·https या trailing slash होने-न होने से फ़र्क नहीं पड़ता, वही पेज केवल एक बार लाया जाता है
    • Ctrl-C पर स्थिति सहेजता है और दोबारा चलाने पर वहीं से जारी रखता है; --refresh से फिर से रेंडर करता है, --force से नई शुरुआत करता है
  • --max-pages, --max-depth, --scope-prefix, --subdomains, --scroll, --workers आदि crawl scope और behavior control flags उपलब्ध
  • kage pack से कॉपी को एक फ़ाइल में पैक किया जा सकता है; विकल्प हैं ZIM archive या साइट की तरह चलने वाला standalone executable
    • ZIM, Kiwix ecosystem के साथ संगत है, इसलिए kiwix-serve या Kiwix desktop·mobile app में भी देखा जा सकता है
    • standalone binary में पाने वाले को कुछ भी इंस्टॉल करने की ज़रूरत नहीं होती, और --base से दूसरे OS के लिए viewer बनाया जा सकता है (लगभग 13 MiB + साइट आकार)
  • deterministic packing के कारण एक ही कॉपी से हमेशा byte-identical फ़ाइल बनती है; archive UUID कंटेंट से निकाला जाता है, इसलिए checksum·cache के लिए सुरक्षित है
  • webview टैग के साथ बिल्ड करने पर OS WebView(WKWebView·WebView2·WebKitGTK) का उपयोग होता है, जिससे यह ब्राउज़र टैब के बजाय अपनी अलग विंडो में खुलता है
  • प्रोसेसिंग पाइपलाइन: seed URL → headless Chrome rendering → final DOM snapshot → strip JS → asset localization → डिस्क पर सहेजना
  • MIT लाइसेंस

1 टिप्पणियां

 
GN⁺ 3 시간 전
Hacker News टिप्पणियाँ
  • README का demo GIF कैसे बनाया गया, यह देखने में दिलचस्पी हुई: https://github.com/tamnd/kage/blob/01e75b87ecc893bbba7943c63...
    पता चला कि इसमें उसी लेखक का एक दूसरा प्रोजेक्ट https://github.com/tamnd/ascii-gif इस्तेमाल हुआ है
    demo में इस्तेमाल की गई script https://github.com/tamnd/kage/blob/01e75b87ecc893bbba7943c63... में है, और इसे चलाने का तरीका भी comment में दिया गया है: ascii-gif render docs/demo/kage.tape -o docs/static/demo.gif
    यह https://github.com/charmbracelet/vhs के ऊपर काफ़ी मज़बूती से opinionated wrapper जैसा लगता है

    • क्या आपने terminal के उद्धारक asciinema का संदेश सुना है: https://asciinema.org/
    • मेरे $HOME/bin/ में भी इस तरह के काफ़ी personal binaries हैं। delete-all-npm, clean-rust-cache, download-youtube-playlist, get-markdown जैसी चीज़ें, और अच्छा यह है कि commands याद नहीं रखने पड़ते
      कभी-कभी coding agents खुद ही पता लगा लेते हैं कि इन tools को कैसे invoke करना है
    • GIF की जगह animated SVG भी बनाया जा सकता है, और क्योंकि यह सिर्फ text keyframes होते हैं, यह GIF से बहुत छोटा होता है: https://github.com/vytskalt/pseudoc/blob/main/assets/factori...
    • वैसे, दूसरे platforms Windows/macOS पर LiceCAP स्क्रीन को छोटे GIF में रिकॉर्ड करने के लिए शानदार tool है। इसे Winamp और Reaper DAW के लेखक ने बनाया है: https://www.cockos.com/licecap/
    • VHS command-line वीडियो generation को script करने के लिए बेहतरीन है
  • अगर आप कंपनी wiki को offline में भी आसानी से उपलब्ध कराना चाहते हैं, तो यह काम आ सकता है। जैसे, किसी ऐसे field site पर जहाँ mobile signal न हो, wiki में उपयोगी documentation हो सकती है
    पूरी site को एक single binary में बाँध सकना बढ़िया है, लेकिन अगर ऐसा version हो जिसमें अलग serving process की ज़रूरत न पड़े, तो और भी अच्छा होगा
    site content archive को, संभव हो तो embedded रूप में, थोड़ी-सी JavaScript के साथ searchable बनाने वाले single HTML entrypoint shim जैसी कोई चीज़ भी संभव लगती है

    • इसे Hacker News पर पोस्ट करना बिल्कुल सही जगह था। मैं इस idea को implement करने पर विचार करूँगा
      मेरे दिमाग में पहले से एक script/program है जो HTML को Markdown में बदलता है, इसलिए व्यवहार में मैं सब कुछ डिस्क पर Markdown files के folder के रूप में रखकर उसे Git repository में commit भी कर सकता हूँ
  • यह शानदार है। मैं Lovable जैसी किसी चीज़ में बने किसी के prototype को offline copy के रूप में लेना चाहता था, ताकि version control और sharing ज़्यादा आसान format में हो सके
    हमने जो तरीका अपनाया, वह यहाँ लिखा है: https://productnow.ai/blogs/extracting-html-from-ai-prototyp...
    अब मैं इसे देखूँगा और देखूँगा कि क्या इसमें से कुछ बदला जा सकता है। offline mirror का idea मुझे पसंद है, और collaboration से जुड़े use cases बहुत सरल हो जाते हैं

  • यहाँ kage serve $HOME/data/kage/paulgraham.com लिखा है, लेकिन अगर output static है, तो server की ज़रूरत क्यों है, समझ नहीं आता। क्या इसे browser में सीधे खोलने लायक नहीं बनाया जा सकता?
    उदाहरण के लिए, अगर $ firefox $HOME/data/kage/paulgraham.com जैसा कुछ संभव हो, तो ऐसी machine जहाँ kage install नहीं है वहाँ भी output इस्तेमाल किया जा सकता है

    • इसके बजाय python -m http.server इस्तेमाल किया जा सकता है, शायद। मैंने अभी तक इसे आज़माया नहीं है, लेकिन चलना चाहिए
      असल में Kage दो हिस्सों से बना है। एक crawler है जो Chrome/Chromium rendering के बाद DOM को capture करता है, pages को crawl करता है और उन्हें साफ़ HTML में बदलता है, और दूसरा pack/serve component है जो output को Kiwix के लिए ZIM file या executable में package करता है
    • आम तौर पर इस तरह page load करने पर JavaScript block हो जाता है
    • ऐसा करने पर शायद बहुत सारे CORS issues आएँगे
  • मुझे लगता है SingleFile [0] इसका कहीं ज़्यादा मज़बूत वर्ज़न है
    यह JavaScript भी पूरी तरह हटा देता है, लेकिन सब कुछ एक single HTML file में पैक कर देता है जिसे शेयर करना आसान होता है। web fonts या images जैसी binary assets को base64 strings के रूप में शामिल किया जाता है
    इसका एक Puppeteer-आधारित CLI भी है [1]
    [0]: https://github.com/gildas-lormeau/singlefile
    [1]: https://github.com/gildas-lormeau/single-file-cli

    • यह repository सिर्फ एक web page सेव करने के लिए लगती है
      यहाँ जो implement किया जा रहा है वह पूरी website mirroring है, जिसमें subpages भी शामिल हैं, इसलिए offline रहते हुए भी सब कुछ browse किया जा सकता है। उदाहरण के लिए paulgraham.com के सभी essays
    • SingleFile वाकई बहुत पसंद है। Firefox extension साफ-सुथरे तरीके से सेव करने में काफ़ी अच्छा काम करता है
      लेकिन अगर Kage, SingleFile जैसी reproduction quality और HTTrack-स्टाइल spidering approach को जोड़ पाए, तो यह काफ़ी promising लगेगा। single-page apps को archive करना थोड़ा मुश्किल होता है, इसलिए यह देखना दिलचस्प होगा कि Kage उन्हें कितना अच्छी तरह संभालता है
    • लिंक के लिए धन्यवाद। मैं यह single HTML feature implement करने की कोशिश करूँगा। यह होना अच्छा लगेगा
    • यह कंप्यूटर के किसी भी web browser में File -> Save as करने से कैसे अलग है?
    • मेरे दिमाग में भी शुरुआत में यही आया था, और मुझे यह बहुत elegant समाधान लगा। यह बेवजह complex भी नहीं है
  • मैंने HTTP, यानी HTTPS नहीं, वाली site को clone करने की कोशिश की, लेकिन navigation failed: net::ERR_NAME_NOT_RESOLVED मिला। http:// के साथ protocol साफ़ तौर पर लिखने पर भी यही हुआ

  • मैं फ्लाइट में पढ़ने के लिए wiki डाउनलोड करते समय httrack(https://www.httrack.com) इस्तेमाल करता रहा हूँ। यह परफ़ेक्ट तो नहीं है, लेकिन पहले जो चीज़ें मिलीं उनसे बेहतर था
    इसे भी आज़माऊँगा, और अगर नतीजे अच्छे रहे तो सच में बहुत खुशी होगी

    • यह पढ़कर पुरानी यादें ताज़ा हो गईं। करीब 20 साल पहले इंटरनेट अब भी महँगा dial-up हुआ करता था, तो मैं cybercafe जाकर HTTrack से websites और comics डाउनलोड करता था, फिर उस समय बहुत बड़ी लगने वाली 128MB USB memory में सब कॉपी करके घर ले आता था और offline पढ़ता था
    • अगर बात सिर्फ wiki की है, तो Kiwix न इस्तेमाल करने की कोई वजह है? “official” releases के अलावा यह ज़्यादा जटिल हो सकता है, लेकिन ZIM files बनाने वाली services मौजूद हैं। desktop reader app मेरे अनुभव में काफ़ी अच्छा था
      https://wiki.openzim.org/wiki/Build_your_ZIM_file
      EDIT: https://get.kiwix.org/en/solutions/applications/kiwix-reader...
    • https://github.com/archiveteam/grab-site या browsertrix कुछ लोगों के लिए इस्तेमाल करने में आसान हो सकते हैं। यह वह टूल है जिसका उपयोग data.gov की सामग्री हटने से पहले उसका बड़ा हिस्सा सेव करने में किया गया था
  • मैंने वर्षों में पुराने websites के archives काफ़ी जमा किए हैं। दिलचस्प बात यह रही कि बदसूरत HTML dumps “perfect” archives की तुलना में ज़्यादा उपयोगी निकले
    समय के साथ RSS मुझे और ज़्यादा पसंद आने लगा, इसका एक कारण यही है। करीब 10 साल पुराने feeds आज भी कई बार उन बड़ी मेहनत से सुरक्षित रखी गई app-जैसी websites की तुलना में इस्तेमाल करने में आसान होते हैं

    • मैं RSS feeds जनरेट और archive करने वाला एक प्रोजेक्ट बना रहा हूँ। crawler के शुरू होने के समय से पूरी history सुरक्षित रखता है
      थोड़ा व्यवस्थित करने के बाद इसे जल्द ही open source के रूप में जारी करने वाला हूँ
  • लगता है यह किसी site पर काफ़ी बड़ा लोड डाल सकता है। क्या clone speed को नियंत्रित करने या images/videos से बचने की कोई setting है?
    यह भी जानना चाहता हूँ कि क्या website का सिर्फ एक हिस्सा लेने का कोई तरीका है

    • क्या आप इसे एक नए issue के रूप में बना सकते हैं? मैं इसे बाद में देखूँगा। अभी मेरे समय के हिसाब से रात के 1 बजे हैं, लेकिन यह देखकर खुशी हुई कि किसी ने रुचि ली
    • बस खुद को AI crawler बताओ, समस्या अपने-आप हल हो जाएगी
  • बढ़िया प्रोजेक्ट है और आइडिया पसंद आया
    जल्दी से पढ़ने पर देखा कि Chrome को --no-sandbox के साथ चलाया जा रहा है, क्या इसके पीछे कोई वजह है? security के लिहाज़ से यह शायद अच्छा विचार नहीं है। अगर कोई ठोस कारण नहीं है, तो sandbox चालू रखने की सलाह दूँगा
    फिर भी, शानदार काम है

    • --no-sandbox Docker में ज़रूरी होता है। शायद यह मान लिया गया होगा कि ज़्यादातर लोग इसे Docker में चलाएँगे?