Ana içeriğe geç
Ahmet Faruk UzunkayaYaratıcı geliştirici

Yazılar ve notlar

Proje yaparken kurcaladığım ayrıntıları yazıya döküyorum: render motorlarından tarayıcıdaki işletim sistemlerine, mimari kararlardan ölçümlere kadar.

Tüm yazılar / 13

Grafik, yazılım ve tasarım üzerine çalışma notları.

  1. Photon Engine'le yan yana, prodüksiyon seviyesinde bir path tracer rehberiIşık taşınımından BVH'ye, malzeme modellerinden renk yönetimine, USD girişinden doğrulama testlerine kadar bir path tracer'ın on beş katmanını tek tek anlatıyorum. İlgili bölümlerin sonuna da C++20 ile yazdığım Photon Engine'in o konuda ne yaptığını not ettim.C++20 · Path Tracing8 Ekim 202662 dk
  2. ElementAPI'de demir sayfası neden veritabanına hiç uğramıyorSaga yazısının devamı. Bilimsel katalog, açılışta belleğe aldığı bir JSON'dan cevap veriyor; v2 API'si de alan seçimi ve ETag'le herkese açık. Sonra JWT'yi doğrulayan tek servis olan identity-service'e, tarayıcıda duran misafir defterine, üç compose profiline ve Jenkins ile Playwright'a geçiyorum.REST API · .NET7 Ekim 202610 dk
  3. Tarayıcıda sekiz işletim sistemi yazdım, her birinde başka bir state modeli çıktıPencere yöneticisini, dosya sistemini ve uygulama kaydını beş masaüstünde sıfırdan kurdum ve her seferinde işe başka bir yerden girdim. "Kaydetmeden kapatılsın mı?" sorusunu da üç ayrı şekilde çözdüm. Ubuntu'nun kabuğu yan etkilerini geri veriyor, WebDroid intent'leri WebSocket üzerinden taşıyor, iPhone'un ekranı da bir 3D modelin üstüne oturtulmuş canlı DOM.React · Mimari7 Ekim 20268 dk
  4. Indie Valley'de istemciye güvenmeyen bir API kurmakToggle yerine durumu bildiren uçlar, tekrar kullanılınca bütün aileyi iptal eden refresh token'lar, baştan kurulabilen bir Redis indeksi ve yayına çıkmadan önce kendini kanıtlaması gereken dosyalar. Dört kararın da derdi aynı: aynı istek iki kez gelirse ne olur?NestJS · API Tasarımı8 Ekim 20264 dk
  5. İstanbul Park'ı bir SVG çiziminden tarayıcıda sürülebilir bir piste çevirmekSitenin ana sayfasındaki 3D pist, Wikimedia'daki Istanbul_park.svg'den çıkarılmış 329 noktalık bir çizgiden üretiliyor. Bu çizginin sürülebilir bir yola nasıl dönüştüğünü, yolun ilk başta neden görünmediğini, ağaçların karedeki üçgenlerin neredeyse tamamını neden yediğini ve farın bütün ekranı neden kararttığını anlatıyorum.Three.js · React Three Fiber8 Ekim 20266 dk
  6. Three.js masasındaki iPhone'a canlı bir DOM ekranı yerleştirmekiPhone klonumda telefonun ekranı, 3D modelin içine oturtulmuş gerçek bir React ağacı. O ekranı modele nasıl yerleştirdiğimi, kamera dönerken yazıların neden titrediğini ve telefonlarda 3D sahnenin neden hiç yüklenmediğini anlatıyorum.Three.js · React Three Fiber8 Ekim 20267 dk
  7. WebDroid'de iki sekmenin birbirini aramasıWebDroid'de iki tarayıcı sekmesi iki ayrı Android telefona dönüşüyor, birbirine mesaj atıyor ve sesli arama yapıyor. Sekmeler arasında neyin taşındığını, aramanın nasıl kurulduğunu ve bu düzenin nerede çalışmayı bıraktığını kodun üzerinden anlatıyorum.WebRTC · WebSocket8 Ekim 20267 dk
  8. AFU · Console'da kumanda, klavye, fare ve dokunmatik için tek girdi modeliKonsol arayüzündeki ekranlar hangi aygıtın kullanıldığını bilmiyor; onlara yalnızca "yukarı", "onayla", "geri" gibi eylemler ulaşıyor. Dört girdiyi bu eylemlere nasıl çevirdiğimi, kumandada basılı tutunca tekrarın nasıl zamanlandığını, odak ızgarasını, sesleri osilatörle nasıl ürettiğimi ve bütün arayüzü tek bir CSS birimiyle nasıl ölçeklediğimi kodla anlatıyorum.Gamepad API · Web Audio8 Ekim 20266 dk
  9. React Native'de RTCPeerConnection yoktu, ben de sesi gizli bir WebView'a taşıdımDialoq'ta ses, kullanıcının hiç görmediği 1×1 piksellik bir WebView'da (web'de bir iframe'de) akıyor. Sayfa yüklenmeden gelen sinyaller kaybolmasın diye üç kuyruk kurdum, odalarda offer'ı kimin göndereceğini sabit bir kurala bağladım ve sunucuyu 44 backend testiyle sınadım.React Native · WebRTC7 Ekim 20267 dk
  10. Glance'te bir sonraki fotoğrafı sen ok tuşuna basmadan hazırlamakGlance'te "anında açılıyor" derken ölçülebilir bir şeyi kastediyorum: ok tuşuna bastığında görsel zaten çözülmüş ve GPU'da duruyor. Bunun için WIC'e doğrudan COM üzerinden gittim, ön yüklemeyi gezinme yönüne göre sıraladım ve önbelleği bayt bütçesiyle sınırladım. RAW önizleme tarayıcısı, dllhost'ta çalışan Gezgin küçük resimleri ve geri alınabilir silme de yazıda var.C# · WinUI 37 Ekim 20267 dk
  11. ElementAPI'de bir siparişi üç dilde yazılmış dört servise emanet etmekTek bir satın alma isteği Node, Java ve .NET servislerinden geçiyor, ama aralarında ortak bir transaction yok. Gateway'in gerçekte neyi denetlediğini, outbox'ı, zaman aşımı süpürücüsünü, KREDI'nin neden yalnızca bir kez iade edilebildiğini ve Idempotency-Key'i neden doğrudan sipariş kimliği yaptığımı kodun üzerinden anlatıyorum.Mikroservis · Saga30 Eylül 20268 dk
  12. Tarayıcıdaki Windows 11'imde açılışı bilerek yavaş tuttumreact-os-win'de açılışı bilerek yavaşlattım ve bütün süreleri tek bir dosyada topladım. Pencereleri 14 action'lık saf bir reducer yönetiyor, 19 uygulamanın her biri de kendi hata sınırına sarılmış lazy bir bileşen. z-index sayacını, snap düzenlerini, localStorage'a neyin yazıldığını ve testlerin neyi kapsadığını koda bakarak anlatıyorum.React · TypeScript30 Eylül 20267 dk
  13. PhotonEngine'de görüntü karıncalı kalmasın diye yaptıklarımC++20 ile yazdığım CPU path tracer'da ışığı doğrudan örnekliyorum, iki örnekleme stratejisini güç sezgiseliyle birleştiriyorum, Rus ruletinde en büyük renk bileşenine bakıyorum ve rastgele sayıları Owen-karıştırmalı Sobol'den alıyorum. Kesişimi Embree 4'e bırakmanın ölçtüğüm etkisi ve yol boyunca düzelttiğim cam ve clearcoat hataları da yazıda var.C++20 · Path Tracing30 Eylül 20268 dk