- अप्रैल में 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 टिप्पणियां
Hacker News की राय
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)बहुत-सी websites कुछ browsers को ज़बरदस्ती block कर देती हैं और सिर्फ Chromium को अनुमति देती हैं; Ladybird को इसी हक़ीक़त का सामना करना होगा, और यही नए browsers के लिए competition को रोकने वाला बड़ा कारण है
DRM Widevine पाना भी नए browsers के लिए बहुत मुश्किल है, और 1 करोड़ users वाले Zen Browser को भी यह नहीं मिल सका
पिछले 20 सालों से मैं सिर्फ Firefox इस्तेमाल कर रहा हूँ, लेकिन compatibility के लिए Chromium पर स्विच करने को कहने वाली कोई site मैंने कभी नहीं देखी
Widevine सच में एक वास्तविक बाधा है, लेकिन व्यवहारिक रूप से यह बस Netflix, Disney जैसी कुछ streaming sites पर 4K playback रोकने तक सीमित है
Zen ने Widevine के बिना भी 1 करोड़ users जुटा लिए, तो इसे बिल्कुल केंद्रीय चीज़ कहना भी मुश्किल है
अगर आप खुद browser को control करते हैं, तो DRM से जुड़े मुद्दों को छोड़कर लगभग कुछ भी असंभव नहीं है
ऐसे पोस्ट पढ़कर game emulator updates पढ़ने वाला मज़ा याद आ जाता है
जैसे, “X bug ठीक किया गया, जिससे Y अब सही चलता है, और उसके परिणामस्वरूप Z game अब रन करता है”; इस बार ठीक की गई चीज़ों में से एक CSS Doom भी है, तो gaming वाली समानता कुछ हद तक यहाँ भी लागू होती है
मैंने Andreas को कई बार कहते सुना है कि browser बनाना emulator बनाने जैसा है
हर website अलग-अलग features को अलग तरीक़े से इस्तेमाल करती है, और वह websites की तुलना ROMs से करता है
मैं लंबे समय से Firefox user हूँ, लेकिन जैसे ही Ladybird बहुत शुरुआती alpha में पहुँचेगा और precompiled builds आने लगेंगी, मैं इसे शुरुआत में ही ज़रूर आज़माऊँगा
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 क्यों चाहिए?
संभव है कि developing countries के लिए web-only version हो, या battery कम होने पर बचत के लिए location lookups की frequency घटाई जाती हो
यह पूरी तरह अनुमान है, लेकिन Strava जैसी site का battery information माँगना पूरी तरह बेतुका भी नहीं है, बस कुल मिलाकर थोड़ा संदिग्ध लगता है
अगर मानें कि इसे website के रूप में भी इस्तेमाल किया जाता है, तो संभव है कि यह location lookup frequency को adjust करके accuracy और power consumption के बीच संतुलन बनाने की कोशिश कर रहा हो
लेकिन RTL text के list markers वाला screenshot तो एक जैसा ही लग रहा है
दोनों ही मामलों में list marker बाईं ओर है
जबकि “before” image https://ladybird.org/assets/img/newsletter-apr-2026-rtl-befo... में bullet text के बाईं ओर है, और इतना बाएँ है कि लगभग panel के बाहर निकलती हुई लगती है
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 जैसी स्थिति में था, और ऐसे में किसी एक व्यक्ति का यहाँ तक पहुँच जाना हैरान करने वाला और बेहद प्रेरक है
इसके दो बड़े पहलू हैं: एक है शानदार 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 बन जाती है
“आज browser पर कितने लोग काम कर रहे हैं?” के जवाब में लिखा है कि इस समय Ladybird में 8 paid full-time engineers हैं, और साथ में बड़े volunteer contributors का community भी है
ज़्यादातर चीज़ें भी चलती हैं, लेकिन speed के अलावा सबसे बड़ी समस्या यह है कि कई ‘prove you are human’ checks Ladybird में ठीक से काम नहीं करते हैं