1 पॉइंट द्वारा GN⁺ 1 시간 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • अप्रैल में Ladybird ने 35 contributors के 333 PR merge किए, और Human Rights Foundation से 50,000 डॉलर तथा Jakub Stęplowski से 1,000 डॉलर का नया sponsorship मिला
  • inline PDF viewer, browsing history-आधारित address bar autocomplete, GTK4/libadwaita Linux frontend, और about:bookmarks management UI जोड़े गए, जिससे browsing features और desktop UI का विस्तार हुआ
  • HTML parser अब response body को incrementally parse करता है, speculative parser resources को पहले से fetch करता है, और JavaScript top-level compilation को background thread में ले जाया गया है, जिससे YouTube loading में main thread का लगभग 200ms समय बचता है
  • JavaScript engine में for-in cache, O(1) register allocator, zero-copy identifier sharing, lazy JS::Substring, typed-array view cache improvements आदि से Speedometer और वास्तविक साइट loading performance बेहतर हुई
  • Cache/CacheStorage, image-set(), CSS anchor positioning, asynchronous DNS, dmabuf-आधारित GPU painting, default रूप से mimalloc, Rust अनिवार्यता शामिल हुई, और WPT score 2,003,537 से बढ़कर 2,067,263 हो गया

विकास का पैमाना और sponsorship

  • अप्रैल में Ladybird ने 35 contributors के 333 PR merge किए, जिनमें से 7 लोगों ने पहली बार Ladybird में commit किया
  • नए sponsors में Human Rights Foundation ने “AI for Individual Rights” प्रोग्राम के ज़रिए 50,000 डॉलर और Jakub Stęplowski ने 1,000 डॉलर का सहयोग दिया
  • Ladybird पूरी तरह open web का समर्थन करने वाली कंपनियों और व्यक्तियों के sponsorship पर चलता है

