Svelte Neden Sanal DOM Kullanmaz? Derleme Zamanında Reaktivitenin Gücü

Modern arayüzlerde temel problem basittir: Uygulamanın durumu değiştiğinde ekrandaki doğru bölüm de güncellenmelidir. Birçok framework bu problemi tarayıcıda çalışan bir Sanal DOM katmanıyla çözerken Svelte farklı bir soru sorar: Yapılacak güncellemeleri derleme sırasında biliyorsak neden çalışma zamanında tekrar hesaplayalım?

Devamı...

SQL Pencere Fonksiyonları: GROUP BY Olmadan Güçlü Veri Analizi

Bir satış tablosundaki her kaydı korurken toplam ciroyu, ürün sıralamasını veya önceki güne göre değişimi görmek istediğinizi düşünün. GROUP BY satırları özetleyerek detayları ortadan kaldırırken pencere fonksiyonları, satırlara dokunmadan analitik sonuçlar üretir. Başka bir deyişle veri aynı kalır, fakat her satır yanında küçük bir analist taşımaya başlar!

sql-pencere-fonksiyonlari-39

Devamı...

Rust'ta unsafe: Derleyiciyi Susturmak Değil, Sorumluluğu Devralmak

Rust denince akla ilk olarak bellek güvenliği gelir. Ancak dilin ortasında, üzerinde kocaman bir uyarı etiketi varmış gibi duran unsafe anahtar sözcüğü bulunur. Bu ilk bakışta çelişkili görünebilir: Bellek hatalarını önleyen bir dil neden güvenlik kontrollerini aşmaya izin versin? Çünkü bazı doğru programların güvenli olduğunu derleyici kanıtlayamaz. unsafe, güvenliği çöpe atmak değil; belirli kuralları doğrulama sorumluluğunu programcıya devretmektir.

Devamı...

Python'da Metaclass'lar: Sınıfları Üreten Sınıfların Karanlık Dünyası

Python’da her şeyin bir nesne olduğunu duymuşsunuzdur; buna sınıflar da dahildir. Bir sınıf örnekleri üretirken, metaclass da sınıfları üretir. Kulağa programlama dünyasının matruşka bebeği gibi geliyor: nesnenin arkasında sınıf, sınıfın arkasında ise metaclass vardır. Genellikle “ihtiyacın olduğunu düşünüyorsan muhtemelen yoktur” uyarısıyla anılsalar da metaclass’lar, Django ve SQLAlchemy gibi araçların etkileyici otomasyonlarının temel parçalarındandır.

pythonda-metaclasslar-siniflari-27

Devamı...

PostgreSQL JSONB: İlişkisel Veritabanında NoSQL Esnekliği ve Performansı

Bir uygulamanın ürün kataloğunda telefonların ekran boyutu, ayakkabıların numarası, kahvelerin kavurma derecesi olabilir. Her kategori için onlarca nullable sütun açmak istemiyorsanız PostgreSQL’in JSONB tipi imdada yetişir. JSONB, değişken yapılı verileri saklarken SQL, transaction ve ilişkisel bütünlük gibi PostgreSQL güçlerinden vazgeçmeden doküman yaklaşımından yararlanmanızı sağlar.

Devamı...

Neo4j ve Cypher ile Graf Tabanlı Tavsiye Sistemleri Kurmak

neo4j-ve-cypher-95

Bir arkadaşının beğendiği filmi sana önermek kolaydır; arkadaşının arkadaşlarının izlediği, senin tür tercihlerinle örtüşen ve benzer kullanıcıların yüksek puan verdiği filmi bulmak ise ilişkiler derinleştikçe zorlaşır. Neo4j, verileri satırlar yerine düğümler ve doğrudan bağlantılar biçiminde saklayarak bu tür soruları doğal şekilde modellememizi sağlar. Cypher sorgu dili de karmaşık ilişki ağlarında gezinmeyi, okunabilir desenler tarif etmeye dönüştürür.

Devamı...

Kotlin Coroutines'in Perde Arkası: Suspend Fonksiyonlardan State Machine'e

