8 haftadır küçük bir tarayıcı yapıyorum.
(github.com/beginner-jhj)Merhaba! Bilgisayar mühendisliği bölümüne başlamaya hazırlanan son sınıf bir lise öğrencisiyim.
8 hafta boyunca C++ ve Qt kullanarak küçük bir tarayıcı motorunu sıfırdan geliştirdim.
C++ ile ilk kez bu projede tanıştığım için sayısız deneme-yanılma yaşadım, ancak render pipeline'ın temelini doğrudan kodlayarak çok şey öğrendim.
Tüm render pipeline'ı 5 aşamaya ayırarak uyguladım:
-
HTML dizgesini analiz ederek DOM ağacı oluşturma (hata düzeltme dahil)
-
CSS kurallarını parse etme ve Cascade ile Computed Style hesaplama
-
Block/Inline modeli tabanlı kutuların konum ve boyutlarını hesaplama
-
Görselleri önbelleğe alma ve yükleme sonrasında yerleşimi yeniden hesaplama (Reflow)
-
Qt Graphics View Framework kullanarak son Painting işlemi
İlk kez öğrendiğim C++ ile yazılmış bir kod olduğu için eksikleri çok olabilir.
Kod yapısı ya da geliştirme yönü hakkında geri bildirim verirseniz memnuniyetle öğrenirim!
Daha ayrıntılı bilgiye https://github.com/beginner-jhj/mini_browser/blob/main/README.ko.md adresinden ulaşabilirsiniz.
14 yorum
Öncelikle desteğiniz için teşekkürler.
Bir web tarayıcısı yapmayı düşünmek bile...
Artık güzel bir deneyim kazandığınıza göre...
Chromium kodunu indirip...
derlemeyi deneyerek
ve analiz ederek deneyim kazanmanız da iyi olabilir.
Çünkü yaratım, taklidin anasıdır.
İlginç bir çalışma yapmışsınız. Claude kullanmadan bunu doğrudan kendiniz yapsaydınız belki daha fazla şey öğrenebilirdiniz diye düşünüyorum, ama yapay zeka kullanımının ana akım haline geldiği bu dönemde bunun da iyi bir deneyim olduğunu söyleyebilirim.
Bir fikir vermek gerekirse, bu deneyime dayanarak bir
og tagparser’ı yapmayı düşünebilirsiniz.og tag, web sayfasında ayarlanan temsilî küçük görsel gibi basit bilgileri içerir. Bunu almak DOM parser kullanılırsa kolay bir iştir, ancak DOM parser’ların ağır olması gibi bir sorun vardır.Bu yüzden başka bir DOM parser kullanmadan, tüm DOM’u tamamen parse etmeden, yalnızca belirli tag bilgilerini alan küçük ve verimli bir parser uygularsanız faydalı bir kütüphane olabilir.
Özellikle mobil uygulamalarda böyle bir kütüphanenin eksikliğini hissediyorum. Bunu
javascript/koltlin/swiftdilleriyle mobil için yaparsanız popüler bir açık kaynak kütüphanesi olabilir.CSAT bittikten sonra üniversiteye başlayana kadar bol bol eğlendiğimi hatırlıyorum sadece... README'yi okuyunca temel noktaları gayet iyi kavradığınızı düşündüm. Ben de bu kitabı okuyup
swiftile uygulamıştım. hahaAman, acaba hangi kitap olabilir? README'yi bir kez okudum ama kitapla ilgili bir bahsin geçtiğini göremedim...!
README'de böyle bir içerik yokmuş. İçerik kitaba benzediği için benim yanılgım... özür dilerim;;;
Kitabın adı 'Temelden Başlayarak Web Tarayıcısı'. Kitaptaki örnekler Python ile uygulanmış.
Haber verdiğiniz için çok teşekkürler :D Kyobo Kitabevi'nde bir göz atmam gerekecek..!
Lise son sınıftayken Linux APM kurulumundan biraz anlıyorum diye geliştirici topluluklarında artistlik taslıyordum
vay be, oha
Çok keyifle okudum!
Yapmaya çalışıp denemiş olmanın bile birinci sınıf olduğunu düşünüyorum. README de adeta başlı başına bir rapor gibiydi, bu yüzden daha da keyifliydi.
Bir sonrakinin ne olacağını merakla bekliyorum haha
Gerçekten harikasınız.
Kısaca göz attım ama ben lise son sınıftayken bunu hayal etmeye bile cesaret edemezdim; umarım bilgisayar bilimlerini iyi çalışıp harika bir mühendis olursunuz.
Teşekkür ederim! Çok çalışıp harika bir mühendis olarak gelişeceğim!
Büyük bir keyifle okudum! Size kişisel olarak sormak istediğim bir şey var; acaba sizinle iletişime geçebileceğim bir yol var mı?
Uzun yazıyı okuduğunuz için gerçekten çok teşekkür ederim! Benimle
hj5014221@gmail.comadresinden iletişime geçebilirsiniz.Link bozuk görünüyor :(
Ah, ana repo bağlantısını paylaşayım! https://github.com/beginner-jhj/mini_browser