1 poin oleh GN⁺ 1 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • Pada bulan April, Ladybird menggabungkan 333 PR dari 35 kontributor dan menerima dukungan baru sebesar $50.000 dari Human Rights Foundation serta $1.000 dari Jakub Stęplowski
  • Ditambahkan penampil PDF inline, pelengkapan otomatis bilah alamat berbasis riwayat kunjungan, frontend Linux GTK4/libadwaita, dan UI pengelolaan about:bookmarks, sehingga fitur penelusuran dan UI desktop makin luas
  • Parser HTML kini mem-parsing isi respons secara bertahap dan parser prediktif mengambil resource lebih awal, sementara kompilasi tingkat atas JavaScript dipindahkan ke thread latar belakang untuk mengurangi waktu thread utama sekitar 200 ms saat memuat YouTube
  • Mesin JavaScript meningkatkan performa Speedometer dan pemuatan situs nyata lewat cache for-in, allocator register O(1), berbagi identifier zero-copy, JS::Substring lazy, serta peningkatan cache typed-array view
  • Termasuk Cache/CacheStorage, image-set(), CSS anchor positioning, DNS asinkron, painting GPU berbasis dmabuf, mimalloc sebagai default, dan Rust yang diwajibkan; skor WPT naik dari 2.003.537 menjadi 2.067.263

Skala pengembangan dan dukungan

  • Pada April, Ladybird menggabungkan 333 PR dari 35 kontributor, dan 7 di antaranya melakukan commit pertama mereka ke Ladybird
  • Sebagai sponsor baru, Human Rights Foundation menyumbang $50.000 melalui program “AI for Individual Rights”, dan Jakub Stęplowski menyumbang $1.000
  • Ladybird sepenuhnya dijalankan lewat dukungan perusahaan dan individu yang mendukung web terbuka

