2 puan yazan GN⁺ 3 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • Sayfayı headless Chrome ile render edip kullanıcının gördüğü son DOM'un anlık görüntüsünü alıyor; ardından tüm JavaScript'i kaldırıp CSS, görselleri ve fontları yerel yollara indirerek kod olmadan çalışan statik bir kopya oluşturuyor
  • "Save As" ile kaydedilen sayfaların zamanla boş ekran, takılı spinner veya kaybolmuş analytics sunucusuna bağlanma girişimleri yüzünden bozulması sorununu çözüyor
    • izleme, ağ çağrıları veya beklenmedik davranışlar olmadan diskten doğrudan açılabilen .html dosyaları sunuyor
  • breadth-first crawling ile robots.txt dosyasını okuyor, başlangıç noktalarını sitemap.xml içinden alıyor ve seed host üzerinde kalıyor
    • idempotent yapısı sayesinde http/https fark etmeksizin veya sondaki slash olsun olmasın aynı sayfayı yalnızca bir kez alıyor
    • Ctrl-C ile bulunduğu yeri kaydediyor ve yeniden çalıştırıldığında devam ediyor; --refresh ile yeniden render ediyor, --force ile baştan başlıyor
  • --max-pages, --max-depth, --scope-prefix, --subdomains, --scroll, --workers gibi crawl kapsamı ve davranışını kontrol eden flag'ler sunuyor
  • kage pack ile kopyayı tek dosyada paketliyor; ZIM arşivi veya sitenin kendisi gibi çalışan bağımsız yürütülebilir dosya seçenekleri sunuyor
    • ZIM, Kiwix ekosistemiyle uyumlu; bu nedenle kiwix-serve ya da Kiwix masaüstü ve mobil uygulamalarında da görüntülenebiliyor
    • bağımsız binary sayesinde alıcının hiçbir şey kurması gerekmiyor ve --base ile başka işletim sistemleri için viewer üretilebiliyor (yaklaşık 13 MiB + site boyutu)
  • deterministik paketleme ile aynı kopyadan her zaman byte-identical dosyalar üretiyor; archive UUID'si içerikten türetildiği için checksum ve cache açısından güvenli
  • webview etiketiyle build edildiğinde OS WebView'ını (WKWebView, WebView2, WebKitGTK) kullanarak tarayıcı sekmesi yerine kendi penceresinde açılıyor
  • İşleme hattı: seed URL → headless Chrome render → son DOM anlık görüntüsü → JS kaldırma → varlıkları yerelleştirme → diske kaydetme
  • MIT lisansı