browsing features और frontend

  • inline PDF viewer

    • PDF अब bundled pdf.js viewer के ज़रिए inline render होता है(#9132)
    • pdf.js एक PDF viewer है जो सिर्फ JavaScript, HTML और CSS में लिखा गया है, और page navigation, text selection, zoom, तथा document के भीतर search प्रदान करता है
    • Intel ISA Manual को pdf.js में load करते समय typed-array view cache और :has() invalidation improvements के बिंदु सामने आए
  • browsing history और address bar autocomplete

    • address bar में input देने पर browsing history-आधारित समृद्ध suggestions दिखाई देती हैं, जिनमें पहले देखे गए pages के favicon और title, search engine shortcuts, और सामान्य URL completion शामिल हैं(#8933)
    • SQLite-आधारित HistoryStore सभी navigations के title, favicon, visit count और last visit time को store करता है
    • privacy settings page में “Clear browsing history” को जोड़ा गया, और Qt तथा AppKit UI दोनों नए rich rows render करते हैं
  • GTK4 / libadwaita frontend

    • Ladybird में GTK4 और libadwaita-आधारित नया Linux frontend जोड़ा गया है, जो मौजूदा Qt frontend के साथ-साथ उपलब्ध है(#8691)
    • यह GNOME Web(Epiphany) से प्रेरित है और GNOME design guidelines के अनुसार menubar के बिना hamburger menu और AdwTabView tabs का उपयोग करता है
    • यह URL bar autocomplete और security icon, find in page, fullscreen, context menu, alert/confirm/prompt/color/file dialogs, clipboard, multiple windows, light/dark theme, और DPR scaling प्रदान करता है
    • यह अभी शुरुआती चरण में है, इसलिए अभी Qt और AppKit frontend के feature parity तक नहीं पहुँचा है
  • bookmarks

    • पिछले महीने जोड़े गए bookmarks में अब management UI भी जोड़ दिया गया है
    • about:bookmarks page में bookmarks और folders को manage किया जा सकता है(#8825)
    • नया page bookmarks के import और export को support करता है(#8938)
    • bookmarks और folders को edit करने के लिए context menu जोड़ा गया है(#8715)
    • सभी bookmarks और folders में date_added timestamp जोड़ा गया है(#8867)
    • bookmarks bar में new tab खोलना, URL copy करना, middle click तथा Ctrl/Cmd+click से new tab खोलना support किया गया है(#8758)
    • HTML5 drag and drop API को जोड़ा गया है, about:bookmarks इसे reordering के लिए उपयोग करता है, और यह सामान्य web pages पर भी काम करता है(#8783)

HTML parsing, script execution, rendering pipeline

  • अनुमानित और क्रमिक HTML parsing

    • HTML parser को इस तरह बदला गया कि वह response body को क्रमिक रूप से consume करे(#9151)
    • bytes streaming text decoder से गुजरकर tokenizer में chunk के रूप में जाते हैं, और input कम पड़ने पर tokenizer रुक जाता है, फिर और डेटा आने पर दोबारा शुरू होता है
    • यह पहले के उस मॉडल की जगह लेता है जिसमें पूरी body मिलने के बाद parsing शुरू होती थी
    • अनुमानित HTML parser भी लागू किया गया(#9114)
    • जब main parser synchronous external script पर अटकता है, तो अलग tokenizer अभी तक parse न हुए input को पहले scan करता है और <script src>, <link rel=stylesheet|preload>, <img src> resources के लिए speculative fetch जारी करता है
    • यह <base href> को track करता है और template तथा foreign content के अंदर सही तरह से skip करता है
    • speculative parser को document के preload map से जोड़ा गया, ताकि अनुमान से खोजे गए resources को सामान्य parser के बाद के fetch के साथ deduplicate किया जा सके(#9164)
  • off-thread JavaScript compilation

    • fetched scripts के top-level code के लिए bytecode generation background thread pool में चलती है(#9118)
    • worker threads bytecode और Executable बनाने के लिए जरूरी data तैयार करते हैं, जबकि VM या GC heap को छूने वाला काम main thread पर ही रहता है
    • यह classic script, module, और top-level IIFE को संभालता है, और केवल YouTube load होने पर भी लगभग 200ms main-thread समय background threads में शिफ्ट हो जाता है
  • प्रति-Navigable rasterization

    • हर Navigable अब अपने अलग thread में स्वतंत्र रूप से rasterize होता है(#8793)
    • पहले iframe को parent display list के अंदर nested display list के रूप में synchronous paint किया जाता था, इसलिए केवल top-level traversable का rendering thread सक्रिय रहता था
    • parent display list अब ExternalContentSource के जरिए हर iframe के rasterized output को refer करती है, इसलिए iframe invalidation के लिए parent को दोबारा record करने की जरूरत नहीं पड़ती
    • parallelism के अलावा, यह iframe को अलग sandbox process में ले जाने की तैयारी भी है
  • Linux dmabuf-आधारित GPU painting

    • Linux Vulkan build में WebContent, GPU-backed Skia surface पर paint करता था, लेकिन UI process के साथ shared buffer CPU bitmap होने के कारण हर flush पर GPU-to-CPU readback होता था
    • SharedImage अब Linux dmabuf handle रख सकता है, जिससे front/back buffer UI process तक GPU पर ही बने रहते हैं(#8917, #8920)

JavaScript इंजन प्रदर्शन और संगतता

  • JS-to-JS कॉल ऑप्टिमाइज़ेशन

    • कई PR लागू किए गए ताकि सामान्य मामलों में Call, Return, End निर्देश AsmInt assembly interpreter के भीतर ही रहें(#8891, #8909, #8912)
    • रजिस्टर save/restore के लिए हाथ से ट्यून किए गए ARM64 paired load/store (ldp/stp) का उपयोग किया जाता है
    • native function कॉल भी AK::Function की बजाय सामान्य function pointer रखने वाले नए RawNativeFunction variant के ज़रिए सीधे AsmInt से dispatch किए जाते हैं(#8922)
  • O(1) bytecode रजिस्टर allocator

    • Generator::allocate_register पहले available pool को scan करके सबसे कम नंबर वाला रजिस्टर ढूंढता था, और x.com लोडिंग के दौरान केवल इस function पर लगभग 800ms खर्च हो रहे थे
    • C++/Rust pipeline equivalence अवधि खत्म होने के बाद allocator को एक simple LIFO stack में बदल दिया गया(#9007)
  • cached for-in iteration

    • for (key in obj) साइट flattened enumerable key snapshot को cache करती है, और receiver की shape, indexed storage, prototype chain बने रहने तक उसे दोबारा इस्तेमाल करती है(#8856)
    • Speedometer 2 67.7 → 73.6 और Speedometer 3 4.11 → 4.22 तक बढ़ गया
  • अन्य इंजन सुधार

    • parser अब lexer, parser, scope collector में identifier नामों को zero-copy तरीके से share करता है, जिससे website JS corpus पर parsing 1.14x तेज़ हुई और RSS 282MB कम हुआ(#8801)
    • छोटे string concatenation अब rope representation को छोड़ देते हैं जब परिणाम वैसे भी flat string के रूप में देखा जाना है, जिससे घने a + b loop में 2.13x तेजी मिली(#9184)
    • lexical-this arrow function अब हर कॉल पर function environment allocate नहीं करती, जिससे microbenchmark में 2.13x सुधार हुआ(#9192)
    • sparse array अब hole के लिए तुरंत लागत नहीं चुकाती, और Array(20_000_000) 2 करोड़ virtual elements के अनुपात में काम करने के बजाय मुख्यतः metadata के रूप में बनी रहती है(#8847)
    • नया lazy JS::Substring type regexp capture और slice, split, indexed access जैसी string builtin को support करता है, और Octane regexp benchmark में 1.066x सुधार देता है(#8863)
    • bytecode source map में source position end-to-end सुरक्षित रखी जाती है, जिससे x.com पर लगभग 250ms की बचत होती है(#9027)
    • zero-copy TransferArrayBuffer YouTube लोडिंग में लगभग 130ms बचाता है(#9088)
    • cached typed-array view को WeakHashSet से intrusive list में बदला गया, जिससे pdf.js में Intel ISA PDF लोड करते समय लगभग 250ms की बचत हुई(#9180)
    • पहले हर Promise non-capturing AK::Function closure वाले 2 PromiseResolvingFunction cell allocate करता था, लेकिन अब इसे Kind enum से dispatch होने वाले static function में बदल दिया गया है, जिससे per-resolver allocation हट गया(#9188)
    • non-dictionary shape की property-table marking छोड़ने से maptiler.com लोडिंग के दौरान GC समय 1.3 सेकंड कम हुआ(#9044)
    • packed array के लिए Array.prototype.indexOf fast path जोड़ा गया(#9123)
    • Array.prototype.sort अब हर comparison पर दोबारा transcoding नहीं करता और cached UTF-16 का पुन: उपयोग करता है(#9036)
    • WASM, JSON, CSS modules import जोड़े गए(#6029)
    • मानकीकरण प्रक्रिया में ShadowRealm प्रस्ताव ठहर जाने के कारण उसका support हटा दिया गया(#8753)

वेब प्लेटफ़ॉर्म API और CSS

  • Cache और CacheStorage

    • Cache और CacheStorage का end-to-end इम्प्लीमेंटेशन पूरा हुआ(#8745)
    • open, has, delete, keys, match, matchAll, add, addAll, put सहित 9 मेथड अस्थायी in-memory स्टोरेज के आधार पर काम करते हैं
  • CSS फीचर और रेंडरिंग सुधार

    • image-set() के standard और -webkit- prefix वाले रूपों के लिए बेसिक सपोर्ट जोड़ा गया है, और paint के समय device pixel ratio के साथ सबसे बेहतर मेल खाने वाले resolution candidate को चुना जाता है तथा unsupported MIME type को छोड़ दिया जाता है(#9090)
    • image-set() सपोर्ट के कारण gocomics.com की header image दिखाई देती है
    • position-anchor और CSS anchor positioning के लिए शुरुआती सपोर्ट जोड़ा गया, जिससे cssdoom.wtf में हाथ और बंदूक की स्थिति ठीक हुई(#8686)
    • color interpolation को css-color-4 के अनुसार फिर से लिखा गया है, जिससे u8 की जगह float में interpolation होता है, और missing/powerless component, out-of-gamut sRGB, alpha multiplier को एकसमान तरीके से handle किया जाता है(#8934)
    • align, bgcolor जैसे legacy presentational HTML attribute अब सीधे cascaded properties का उपयोग नहीं करते, बल्कि सामान्य author declaration की तरह cascade से गुजरते हैं, जिससे var() substitution और invalid-at-computed-value-time fallback सही तरह से काम करते हैं(#9176)
    • presentational hint cascade में बदलाव के कारण html.spec.whatwg.org पर होने वाला crash ठीक हुआ
    • <thead>, <tbody>, <tfoot>, <tr> अब align presentational attribute को reflect करते हैं, जिससे bricklink.com पर button placement ठीक हुआ(#9177)
    • stroke-dasharray interpolation की वजह से SVG dash अब स्मूद तरीके से animate होते हैं(#9133)
    • autofocus attribute वाले elements अब पेज लोड होने पर वास्तव में focus प्राप्त करते हैं(#9016)
    • RTL टेक्स्ट में list marker अब दाईं ओर रखा जाता है, जिससे Arabic Wikipedia की सूची रेंडरिंग ठीक हुई(#9099)
    • inline flex/grid container का baseline अब आखिरी wrapped line की बजाय child के first line box से निकाला जाता है, जिससे nos.nl पर link text और icon का alignment ठीक हुआ(#9183)

नेटवर्किंग और स्टाइल अमान्यकरण

  • नेटवर्किंग

    • getaddrinfo अब event loop को block नहीं करता
    • LibDNS अब lookup को thread pool में चलाता है, A और AAAA query को parallel में जारी करता है, और एक ही नाम के लिए होने वाले concurrent lookup को merge करता है(#9109)
    • RequestServer के preconnect path को ठीक किया गया ताकि वह resolver को bypass न करे, और libcurl का threaded resolver main thread पर pthread_join ट्रिगर करने वाली समस्या अब उसी DNS pool path पर route हो(#9109)
    • जब WebContent नेटवर्क से धीमा होता था, तब RequestServer में queued response data drain की जटिलता O(n²) थी, और YouTube वीडियो खोलते समय memcpy पर लगभग 30 सेकंड और Vector::remove पर 3 सेकंड खर्च हो रहे थे
    • AllocatingMemoryStream को singly-linked chunk list में बदला गया, जिससे consumption O(1) हो गया(#9028)
    • image request के Accept header में AVIF और WebP का advertising जोड़कर इसे दूसरे engines के अनुरूप बनाया गया; कुछ CDN इसी header के आधार पर तय करते हैं कि modern format देना है या JPEG fallback(#9046)
  • स्टाइल अमान्यकरण

    • पहले selector invalidation अपेक्षाकृत सरल था क्योंकि यह मान लिया जाता था कि selector केवल नीचे की दिशा में देखते हैं, लेकिन :host और :has() की वजह से descendant में बदलाव ancestor के :has() result को बदल सकता है, इसलिए ऊपर की ओर जाने वाली walk की ज़रूरत पड़ी
    • stylesheet mutation अगर केवल एक scope बदलता है तो अब सभी style scope cache को फिर से reconstruct नहीं किया जाता, जिससे Reddit rule cache rebuild 13.2 सेकंड → 3.2 सेकंड तक घट गया(#9138)
    • sibling structural invalidation अब उन descendant तक नहीं फैलता जो position observe नहीं करते, जिससे Reddit infinite scroll में अनावश्यक recompute 11% कम हुआ(#9155)
    • :has() mutation invalidation अब non-affected anchor को skip करता है, और azure.com पर इसका बड़ा reduction मापा गया(#9168)
    • Intel ISA PDF में :has() child-list visit 71k → 1.6k तक घट गया, और pdf.js loading में लगभग 650ms की बचत हुई(#9179)
    • structural-invalidation tests के नए bundle ने कई invalidation miss को उजागर किया और उन्हें ठीक किया गया(#9095)
    • hover, stylesheet mutation scope, custom-property map, और computed-style diffing के आसपास के छोटे सुधार भी शामिल हैं(#9077, #9049, #9079, #9080, #9141)

मेमोरी allocation और build system

  • mimalloc default allocator

    • C++ और Rust code अब system allocator से गुज़रे बिना mimalloc v2 की एक single allocator instance share करते हैं(#8752)
    • malloc() को system-wide override नहीं किया जाता, इसलिए third-party library अपना allocator contract बनाए रखती हैं
    • JS benchmark में कुल मिलाकर सुधार हुआ
  • Rust अनिवार्य और build system की सफ़ाई

    • ENABLE_RUST build option हटा दिया गया है, इसलिए Rust अब अनिवार्य है(#8742)
    • GN build system को पूरी तरह हटा दिया गया है, और CMake ही एकमात्र standard बना हुआ है(#8931)
  • GC और मेमोरी से जुड़े बदलाव

    • -ftrivial-auto-var-init=zero के साथ compile किया गया, ताकि function entry पर पुराने GC pointer को 0 से overwrite किया जाए और conservative stack scanner उन्हें कम पाए(#9171)
    • कम इस्तेमाल होने वाली UsedValues property को lazy pointer के पीछे ले जाया गया, जिससे struct का आकार 424 बाइट → 176 बाइट हो गया, और sainsburys.co.uk load करते समय LayoutState::populate_node_from() 139ms → 65ms तक घट गया(#9104)
    • fetch body chunk अब pull-promise path से होकर प्रति chunk 7 GC object allocate करने के बजाय सीधे byte stream controller में जाता है(#9169)

बेहतर साइट व्यवहार

  • Reddit

    • Reddit image gallery carousel अब काम करता है, और ::slotted() matching तथा split inline के absolutely positioned descendant के आसपास के दो असंबंधित layout bug ठीक किए गए हैं(#9148)
    • TextDecoderStream की वजह से SPA अब link click को निगलता नहीं है, इसलिए comments खोले जा सकते हैं
    • infinite scroll भी structural invalidation काम के असर में आया
  • YouTube

    • YouTube पर off-thread top-level JS compile, off-thread WOFF2 decompression, @font-face fetch fanout में कमी, RequestServer memory churn fix, और zero-copy TransferArrayBuffer का असर पड़ा
    • off-thread WOFF2 decompression से Gmail में भी लगभग 170ms की बचत हुई(#8976)
    • शुरुआती load में @font-face fetch fanout 177 → लगभग 9 तक घट गया(#9032)
  • अन्य साइटें

    • gocomics.com पर image-set() की वजह से header image दिखता है
    • yandex.com/maps पर WEBGL_debug_renderer_info extension समेत WebGL fixes की वजह से vector-tile WebGL rendering काम करता है(#9043)
    • strava.com पर Navigator.getBattery अब अपना खुद का error फेंकने के बजाय spec-mandated error type फेंकता है, जिससे login काम करता है(#8770)
    • GitHub Insights Element.matches() और .closest() selector cache की वजह से लगभग 100ms तेज़ load होता है(#8987)
    • tweakers.net के laptop comparison page पर indexed HTMLFormElement property name lookup की वजह से लगभग 31% तेजी आई(#9009)
    • neon.com अब crash नहीं होता(#8812)
    • channel4.com पर flex auto-margin resolution fix की वजह से category text की vertical alignment समस्या हल हो गई(#9050)
    • Cloudflare Turnstile अभी भी pass नहीं होता, लेकिन auth-scheme handling, Array.prototype.shift() optimization, और <input> range तथा number element के UA event handler hardening की वजह से यह अब बहुत तेज़ी से fail होता है(#9063)

WPT और अन्य platform बदलाव

  • Web Platform Tests

    • WPT score 2,003,537 → 2,067,263 तक बढ़ गया, जिससे इस महीने 63,726 subtest की बढ़ोतरी दर्ज हुई
    • हालांकि, WPT ने आधिकारिक ECMAScript conformance suite test262 को upstream से शामिल किया, जिससे JavaScript subtest 53,207 बढ़े
    • Ladybird कई वर्षों से test262 को अलग से चलाता रहा है, और LibJS conformance अच्छी स्थिति में होने के कारण इनमें से 52,045, यानी 97.8%, pass करता है
    • 63.7k की बढ़ोतरी में लगभग 52k test262 import से आए, और बाकी लगभग 11.7k असली नए browser platform प्रगति थे
    • test262 import की वजह से WPT अब JavaScript conformance को बाकी platform के साथ मिलाकर मापता है
  • टेक्स्ट, लेआउट, प्रोसेस, UI

    • ligature वाले text की selection और hit testing अब उस ढांचे से बदले गए हैं जो हर glyph के लिए एक code unit मानता था; अब यह grapheme cluster पर iterate करता है और glyph advance को संबंधित grapheme में बांटता है(#8829)
    • shadow root पर innerHTML सेट करने से अब पूरे document layout tree को invalidate नहीं किया जाता, और pomax.github.io/bezierinfo पर layout-and-paint समय 21% घटा(#9191)
    • popup tab को किसी दूसरी site पर navigate करने पर parent का WebContent process अब बंद नहीं होता(#8730)
    • Qt UI में Ctrl+Tab और Ctrl+Shift+Tab से खुले tabs के बीच चक्र लगाया जा सकता है(#8704)
    • middle mouse button दबाकर drag करके scroll किया जा सकता है, या वहीं click करके autoscroll mode में जाया जा सकता है(#8881, #8928)
    • जब address bar input को URL या search query के रूप में sanitize नहीं किया जा सकता, तब input को चुपचाप फेंकने के बजाय उचित error page दिखाया जाता है(#9072)
    • TextDecoder के streaming counterpart TextDecoderStream को implement किया गया है, और chunk boundary पर partial UTF-8 को hold-back करने से Reddit comments को edit करना संभव हुआ(#9143)
    • cross-process BroadcastChannel messages अब WebContent और WebWorker process के बीच IPC के जरिए route किए जाते हैं, जिससे listener किसी भी process में हो, यह दूसरे browsers की तरह ही काम करता है(#8865)

1 टिप्पणियां

 
GN⁺ 1 시간 전
Hacker News की राय
  • अगर आप JavaScript-रहित ब्राउज़र इस्तेमाल करना चाहते हैं, तो Dioxus का बनाया जा रहा ब्राउज़र प्रोटोटाइप भी काफ़ी बेहतर हो रहा है
    Rust GUI framework Dioxus इसे native renderer के हिस्से के रूप में बना रहा है, और दिशा Flutter की तरह Skia के विकल्प को खुद बनाने की है, लेकिन Flutter web की तरह सिर्फ canvas इस्तेमाल करने के बजाय यह web पर भी HTML/CSS standards के साथ काम करता है
    यह मौजूदा browser codebase जैसे Chromium, Gecko, WebKit पर निर्भर नहीं है, और Servo में इस्तेमाल होने वाले stylo और taffy जैसे Rust crates का उपयोग करता है, इसलिए यह लगभग शुरू से बना implementation है: https://github.com/DioxusLabs/blitz (/apps/browser)
  • ब्राउज़र development में सबसे कठिन हिस्सा हमेशा कृत्रिम web compatibility रहा है
    बहुत-सी websites कुछ browsers को ज़बरदस्ती block कर देती हैं और सिर्फ Chromium को अनुमति देती हैं; Ladybird को इसी हक़ीक़त का सामना करना होगा, और यही नए browsers के लिए competition को रोकने वाला बड़ा कारण है
    DRM Widevine पाना भी नए browsers के लिए बहुत मुश्किल है, और 1 करोड़ users वाले Zen Browser को भी यह नहीं मिल सका
    • अफ़सोस की बात है कि नई पीढ़ी ने IE से कोई सबक नहीं सीखा, और अगर कोई Chrome OS Platform की दिशा में नहीं चलता तो वही लोग सबसे पहले शिकायत भी करते हैं
    • मुझे नहीं पता कि ऐसी blocking वास्तव में कितनी आम है
      पिछले 20 सालों से मैं सिर्फ Firefox इस्तेमाल कर रहा हूँ, लेकिन compatibility के लिए Chromium पर स्विच करने को कहने वाली कोई site मैंने कभी नहीं देखी
    • अगर ऐसे कृत्रिम अवरोध interoperability पर इतना असर डालते हैं, तो समझिए 99% बाधाएँ पहले ही पार हो चुकी हैं, और ज़्यादातर मामलों में User-Agent string spoofing से काम चल सकता है
      Widevine सच में एक वास्तविक बाधा है, लेकिन व्यवहारिक रूप से यह बस Netflix, Disney जैसी कुछ streaming sites पर 4K playback रोकने तक सीमित है
      Zen ने Widevine के बिना भी 1 करोड़ users जुटा लिए, तो इसे बिल्कुल केंद्रीय चीज़ कहना भी मुश्किल है
    • Ladybird ने हाल ही में इसी वजह से खुद को Chrome के रूप में report करना शुरू किया है
    • compatibility testing के लिए User-Agent की नकल की जा सकती है
      अगर आप खुद browser को control करते हैं, तो DRM से जुड़े मुद्दों को छोड़कर लगभग कुछ भी असंभव नहीं है
  • यह काफ़ी usable होता हुआ लग रहा है
    ऐसे पोस्ट पढ़कर game emulator updates पढ़ने वाला मज़ा याद आ जाता है
    जैसे, “X bug ठीक किया गया, जिससे Y अब सही चलता है, और उसके परिणामस्वरूप Z game अब रन करता है”; इस बार ठीक की गई चीज़ों में से एक CSS Doom भी है, तो gaming वाली समानता कुछ हद तक यहाँ भी लागू होती है
    • यह सही तुलना है
      मैंने Andreas को कई बार कहते सुना है कि browser बनाना emulator बनाने जैसा है
      हर website अलग-अलग features को अलग तरीक़े से इस्तेमाल करती है, और वह websites की तुलना ROMs से करता है
  • Ladybird वाकई बहुत अच्छी प्रगति कर रहा है
    मैं लंबे समय से Firefox user हूँ, लेकिन जैसे ही Ladybird बहुत शुरुआती alpha में पहुँचेगा और precompiled builds आने लगेंगी, मैं इसे शुरुआत में ही ज़रूर आज़माऊँगा
    • अगर अभी के चरण में इसे चलाकर देखना चाहते हैं, तो local build आसान है; dependencies install करने और build scripts चलाने के लिए बस कुछ commands चाहिए: https://github.com/LadybirdBrowser/ladybird/blob/master/Docu...
    • Mozilla को कम से कम एक ज़ोरदार झटका तो चाहिए
    • इसे खुद compile करना भी काफ़ी आसान है, ख़ासकर अगर Claude Code से करवा लें तो और भी आसान
  • GTK4 / libadwaita frontend सुनकर अच्छा लगा
    मुझे Qt से ज़्यादा GTK UI/UX पसंद है, इसलिए इस दिशा में development का इंतज़ार है
  • strava.com : Login works now that Navigator.getBattery throws the spec-mandated error type instead of one of our own (#8770).
    Strava को मेरी battery level क्यों चाहिए?
    • सबसे ज़्यादा संभावना यही है कि इसका इस्तेमाल tracking के लिए unique fingerprint बनाने में हो रहा हो
    • हो सकता है वे Battery API का इस्तेमाल low-power version वाली site चुनने के heuristic के तौर पर कर रहे हों
      संभव है कि developing countries के लिए web-only version हो, या battery कम होने पर बचत के लिए location lookups की frequency घटाई जाती हो
      यह पूरी तरह अनुमान है, लेकिन Strava जैसी site का battery information माँगना पूरी तरह बेतुका भी नहीं है, बस कुल मिलाकर थोड़ा संदिग्ध लगता है
    • Strava route-tracking service है
      अगर मानें कि इसे website के रूप में भी इस्तेमाल किया जाता है, तो संभव है कि यह location lookup frequency को adjust करके accuracy और power consumption के बीच संतुलन बनाने की कोशिश कर रहा हो
    • account पर brute-force करने वाले bots शायद इस API को किसी असली device की तरह implement न करते हों
  • पिछली पोस्ट: https://news.ycombinator.com/item?id=47985497
  • SerenityOS जिस दिशा में जा रहा है, वह मुझे सच में बहुत पसंद है, और उम्मीद है कि वही focus Ladybird browser में भी बना रहे
    • जहाँ तक मुझे पता है, Ladybird अब SerenityOS से पूरी तरह अलग हो चुका है(https://hackaday.com/2024/07/02/fork-ladybird-browser-and-se...), इसलिए Ladybird contributors अब पूरी तरह इसी पर ध्यान दे सकते हैं
  • बधाई
    लेकिन RTL text के list markers वाला screenshot तो एक जैसा ही लग रहा है
    दोनों ही मामलों में list marker बाईं ओर है
  • https://ladybird.org/assets/img/newsletter-apr-2026-reddit-g...
    Ladybird Reddit test में Evangelion r/unixporn इस्तेमाल करने वाले व्यक्ति के लिए मेरे मन में सचमुच सम्मान है
    मैंने Evangelion बहुत ज़्यादा नहीं देखा, लेकिन उसके explainer documentaries अनगिनत देखी हैं, और मुझे वह इतना पसंद है कि एक समय उसे wallpaper के रूप में भी इस्तेमाल किया था
    असली बात यह है कि Reddit का Ladybird में चलना ही बहुत बड़ी बात है
    YouTube चलता है या नहीं, यह नहीं पता, लेकिन उम्मीद है कि वह भी चले; इससे लगता है कि Ladybird सच में daily use के क़रीब पहुँच रहा है
    Ladybird को sponsor करने वाले https://jakubsteplow.ski/ का भी धन्यवाद
    मैं चाहता हूँ कि open source projects को donate करने वाले लोगों को Google ads जैसी चीज़ों से बेहतर तरीक़े से खुलकर सराहा जाए, Jakub के लिए मेरी शुभकामनाएँ हैं, और उम्मीद है कि दूसरे लोग भी Ladybird जैसे projects को स्वतंत्र रूप से donate करें
    Human Rights Foundation के https://hrf.org/program/ai-for-individual-rights/ का भी धन्यवाद
    browser ecosystem लगभग single/multi-oligopoly जैसी स्थिति में था, और ऐसे में किसी एक व्यक्ति का यहाँ तक पहुँच जाना हैरान करने वाला और बेहद प्रेरक है
    • मुझे EVA पसंद है, लेकिन मैं इसे थोड़ी सावधानी से recommend करना चाहूँगा
      इसके दो बड़े पहलू हैं: एक है शानदार aesthetics वाला mecha/alien/monster SF, और दूसरा है self-hatred और loneliness पर केंद्रित एक personal drama
      ज़्यादातर लोगों को पहला पहलू ज़्यादा आकर्षक लगेगा, लेकिन जो चीज़ आज तक टिकी हुई है वह दूसरा हिस्सा है
      अगर आप इसे देखें, तो viewing order का ध्यान रखें
      एक timeline original TV series और फिल्म “End of Evangelion” तक जाती है, और दूसरी अलग film series “Rebuild of Eva” है, जो पूरी reboot की तरह शुरू होकर किसी तरह original का अंतिम reboot/remake/sequel बन जाती है
    • https://ladybird.org/#about
      “आज browser पर कितने लोग काम कर रहे हैं?” के जवाब में लिखा है कि इस समय Ladybird में 8 paid full-time engineers हैं, और साथ में बड़े volunteer contributors का community भी है
    • YouTube Ladybird में चलता है
      ज़्यादातर चीज़ें भी चलती हैं, लेकिन speed के अलावा सबसे बड़ी समस्या यह है कि कई ‘prove you are human’ checks Ladybird में ठीक से काम नहीं करते हैं