Fitur penelusuran dan frontend

  • Penampil PDF inline

    • PDF dirender secara inline melalui penampil pdf.js yang dibundel(#9132)
    • pdf.js adalah penampil PDF yang ditulis hanya dengan JavaScript, HTML, dan CSS, serta menyediakan navigasi halaman, pemilihan teks, zoom, dan pencarian dalam dokumen
    • Saat memuat Intel ISA Manual dengan pdf.js, terlihat area perbaikan pada cache typed-array view dan invalidasi :has()
  • Riwayat kunjungan dan pelengkapan otomatis bilah alamat

    • Saat mengetik di bilah alamat, rekomendasi kaya berbasis riwayat kunjungan akan ditampilkan, termasuk favicon dan judul halaman yang sebelumnya dikunjungi, shortcut mesin pencari, serta pelengkapan URL umum(#8933)
    • HistoryStore berbasis SQLite menyimpan judul, favicon, jumlah kunjungan, dan waktu kunjungan terakhir untuk semua navigasi
    • “Clear browsing history” kini terhubung di halaman pengaturan privasi, dan UI Qt maupun AppKit sama-sama merender baris kaya yang baru
  • Frontend GTK4 / libadwaita

    • Ladybird menambahkan frontend Linux baru berbasis GTK4 dan libadwaita, yang disediakan berdampingan dengan frontend Qt yang sudah ada(#8691)
    • Frontend ini terinspirasi oleh GNOME Web(Epiphany) dan, mengikuti pedoman desain GNOME, menggunakan menu hamburger dan tab AdwTabView tanpa menu bar
    • Menyediakan pelengkapan otomatis bilah URL dan ikon keamanan, pencarian dalam halaman, layar penuh, menu konteks, dialog alert/confirm/prompt/color/file, clipboard, banyak jendela, tema terang/gelap, dan penskalaan DPR
    • Karena masih tahap awal, frontend ini belum mencapai kesetaraan fitur dengan frontend Qt dan AppKit
  • Bookmark

    • UI pengelolaan ditambahkan ke fitur bookmark yang diperkenalkan bulan lalu
    • Bookmark dan folder dapat dikelola di halaman about:bookmarks(#8825)
    • Halaman baru ini mendukung impor dan ekspor bookmark(#8938)
    • Ditambahkan menu konteks untuk mengedit bookmark dan folder(#8715)
    • Timestamp date_added ditambahkan ke semua bookmark dan folder(#8867)
    • Bilah bookmark kini mendukung membuka tab baru, menyalin URL, serta membuka tab baru dengan klik tengah dan Ctrl/Cmd+klik(#8758)
    • API drag-and-drop HTML5 telah dihubungkan, about:bookmarks menggunakannya untuk penyusunan ulang, dan ini juga berfungsi di halaman web biasa(#8783)

Parsing HTML, eksekusi skrip, pipeline rendering

  • Parsing HTML spekulatif dan bertahap

    • Parser HTML diubah agar mengonsumsi body respons secara bertahap(#9151)
    • Byte melewati decoder teks streaming lalu masuk ke tokenizer per chunk, dan jika input kurang tokenizer akan berhenti lalu melanjutkan saat data tambahan tiba
    • Ini menggantikan model lama yang menunggu seluruh body diterima sebelum mulai parsing
    • Parser HTML spekulatif juga diimplementasikan(#9114)
    • Saat parser utama terblokir oleh skrip eksternal sinkron, tokenizer terpisah memindai lebih dulu input yang belum diparsing dan menerbitkan speculative fetch untuk resource <script src>, <link rel=stylesheet|preload>, dan <img src>
    • Melacak <base href> dan melewati bagian di dalam template serta foreign content dengan benar
    • Parser spekulatif dihubungkan ke preload map dokumen sehingga resource yang ditemukan secara spekulatif dideduplikasi terhadap fetch berikutnya oleh parser biasa(#9164)
  • Kompilasi JavaScript off-thread

    • Pembuatan bytecode untuk kode tingkat atas dari skrip yang di-fetch dijalankan di thread pool latar belakang(#9118)
    • Thread worker membuat bytecode dan data yang diperlukan untuk pembuatan Executable, sementara pekerjaan yang menyentuh heap VM atau GC tetap berada di thread utama
    • Menangani classic script, module, dan IIFE tingkat atas, serta memindahkan sekitar 200ms waktu thread utama ke thread latar belakang hanya dari pemuatan YouTube
  • Rasterisasi per Navigable

    • Setiap Navigable dirasterisasi secara independen di thread-nya sendiri(#8793)
    • Sebelumnya, iframe di-paint secara sinkron sebagai nested display list di dalam display list parent sehingga hanya thread rendering dari traversable tingkat atas yang aktif
    • Display list parent kini mereferensikan output rasterisasi tiap iframe melalui ExternalContentSource, sehingga invalidasi iframe tidak memerlukan penulisan ulang parent
    • Selain paralelisme, ini juga merupakan pekerjaan persiapan untuk memindahkan iframe ke proses sandbox terpisah
  • Painting GPU berbasis dmabuf di Linux

    • Pada build Linux Vulkan, WebContent melakukan paint ke Skia surface berbasis GPU, tetapi buffer yang dibagikan dengan proses UI adalah bitmap CPU sehingga setiap flush memicu readback dari GPU ke CPU
    • SharedImage kini dapat menampung handle dmabuf Linux, sehingga front/back buffer tetap berada di GPU hingga ke proses UI(#8917, #8920)

Performa dan kompatibilitas mesin JavaScript

  • Optimisasi pemanggilan JS-ke-JS

    • Beberapa PR diterapkan agar instruksi Call, Return, dan End tetap berada di dalam interpreter assembly AsmInt untuk kasus umum (#8891, #8909, #8912)
    • Penyimpanan/pemulihan register menggunakan paired load/store ARM64 (ldp/stp) yang disetel manual
    • Pemanggilan native function juga didispatch langsung dari AsmInt melalui varian RawNativeFunction baru yang menyimpan pointer fungsi biasa alih-alih AK::Function (#8922)
  • Pengalokasi register bytecode O(1)

    • Generator::allocate_register sebelumnya memindai pool yang tersedia untuk menemukan register bernomor paling rendah, dan selama pemuatan x.com fungsi ini sendiri menghabiskan sekitar 800ms
    • Setelah periode kesetaraan pipeline C++/Rust berakhir, pengalokasi diubah menjadi stack LIFO sederhana (#9007)
  • Iterasi for-in yang di-cache

    • Lokasi for (key in obj) menyimpan cache snapshot enumerable key yang sudah diratakan, lalu menggunakannya kembali selama shape, indexed storage, dan prototype chain receiver tetap sama (#8856)
    • Speedometer 2 naik dari 67.7 → 73.6, dan Speedometer 3 dari 4.11 → 4.22
  • Peningkatan mesin lainnya

    • Parser kini berbagi nama identifier secara zero-copy di lexer, parser, dan scope collector, sehingga parsing pada korpus JS situs web menjadi 1,14x lebih cepat dan RSS berkurang 282MB (#8801)
    • Konkatenasi string pendek melewati representasi rope saat hasilnya memang akan teramati sebagai flat string, sehingga loop a + b yang rapat menjadi 2,13x lebih cepat (#9184)
    • Arrow function lexical-this tidak lagi mengalokasikan function environment pada setiap pemanggilan, sehingga meningkat 2,13x pada microbenchmark (#9192)
    • Sparse array tidak lagi menanggung biaya langsung untuk hole, dan Array(20_000_000) sebagian besar tetap berupa metadata alih-alih melakukan pekerjaan yang sebanding dengan 20 juta elemen virtual (#8847)
    • Tipe lazy JS::Substring baru mendukung regexp capture serta builtin string seperti slice, split, dan indexed access, menghasilkan peningkatan 1,066x pada benchmark regexp Octane (#8863)
    • Source position kini dipertahankan secara end-to-end dalam source map bytecode, menghemat sekitar 250ms di x.com (#9027)
    • TransferArrayBuffer zero-copy menghemat sekitar 130ms saat memuat YouTube (#9088)
    • Cached typed-array view diubah dari WeakHashSet ke intrusive list, menghemat sekitar 250ms saat memuat Intel ISA PDF di pdf.js (#9180)
    • Semua Promise sebelumnya mengalokasikan 2 sel PromiseResolvingFunction dengan closure AK::Function yang tidak menangkap apa pun; kini ini diubah menjadi static function yang didispatch oleh enum Kind, sehingga alokasi per resolver dihapus (#9188)
    • Waktu GC saat memuat maptiler.com berkurang 1,3 detik dengan melewati property-table marking untuk shape non-dictionary (#9044)
    • Fast path Array.prototype.indexOf untuk packed array ditambahkan (#9123)
    • Array.prototype.sort kini menggunakan kembali UTF-16 yang sudah di-cache alih-alih mentranskode ulang pada setiap perbandingan (#9036)
    • Import WASM, JSON, dan CSS modules ditambahkan (#6029)
    • Dukungan untuk proposal ShadowRealm dihapus karena proses standarisasinya mandek (#8753)

API platform web dan CSS

  • Cache dan CacheStorage

    • Cache dan CacheStorage telah diimplementasikan secara end-to-end(#8745)
    • 9 metode seperti open, has, delete, keys, match, matchAll, add, addAll, dan put berjalan berdasarkan penyimpanan in-memory sementara
  • Fitur CSS dan perbaikan rendering

    • Dukungan dasar untuk bentuk standar dan bentuk prefix -webkit- dari image-set() telah ditambahkan, dan saat paint memilih kandidat resolusi yang paling sesuai dengan device pixel ratio serta melewati MIME type yang tidak didukung(#9090)
    • Dengan dukungan image-set(), gambar header di gocomics.com kini ditampilkan
    • Dukungan awal untuk position-anchor dan CSS anchor positioning telah ditambahkan, sehingga posisi tangan dan senjata di cssdoom.wtf diperbaiki(#8686)
    • Interpolasi warna ditulis ulang agar sesuai dengan css-color-4, sehingga interpolasi dilakukan dengan float alih-alih u8, serta menangani missing/powerless component, out-of-gamut sRGB, dan alpha multiplier secara konsisten(#8934)
    • Legacy presentational HTML attribute seperti align dan bgcolor kini tidak lagi langsung menulis cascaded properties, melainkan melewati cascade seperti author declaration biasa sehingga substitusi var() dan fallback invalid-at-computed-value-time berjalan dengan benar(#9176)
    • Perubahan pada presentational hint cascade memperbaiki crash di html.spec.whatwg.org
    • <thead>, <tbody>, <tfoot>, dan <tr> kini menerapkan presentational attribute align, sehingga penempatan tombol di bricklink.com diperbaiki(#9177)
    • Dengan interpolasi stroke-dasharray, dash SVG kini dianimasikan dengan mulus(#9133)
    • Elemen yang memiliki attribute autofocus kini benar-benar menerima fokus saat halaman dimuat(#9016)
    • List marker untuk teks RTL ditempatkan di sisi kanan, sehingga rendering daftar di Arabic Wikipedia diperbaiki(#9099)
    • Baseline inline flex/grid container kini diturunkan dari first line box milik child, bukan dari wrapped line terakhir, sehingga perataan teks tautan dan ikon di nos.nl diperbaiki(#9183)

Jaringan dan invalidasi style

  • Jaringan

    • getaddrinfo tidak lagi memblokir event loop
    • LibDNS kini menjalankan lookup di thread pool, mengirim query A dan AAAA secara paralel, serta menggabungkan lookup bersamaan untuk nama yang sama (#9109)
    • Jalur preconnect RequestServer diperbaiki agar tidak melewati resolver, sehingga threaded resolver milik libcurl yang sebelumnya memicu pthread_join di main thread kini dirutekan ke jalur DNS pool yang sama (#9109)
    • Saat WebContent lebih lambat daripada jaringan, drain data respons yang antre di RequestServer memiliki kompleksitas O(n²), dan saat membuka video YouTube, proses ini menghabiskan sekitar 30 detik di memcpy dan 3 detik di Vector::remove
    • AllocatingMemoryStream diubah menjadi daftar chunk singly-linked sehingga konsumsi menjadi O(1) (#9028)
    • Header Accept untuk permintaan gambar kini mengiklankan AVIF dan WebP agar selaras dengan engine lain; beberapa CDN menggunakan header ini untuk menentukan apakah akan menyajikan format modern atau fallback JPEG (#9046)
  • Invalidasi style

    • Invalidasi selector sebelumnya sederhana karena berasumsi selector hanya melihat ke bawah, tetapi dengan :host dan :has(), perubahan descendant dapat mengubah hasil :has() pada ancestor sehingga diperlukan walk yang bergerak ke atas
    • Mutasi stylesheet kini tidak lagi membangun ulang seluruh cache style scope ketika hanya satu scope yang berubah, sehingga rebuild cache rule Reddit turun dari 13,2 detik → 3,2 detik (#9138)
    • Invalidasi struktural sibling kini tidak menyebar ke descendant yang tidak mengamati posisi, sehingga recompute yang tidak perlu pada infinite scroll Reddit berkurang 11% (#9155)
    • Invalidasi mutasi :has() kini melewati anchor yang tidak terdampak, dan penurunan besar terukur di azure.com (#9168)
    • Pada PDF Intel ISA, kunjungan child-list :has() turun dari 71k → 1,6k, menghemat sekitar 650 ms saat memuat pdf.js (#9179)
    • Paket pengujian structural-invalidation baru mengungkap beberapa invalidasi yang terlewat dan semuanya telah diperbaiki (#9095)
    • Juga mencakup perbaikan kecil di sekitar hover, scope mutasi stylesheet, peta custom-property, dan computed-style diffing (#9077, #9049, #9079, #9080, #9141)

Alokasi memori dan sistem build

  • mimalloc sebagai allocator default

    • Kode C++ dan Rust kini berbagi satu instance allocator mimalloc v2 tanpa masing-masing melewati system allocator (#8752)
    • Karena malloc() tidak dioverride untuk seluruh sistem, library pihak ketiga tetap mempertahankan contract allocator-nya sendiri
    • Benchmark JS membaik secara keseluruhan
  • Rust diwajibkan dan sistem build dirapikan

    • Opsi build ENABLE_RUST dihapus sehingga Rust menjadi wajib (#8742)
    • Sistem build GN dihapus sepenuhnya sehingga CMake menjadi satu-satunya acuan (#8931)
  • Perubahan terkait GC dan memori

    • Kompilasi kini menggunakan -ftrivial-auto-var-init=zero untuk menimpa GC pointer lama dengan 0 saat fungsi mulai berjalan, sehingga conservative stack scanner lebih jarang menemukannya (#9171)
    • Properti UsedValues yang jarang dipakai dipindahkan ke belakang lazy pointer, sehingga ukuran struct menyusut dari 424 byte → 176 byte, dan LayoutState::populate_node_from() saat memuat sainsburys.co.uk turun dari 139 ms → 65 ms (#9104)
    • Chunk body fetch yang sebelumnya melewati jalur pull-promise dan mengalokasikan 7 object GC per chunk kini langsung masuk ke byte stream controller (#9169)

Perilaku situs yang ditingkatkan

  • Reddit

    • Carousel galeri gambar Reddit kini berfungsi, dan dua bug layout yang tidak saling terkait di sekitar ::slotted() matching dan descendant yang diposisikan absolut dari split inline telah diperbaiki(#9148)
    • Berkat TextDecoderStream, SPA tidak lagi menelan klik tautan sehingga komentar bisa dibuka
    • Infinite scroll juga terdampak oleh pekerjaan structural invalidation
  • YouTube

    • YouTube mendapat dampak dari off-thread top-level JS compile, off-thread WOFF2 decompression, pengurangan @font-face fetch fanout, perbaikan RequestServer memory churn, dan zero-copy TransferArrayBuffer
    • Off-thread WOFF2 decompression juga menghemat sekitar 170ms di Gmail(#8976)
    • Pada pemuatan awal, @font-face fetch fanout berkurang dari 177 → sekitar 9(#9032)
  • Situs lainnya

    • gocomics.com kini menampilkan gambar header berkat image-set()
    • yandex.com/maps kini menjalankan rendering WebGL vector-tile berkat perbaikan WebGL, termasuk ekstensi WEBGL_debug_renderer_info(#9043)
    • strava.com kini bisa login karena Navigator.getBattery melempar tipe error yang diwajibkan spesifikasi, bukan error buatannya sendiri(#8770)
    • GitHub Insights dimuat sekitar 100ms lebih cepat berkat selector cache untuk Element.matches() dan .closest()(#8987)
    • Halaman perbandingan laptop di tweakers.net menjadi sekitar 31% lebih cepat berkat indexed HTMLFormElement property name lookup(#9009)
    • neon.com tidak lagi crash(#8812)
    • channel4.com memperbaiki masalah perataan vertikal pada category text berkat perbaikan flex auto-margin resolution(#9050)
    • Cloudflare Turnstile masih belum bisa dilewati, tetapi gagal jauh lebih cepat berkat auth-scheme handling, optimasi Array.prototype.shift(), dan hardening UA event handler pada elemen range serta number <input>(#9063)

WPT dan perubahan platform lainnya

  • Web Platform Tests

    • Skor WPT naik dari 2,003,537 → 2,067,263, mencatat kenaikan 63.726 subtest bulan ini
    • Namun, WPT mengimpor upstream test262, suite conformance ECMAScript resmi, sehingga menambah 53.207 subtest JavaScript
    • Ladybird sudah menjalankan test262 secara terpisah selama bertahun-tahun, dan karena conformance LibJS dalam kondisi baik, ia lulus 52.045 di antaranya, yaitu 97,8%
    • Dari kenaikan 63,7k itu, sekitar 52k berasal dari impor test262, dan sisanya sekitar 11,7k adalah kemajuan nyata baru pada platform browser
    • Dengan impor test262, WPT kini mengukur conformance JavaScript bersama bagian platform lainnya
  • Teks, layout, proses, UI

    • Selection dan hit testing untuk teks dengan ligature berubah dari pendekatan yang mengasumsikan satu code unit per glyph menjadi menelusuri grapheme cluster dan membagi glyph advance ke grapheme terkait(#8829)
    • Menyetel innerHTML pada shadow root tidak lagi menginvalkan seluruh document layout tree, dan waktu layout-and-paint di pomax.github.io/bezierinfo berkurang 21%(#9191)
    • Menavigasikan popup tab ke situs lain tidak lagi menghentikan proses WebContent milik parent(#8730)
    • Di UI Qt, tab yang terbuka kini bisa diputar dengan Ctrl+Tab dan Ctrl+Shift+Tab(#8704)
    • Anda kini bisa men-scroll dengan menahan tombol tengah mouse sambil menyeret, atau masuk ke mode autoscroll dengan klik di tempat(#8881, #8928)
    • Jika input bilah alamat tidak bisa disanitasi menjadi URL atau kueri pencarian, kini akan ditampilkan error page yang sesuai alih-alih diam-diam dibuang(#9072)
    • TextDecoderStream, counterpart streaming dari TextDecoder, telah diimplementasikan, dan kini menahan partial UTF-8 di batas chunk sehingga pengeditan komentar Reddit dimungkinkan(#9143)
    • Pesan BroadcastChannel lintas proses kini dirutekan lewat IPC antara proses WebContent dan WebWorker, sehingga listener bekerja sama seperti di browser lain, di proses mana pun mereka berada(#8865)

1 komentar

 
GN⁺ 1 jam lalu
Komentar Hacker News
  • Jika ingin memakai browser tanpa JavaScript, prototipe browser yang dibuat Dioxus juga makin bagus
    Dioxus, framework GUI Rust, sedang dikembangkan sebagai bagian dari native renderer, dan arahnya adalah membuat alternatif Skia sendiri seperti Flutter, tetapi alih-alih hanya memakai canvas seperti Flutter web, di web ia tetap berjalan dengan standar HTML/CSS
    Implementasinya nyaris dibuat dari nol tanpa bergantung pada basis kode browser yang ada seperti Chromium, Gecko, atau WebKit, sambil memanfaatkan crate Rust seperti stylo dan taffy yang juga dipakai Servo: https://github.com/DioxusLabs/blitz (/apps/browser)
  • Bagian tersulit dalam pengembangan browser selalu kompatibilitas web yang dibuat-buat
    Banyak situs memblokir pemuatan di browser tertentu dan hanya mengizinkan Chromium, dan inilah kenyataan yang akan dihadapi Ladybird serta salah satu faktor besar yang menghambat persaingan browser baru
    DRM Widevine juga sangat sulit didapatkan browser baru, dan bahkan Zen Browser yang punya 10 juta pengguna pun gagal mendapatkannya
    • Sayangnya, generasi baru tidak belajar dari pelajaran IE, dan justru menjadi pihak yang paling cepat mengeluh bila pihak lain tidak mengikuti arus Chrome OS Platform
    • Saya tidak tahu seberapa sering pemblokiran seperti itu benar-benar terjadi
      Saya sudah memakai Firefox selama 20 tahun terakhir, tetapi belum pernah melihat situs yang meminta saya beralih ke Chromium demi kompatibilitas
    • Jika gerbang buatan seperti ini cukup besar dampaknya terhadap interoperabilitas, maka 99% rintangan sebenarnya sudah terlewati, dan sebagian besar bisa dilewati dengan menyamarkan string User-Agent
      Widevine memang gerbang yang nyata, tetapi secara praktis paling hanya menghalangi pemutaran 4K di beberapa situs streaming seperti Netflix dan Disney
      Fakta bahwa Zen bisa mengumpulkan 10 juta pengguna tanpa Widevine juga menunjukkan bahwa ini sulit dianggap sepenting itu
    • Ladybird baru-baru ini mulai melaporkan dirinya sebagai Chrome justru karena alasan ini
    • Untuk tujuan pengujian kompatibilitas, User-Agent bisa ditiru
      Jika Anda mengendalikan browser itu sendiri, selain masalah terkait DRM, hampir tidak ada yang benar-benar mustahil
  • Kelihatannya sudah mulai cukup layak dipakai
    Tulisan seperti ini mengingatkan pada serunya membaca pembaruan emulator game
    Semacam, “bug X diperbaiki sehingga Y sekarang berfungsi dengan benar, dan akibatnya game Z bisa jalan”, dan salah satu yang diperbaiki kali ini adalah CSS Doom, jadi memang ada sedikit irisan dengan dunia game
    • Analogi yang tepat
      Saya pernah beberapa kali mendengar Andreas mengatakan bahwa membuat browser itu seperti membuat emulator
      Tiap situs memakai fitur yang berbeda dengan cara yang berbeda pula, dan ia menyamakan situs web dengan ROM
  • Ladybird benar-benar berkembang dengan baik
    Saya pengguna Firefox lama, tetapi begitu Ladybird masuk ke alpha yang sangat awal dan build pra-kompilasi mulai tersedia, saya pasti akan mencobanya sejak awal
    • Kalau ingin mencoba menjalankannya sekarang, build lokalnya mudah, cukup beberapa perintah untuk memasang dependensi dan menjalankan skrip build: https://github.com/LadybirdBrowser/ladybird/blob/master/Docu...
    • Mozilla setidaknya butuh dorongan yang kuat
    • Mengompilasinya sendiri juga cukup mudah, apalagi kalau meminta Claude Code yang melakukannya
  • GTK4 / libadwaita frontend terdengar bagus
    Saya lebih suka UI/UX GTK daripada Qt, jadi saya menantikan perkembangan di sisi ini
  • strava.com : Login works now that Navigator.getBattery throws the spec-mandated error type instead of one of our own (#8770).
    Kenapa Strava ingin tahu sisa baterai saya?
    • Kemungkinan besar untuk membuat sidik jari unik guna pelacakan
    • Bisa juga API baterai dipakai sebagai heuristik untuk memilih versi situs berdaya rendah
      Mungkin ada versi web khusus untuk negara berkembang, atau jika baterai rendah mereka ingin mengurangi frekuensi pengambilan lokasi demi penghematan
      Ini murni dugaan, tetapi tidak sepenuhnya tidak masuk akal bila situs seperti Strava meminta info baterai, hanya saja tetap terasa agak mencurigakan secara umum
    • Strava adalah layanan pelacakan rute
      Jika diasumsikan bisa dipakai lewat situs web, kemungkinan besar mereka ingin menyesuaikan frekuensi pengambilan lokasi untuk menyeimbangkan akurasi dan konsumsi daya
    • Bot yang mencoba membobol akun dengan brute force mungkin tidak mengimplementasikan API itu seperti perangkat nyata
  • Tulisan sebelumnya: https://news.ycombinator.com/item?id=47985497
  • Arah yang dituju SerenityOS benar-benar bagus, dan saya berharap fokus itu tetap terjaga di browser Ladybird
  • Selamat
    Hanya saja, tangkapan layar penanda daftar untuk teks RTL terlihat sama
    Di kedua kasus, penanda daftar ada di sebelah kiri
  • https://ladybird.org/assets/img/newsletter-apr-2026-reddit-g...
    Saya benar-benar menghormati orang yang memakai Evangelion r/unixporn untuk pengujian Reddit di Ladybird
    Saya tidak terlalu banyak menonton Evangelion, tetapi saya sudah tak terhitung kali menonton dokumenter penjelasannya dan bahkan pernah memakainya sebagai wallpaper, jadi saya menyukainya
    Intinya, Reddit berjalan di Ladybird itu luar biasa
    Saya tidak tahu apakah YouTube juga jalan, tetapi semoga iya, dan rasanya Ladybird benar-benar mulai layak dipakai sehari-hari
    Terima kasih juga kepada https://jakubsteplow.ski/ yang telah mendukung Ladybird
    Saya ingin orang-orang yang menyumbang ke proyek open source lebih sering disorot dengan cara yang lebih baik daripada iklan Google atau semacamnya, dan saya mendoakan yang terbaik untuk Jakub, serta berharap orang lain juga mau berdonasi secara mandiri ke proyek seperti Ladybird
    Terima kasih juga kepada Human Rights Foundation https://hrf.org/program/ai-for-individual-rights/
    Fakta bahwa browser selama ini nyaris berada dalam kondisi monopoli/oligopoli tunggal-ganda, dan satu orang bisa membawa proyek ini sejauh ini, sungguh mengejutkan dan menginspirasi
    • Saya suka EVA, tetapi akan merekomendasikannya dengan hati-hati
      Ada dua sisi besar: satu adalah sci-fi mecha/alien/monster dengan estetika yang keren, dan satu lagi adalah drama personal yang berfokus pada kebencian diri dan kesepian
      Bagi kebanyakan orang, sisi pertama mungkin lebih menarik, tetapi yang terus membekas sampai sekarang justru sisi kedua
      Kalau jadi menonton, urutan tonton perlu diperhatikan
      Ada linimasa yang dimulai dari serial TV orisinal lalu berlanjut ke film “End of Evangelion”, dan ada juga seri film “Rebuild of Eva” yang dimulai sebagai reboot total tetapi entah bagaimana menjadi reboot/remake/sekuel final dari karya aslinya
    • https://ladybird.org/#about
      Sebagai jawaban atas pertanyaan “berapa orang yang mengerjakan browser saat ini?”, tertulis bahwa Ladybird saat ini memiliki 8 engineer penuh waktu berbayar dan juga komunitas kontributor sukarelawan yang besar
    • YouTube berjalan di Ladybird
      Sebagian besar hal juga berjalan, tetapi selain kecepatan, masalah terbesarnya adalah banyak pemeriksaan ‘apakah Anda manusia’ tidak berfungsi dengan baik di Ladybird