1 yorum

 
GN⁺ 3 시간 전
Hacker News görüşleri
  • README’deki demo GIF’in nasıl üretildiğini merak edip baktım: https://github.com/tamnd/kage/blob/01e75b87ecc893bbba7943c63...
    Meğerse aynı yazarın başka bir projesi olan https://github.com/tamnd/ascii-gif kullanılmış.
    Demoda kullanılan script de https://github.com/tamnd/kage/blob/01e75b87ecc893bbba7943c63... içinde ve çalıştırma yöntemi de yorum olarak eklenmiş: ascii-gif render docs/demo/kage.tape -o docs/static/demo.gif
    https://github.com/charmbracelet/vhs için oldukça opinionated bir wrapper gibi görünüyor.

    • Terminal kurtarıcısı asciinema’nın müjdesini duydunuz mu: https://asciinema.org/
    • Benim $HOME/bin/ içinde de bu tarz epey kişisel binary var. delete-all-npm, clean-rust-cache, download-youtube-playlist, get-markdown gibi şeyler; komutları ezberlemek gerekmiyor, güzel yanı bu.
      Bazen kodlama ajanı bu araçların nasıl çağrılacağını da kendi kendine buluyor.
    • GIF yerine animasyonlu SVG de yapılabilir; sonuçta sadece metin keyframe’leri ve GIF’ten çok daha küçük oluyor: https://github.com/vytskalt/pseudoc/blob/main/assets/factori...
    • Bu arada Windows/macOS gibi diğer platformlarda LiceCAP, ekranı küçük GIF’ler olarak kaydetmek için harika bir araç. Winamp ve Reaper DAW’ın yazarı tarafından yapılmış: https://www.cockos.com/licecap/
    • VHS, komut satırı videoları üretmeyi script’lemek için harika.
  • Şirket wikisine offline durumda da kolay erişim sağlamak istediğinizde bu işe yarayabilir. Mesela telefon sinyalinin çekmediği bir sahada, yararlı belgeler wikide olabilir.
    Tüm siteyi tek bir binary içinde paketleyebilmesi çok hoş, ama özellikle ayrı bir serving process gerektirmeyen bir sürümü olsa daha da iyi olurdu.
    Site içeriği arşivini, mümkünse gömülü şekilde, biraz JavaScript içeren tek bir HTML giriş noktası shim’i olarak sunmak da mümkün görünüyor.

    • Bunu Hacker News’te paylaşmanız tam isabet olmuş. Bu fikri hayata geçirmeyi düşüneceğim.
      Aklımda zaten HTML’i Markdown’a dönüştüren bir script/program var; yani pratikte her şeyi diskte Markdown dosyaları klasörü olarak saklayıp sonra bir Git deposuna commit etmek de mümkün olabilir.
  • Bu harika. Lovable gibi bir yerde yapılmış birinin prototipini offline bir kopya olarak indirip daha kolay bir biçimde sürümlemek ve paylaşmak istemiştim.
    Bizim nasıl yaklaştığımızı burada yazmıştım: https://productnow.ai/blogs/extracting-html-from-ai-prototyp...
    Şimdi buna bakıp bazı kısımları değiştirip değiştiremeyeceğime bakacağım. Offline mirror fikri hoşuma gitti ve işbirliğiyle ilgili kullanım senaryoları çok daha basit hale geliyor.

  • kage serve $HOME/data/kage/paulgraham.com yazıyor ama çıktı statikse neden bir sunucuya ihtiyaç var, anlamadım. Bunu tarayıcıda doğrudan açılabilir hale getiremez miyiz?
    Mesela $ firefox $HOME/data/kage/paulgraham.com gibi çalışabilse, kage’in kurulu olmadığı makinelerde de çıktı kullanılabilir.

    • Onun yerine python -m http.server kullanılabilir gibi görünüyor. Henüz denemedim ama çalışması muhtemel.
      Aslında Kage iki parçadan oluşuyor. Biri, Chrome/Chromium render’ından sonra DOM’u yakalayıp sayfayı crawl eden ve temiz HTML’e dönüştüren crawler; diğeri ise sonucu Kiwix için ZIM dosyası ya da çalıştırılabilir dosya olarak paketleyen pack/serve bileşeni.
    • Sayfaları genelde o şekilde yüklerseniz JavaScript engellenir.
    • Bunu yaparsanız muhtemelen tonla CORS sorunu ile karşılaşırsınız.
  • SingleFile [0] bunun çok daha sağlam bir sürümü gibi görünüyor
    JavaScript’i de tamamen kaldırıyor ama her şeyi paylaşması kolay tek bir HTML dosyası içinde paketliyor. Web fontları veya görseller gibi ikili varlıklar base64 dizgeleri olarak gömülüyor
    Puppeteer tabanlı bir CLI da sunuyor [1]
    [0]: https://github.com/gildas-lormeau/singlefile
    [1]: https://github.com/gildas-lormeau/single-file-cli

    • Bu depo yalnızca tek bir web sayfasını kaydediyor gibi görünüyor
      Burada yapılan şey ise alt sayfalar da dahil tüm web sitesini yansıtmak; yani çevrimdışıyken bile her yeri gezebiliyorsunuz. Örneğin paulgraham.com’daki tüm denemeler gibi
    • SingleFile’ı gerçekten seviyorum. Firefox eklentisi temiz bir şekilde kaydetme konusunda oldukça iyi çalışıyor
      Ama Kage, SingleFile düzeyindeki yeniden üretim kalitesiyle HTTPTrack tarzı örümcek yaklaşımını birleştirebilirse umut verici görünüyor. Tek sayfa uygulamaları arşivlemek biraz zor; Kage’nin bunu ne kadar iyi ele alacağını merak ediyorum
    • Bağlantı için teşekkürler. Bu tek HTML özelliğini uygulamayı deneyeceğim. Olursa güzel olur
    • Bunun, bilgisayardaki herhangi bir web tarayıcısında File -> Save as yapmakla farkı ne?
    • Benim de aklıma önce bu geldi ve bence çok zarif bir çözüm. Gereksiz yere karmaşık da değil
  • HTTP, yani HTTPS olmayan bir siteyi kopyalamayı denedim ama navigation failed: net::ERR_NAME_NOT_RESOLVED hatasını aldım. Protokolü http:// ile açıkça belirtince de aynı şey oldu

  • Uçakta okumak için bir vikiyi indirirken httrack(https://www.httrack.com) kullanıyordum. Mükemmel değil ama daha önce bulduklarımdan daha iyiydi
    Bunu da deneyeceğim; iyi sonuç verirse gerçekten çok sevinirim

    • Ne kadar nostaljik. Yaklaşık 20 yıl önce internet hâlâ pahalı çevirmeli bağlantıydı; internet kafeye gidip HTTrack ile web siteleri ve mangaları indirir, sonra o zamanlar çok büyük gelen 128 MB USB belleğe hepsini kopyalayıp eve götürür ve çevrimdışı okurdum
    • Söz konusu yalnızca vikiyse, Kiwix kullanmamak için bir neden var mı? “Resmî” sürümler dışında iş daha karmaşık ama ZIM dosyası üreten servisler var. Masaüstü okuyucu uygulaması benim deneyimime göre oldukça iyiydi
      https://wiki.openzim.org/wiki/Build_your_ZIM_file
      DÜZENLEME: https://get.kiwix.org/en/solutions/applications/kiwix-reader...
    • https://github.com/archiveteam/grab-site ya da browsertrix bazı kişiler için daha kullanımı kolay olabilir. data.gov içeriği kaldırılmadan önce büyük miktarda veri kaydetmek için kullanılan araç buydu
  • Yıllar boyunca epey eski web sitesi arşivi biriktirdim. İlginç olan şu ki çirkin HTML dökümleri, “mükemmel” arşivlerden daha kullanışlı çıktı
    Zamanla RSS’i daha çok sevmemin sebeplerinden biri de bu. Yaklaşık 10 yıllık feed’ler, özenle korunmuş uygulama benzeri web sitelerinden bugün çoğu zaman daha kolay kullanılabiliyor

    • RSS feed’i üretip arşivleyen bir proje üzerinde çalışıyorum. Tarayıcı ne zaman başlamışsa o andan itibaren tüm geçmişi saklıyor
      Biraz toparladıktan sonra yakında açık kaynak olarak yayımlamayı planlıyorum
  • Bu, site üzerinde epey büyük bir yük oluşturma potansiyeline sahip gibi görünüyor. Kopyalama hızını ayarlamak veya görsel/video indirmemek için bir ayar var mı?
    Web sitesinin yalnızca bir kısmını alma yöntemi olup olmadığını da merak ediyorum

    • Bunu yeni bir issue olarak açabilir misin? Sonra ilgilenirim. Benim saat dilimimde şu an gece 1 ama birinin ilgilenmesi hoşuma gitti
    • Kendini AI crawler gibi tanıtırsan sorun çözülür
  • Temiz bir proje ve fikrini beğendim
    Hızlıca bakınca Chrome’u --no-sandbox ile çalıştırdığını gördüm; bunun özel bir nedeni var mı? Güvenlik açısından bu iyi bir fikir olmayabilir. Özel bir gerekçe yoksa sandbox’ı açık bırakmanı öneririm
    Her hâlükârda harika iş

    • --no-sandbox Docker’da gerekli. Muhtemelen çoğunlukla Docker içinde çalıştırılacağını varsaydın, değil mi?