Kotlin’de suspend anahtar sözcüğünü gördüğümüzde kodun sihirli biçimde arka plana taşındığını düşünebiliriz. Oysa coroutine’lerin asıl numarası yeni bir thread oluşturmak değil, çalışmayı uygun noktalarda durdurup daha sonra kaldığı yerden sürdürebilmektir. Kotlin derleyicisi bunu gerçekleştirmek için askıya alınabilen fonksiyonları birer durum makinesine, yani state machine’e dönüştürür.

Devamı...

Go'da Garbage Collector Optimizasyonu: Pointersız Struct'ların Gücü

goda-garbage-collector-91

Go’nun Garbage Collector’ı geliştiriciyi manuel bellek yönetiminden kurtarır; ancak milyonlarca nesneyle çalışan servislerde bu konforun küçük bir faturası vardır: GC, canlı işaretçileri bulmak için heap üzerindeki nesneleri tarar. Struct’larımızı işaretçi içermeyecek biçimde tasarladığımızda Go çalışma zamanı bu nesneleri noscan olarak sınıflandırabilir. Böylece nesnelerin kapladığı bellek hâlâ yönetilirken içlerinin pointer aramak amacıyla taranmasına gerek kalmaz.

Devamı...

Elixir ve Akka’da Actor Modeli: Mesajlarla Gelen Eşzamanlılık

Geleneksel nesne yönelimli programlamada bir nesne diğerinin metodunu çağırır ve çoğu zaman aynı belleği paylaşır. Actor modelinde ise bağımsız aktörler birbirlerine mesaj gönderir. Böylece kilitler, yarış koşulları ve hata yayılımı daha yönetilebilir hâle gelir. Elixir ile Akka bu fikri farklı araçlarla uygular; biri Erlang VM’nin doğal yeteneklerine, diğeri JVM ve Scala ekosistemine yaslanır.

elixir-ve-akkada-59

Devamı...

Deno vs Node.js: Güvenlik, TypeScript ve Modül Yönetiminde Yeni Nesil Rekabet

Node.js’in yaratıcısı Ryan Dahl, yıllar sonra bazı tasarım kararlarından pişman olduğunu açıkladı ve bu deneyimden doğan fikirlerle Deno’yu geliştirdi. Deno; varsayılan güvenlik kısıtlamaları, yerleşik TypeScript desteği ve URL tabanlı modül sistemiyle JavaScript çalışma ortamlarına daha modern bir yaklaşım getiriyor. Peki bunlar gerçek projelerde ne kadar fark yaratıyor?

Devamı...

Dağıtık Kilitler: Redis ve ZooKeeper ile Çakışmaları Yönetmek

Bir e-ticaret sisteminde iki sunucunun aynı son ürünü eş zamanlı sattığını düşünün. Her ikisi de stok değerini 1 olarak okur, siparişi onaylar ve stoğu 0 yapar. Sonuç: Bir ürün, iki mutlu müşteri ve kısa süre sonra pek de mutlu olmayan bir destek ekibi! Dağıtık kilitler, farklı makinelerde çalışan süreçlerin ortak bir kaynağı kontrollü biçimde değiştirmesini sağlar.

Devamı...

CSS Houdini: Tarayıcının Çizim Motoruna JavaScript ile Dokunmak

css-houdini-tarayicinin-31

CSS güçlüdür; ancak standartlara eklenmemiş bir görsel efekt veya yerleşim davranışı istediğimizde çoğunlukla JavaScript ile DOM elemanları üretmeye başlarız. CSS Houdini ise sihirbaz şapkasından tavşan değil, tarayıcının işleme sürecine kontrollü kancalar çıkarır. Böylece geliştiriciler özel CSS özellikleri tanımlayabilir, görseller çizebilir ve deneysel olarak yeni yerleşim algoritmaları geliştirebilir.

Devamı...

CAP Teoreminden PACELC’ye: Ağ Bölünmesi Yokken Hangi Bedeli Ödüyoruz?

Dağıtık sistem tasarlarken CAP teoremi genellikle sahnenin yıldızıdır: Ağ bölünmesi yaşandığında tutarlılık mı, erişilebilirlik mi? Fakat sistemler hayatlarının büyük bölümünü ağ felaketi yaşamadan geçirir. İşte PACELC, projektörü bu sakin anlara çevirir ve rahatsız edici soruyu sorar: “Ağ düzgün çalışırken düşük gecikme mi, güçlü tutarlılık mı istiyorsun?” Çünkü dağıtık sistemlerde ücretsiz öğle yemeği yoktur; yalnızca faturanın farklı zamanlarda gelmesi vardır.

Devamı...

C++20 Concepts ile Şablon Hatalarını İnsan Diline Çevirmek

C++ şablonları güçlüdür; ancak yanlış bir tür kullandığınızda derleyici bazen küçük bir hatayı yüzlerce satırlık bir destana dönüştürür. C++20 ile gelen Concepts, şablon parametrelerinden ne beklendiğini açıkça tanımlayarak bu sorunu büyük ölçüde çözer. Böylece hem derleyici daha anlaşılır hata verir hem de fonksiyonun kabul ettiği türler kaynak koddan okunabilir.

Devamı...

Terraform State Yönetimi: Çakışmaları ve Gizli Bilgi Sızıntılarını Önlemek

Terraform ile birkaç kaynak oluşturmak kolaydır; asıl macera aynı altyapıyı bir ekip yönetmeye başladığında ortaya çıkar. Terraform State dosyası, tanımladığımız kod ile bulutta gerçekten bulunan kaynaklar arasındaki köprüdür. Ancak yanlış saklanan veya eş zamanlı güncellenen bir State, altyapıyı otomatikleştiren dostumuzun kısa sürede kaos makinesine dönüşmesine neden olabilir.

Devamı...

SRE Hata Bütçesi: Kusursuzluk Yerine Kontrollü Güvenilirlik

Bir sistemin hiç bozulmamasını istemek kulağa harika gelir; ancak yüzde yüz güvenilirlik hedefi, ekipleri yenilik yapmak yerine sonsuza kadar risk azaltmaya sürükleyebilir. Google’ın Site Reliability Engineering yaklaşımıyla yaygınlaştırdığı hata bütçesi, kullanıcıların kabul edebileceği arıza payını ölçülebilir bir geliştirme özgürlüğüne dönüştürür. Böylece ekip, “Hiç hata olmasın!” gibi gerçekçi olmayan bir hedef yerine, “Ne kadar hata kabul edilebilir ve bu payı nasıl yöneteceğiz?” sorusunu sorar.

Devamı...

Spot Sunucularla Ucuza Hesaplama: Kesilse de Yola Devam Eden Sistemler

spot-sunucularla-ucuza-89

Bulut faturanız roket gibi yükselirken spot sunucular bir indirim kuponu gibi yetişebilir. Bulut sağlayıcıları, boşta duran işlem kapasitesini standart fiyatın oldukça altında kiralar. Ancak küçük bir şartları vardır: Sağlayıcı kapasiteye ihtiyaç duyduğunda sunucunuzu kısa bir bildirimle kapatabilir. Dolayısıyla spot dünyasında temel soru “Sunucu kapanır mı?” değil, “Kapandığında uygulama ne yapar?” olmalıdır.

Devamı...

SOLID'in O'su: Açık/Kapalı Prensibini Polimorfizmle Uygulamak

Bir uygulamaya yeni özellik eklemek bazen küçük bir değişiklik gibi başlar, ardından onlarca if bloğuna dokunulan riskli bir operasyona dönüşür. SOLID ilkelerinin O harfiyle temsil edilen Açık/Kapalı Prensibi, yazılım bileşenlerinin genişletilmeye açık, değiştirilmeye kapalı olmasını önererek bu soruna çözüm getirir. Amaç mevcut kodu sonsuza kadar dondurmak değil, yeni davranışları mümkün olduğunca yeni kod yazarak sisteme katabilmektir.

Devamı...

Servis Ağları: Istio ile Mikroservis Trafiğini Yönetmek

Mikroservis mimarisinde servis sayısı arttıkça ağ trafiği küçük bir şehir merkezine dönüşür: İstekler farklı rotalara sapar, bazı servisler yavaşlar ve güvenlik kontrolleri her köşede yeniden yazılır. Service Mesh, uygulama kodunu değiştirmeden bu karmaşayı yöneten bir trafik katmanıdır. Istio ise Envoy proxy’lerini kullanarak güvenlik, gözlemlenebilirlik ve akıllı yönlendirme özelliklerini Kubernetes ortamına taşır.

servis-aglari-istio-58

Devamı...