Constraint Programming Nedir? Kısıtlarla Planlama Problemlerini Çözmek

Bir ders programı hazırladığınızı düşünün: öğretmenlerin uygun saatleri, sınıf kapasiteleri, ders çakışmaları ve öğrencilerin seçmeli tercihleri aynı anda dikkate alınmalı. Bu tür problemlerde tek tek kurallar yazıp olasılıkları denemek hızla kontrolden çıkar. Constraint Programming (CP), yani kısıt programlama, çözümü doğrudan tarif etmek yerine çözümün uyması gereken kuralları tanımlayarak bu karmaşayı yönetir.

Devamı...

Bytecode ve Sanal Makineler: Kodun Donanım ile Yorumlayıcı Arasındaki Yolculuğu

Bir Python dosyasının, Java sınıfının veya C# projesinin ekranda sonuç üretmesi ilk bakışta sihir gibi görünebilir. Oysa kaynak kod ile işlemcinin anlayabildiği makine komutları arasında oldukça düzenli bir ara dünya vardır: bytecode ve onu çalıştıran sanal makine (VM). Bu ikili, farklı işletim sistemlerinde tutarlı davranış sağlamanın ve geliştirici deneyimini iyileştirmenin güçlü yollarından biridir.

Devamı...

Blue-Green Deployment ile Kesintisiz Sürüm Geçişleri

Üretim ortamında yeni bir sürümü yayımlamak, yalnızca kodu sunucuya kopyalamaktan ibaret değildir: kullanıcı deneyimi, geri dönüş planı ve veri tutarlılığı aynı anda korunmalıdır. Blue-Green Deployment, iki eşdeğer ortam arasında trafiği kontrollü biçimde değiştirerek güncelleme anındaki kesintiyi neredeyse görünmez hâle getiren güçlü bir dağıtım stratejisidir.

blue-green-deployment-78

Devamı...

Alfa-Beta Budamasında Hamle Sıralaması: Satranç Motorunun Budama Sanatı

alfa-beta-budamasinda-92

Bir satranç motoru için iyi hamleyi bulmak yalnızca güçlü bir değerlendirme fonksiyonu yazmak değildir; aynı zamanda yanlış yolları mümkün olduğunca erken terk etmektir. Alfa-beta budaması bunu sağlar, fakat gerçek performansın gizli kahramanı hamle sıralamasıdır. Şah çeken, değerli taş kazandıran ya da önceki aramalarda başarılı olmuş hamleleri önce denemek, motorun arama ağacını adeta elektrikli testereyle budamasına yardım eder.

Devamı...

A* Algoritmasıyla 15-Taş Bulmacasını Çözmek: Manhattan Mesafesi Rehberi

15-taş bulmacası, 4×4 bir tahtadaki numaralı taşları boş kareyi kullanarak hedef düzene getirmeyi ister. Görünüşte basit olan bu oyun, bilgisayar biliminin klasik durum-uzayı arama problemlerinden biridir: Her tahta dizilimi bir durum, boşluğun hareketi bir eylem, hedef dizilim ise çözülmek istenen noktadır. Amaç yalnızca bir çözüm bulmak değil, mümkün olan en az hamleli çözümü bulmaktır. İşte A* algoritması, doğru sezgisel fonksiyonla bu işi akıllıca yapar.

Devamı...

Zaman Serisi Analizi ve Tahminleme: Trend ile Mevsimselliği Koda Dökme

zaman-serisi-analizi-97

Zaman serileri, gözlemlerin yalnızca değerinden değil, ne zaman oluştuğundan da anlam çıkaran veri yapılarıdır. Bir mağazanın aylık satışları, elektrik tüketimi veya web sitesi trafiği buna örnektir. Geleceği tahmin etmenin sihirli bir kristal küre olmadığını baştan kabul edelim: Ama geçmişte tekrar eden desenleri yakalayarak oldukça makul tahminler üretebiliriz. Bu desenlerin en önemli ikilisi trend ve mevsimselliktir.

Devamı...

TDD: Kodu Yazmadan Önce Güven İnşa Etmek

Test Güdümlü Geliştirme (Test-Driven Development, TDD), üretim kodunu yazmadan önce o kodun beklenen davranışını bir testle tarif etme disiplinidir. İlk bakışta “henüz olmayan kodu nasıl test ederim?” sorusunu doğurur; fakat asıl güç tam burada saklıdır: Geliştirici önce çözümün iç yapısını değil, kullanıcıya sunduğu sonucu düşünür. Böylece kod, tahminlere göre değil, doğrulanabilir gereksinimlere göre büyür.

tdd-kodu-yazmadan-25

Devamı...

SVM’de Kernel Trick: Doğrusal Olmayan Sınırları Akıllıca Çizmek

Destek Vektör Makineleri (SVM), sınıflandırma dünyasının cetvelli öğrencisi gibidir: sınıfları ayıran en güvenli doğruyu bulmak ister. Ancak gerçek veriler nadiren iki kümeye ayrılmış, uslu uslu duran noktalar içerir. İç içe halkalar, kıvrımlı karar bölgeleri ve karmaşık örüntüler ortaya çıktığında doğrusal bir hiper düzlem yetersiz kalır. İşte kernel trick, veriyi görünmez biçimde daha yüksek boyutlu bir uzaya taşıyarak SVM’nin doğrusal araçlarla doğrusal olmayan sınırlar kurmasını sağlar.

Devamı...

Statik Kod Analizi Araçları: Hataları Daha Çalışmadan Yakalamak

Kodunuz derleniyor, testler yeşil yanıyor ve uygulama ilk bakışta kusursuz görünüyor olabilir. Yine de kullanılmayan bir yetkilendirme kontrolü, yanlış bir null işlemi veya kullanıcı girdisini doğrudan SQL sorgusuna ekleyen tek satır; üretimde pahalı bir arızaya ya da güvenlik ihlaline dönüşebilir. Statik kod analizi araçları, programı çalıştırmadan kaynak kodu inceleyerek bu riskleri geliştirme sürecinin erken anlarında görünür kılar. Kısacası bunlar, kod incelemesinden önce çalışan yorulmayan birer ekip arkadaşıdır.

Devamı...

SAT Çözücüleri ve DPLL: Boolean Kısıtları Pratikte Nasıl Çözülür?

Bir yazılım sistemindeki seçenek kombinasyonları arttıkça, “bu kuralların hepsini aynı anda sağlayan bir yapı var mı?” sorusu hızla zorlaşır. Ders programı hazırlama, devre doğrulama, bağımlılık çözümü ve test üretimi gibi işlerde karşımıza çıkan bu sorunun merkezinde Boolean Satisfiability Problem (SAT) bulunur. SAT, teorik olarak NP-tam olsa da modern çözücüler milyonlarca değişkenli bazı gerçek dünya örneklerini şaşırtıcı hızda çözebilir. Bu başarının temel taşlarından biri, klasik ama etkili DPLL algoritmasıdır.

sat-cozuculeri-ve-51

Devamı...

Redis ile Önbellekleme Stratejileri: Veritabanını Nefes Aldırma Sanatı

redis-ile-onbellekleme-18

Bir uygulama büyüdükçe en pahalı sorgular genellikle veritabanına tekrar tekrar yapılan, sonucu nadiren değişen okumalardır. Ürün kataloğu, kullanıcı profili, popüler içerikler veya kur bilgileri buna iyi örneklerdir. Redis, bu verileri RAM üzerinde tutarak milisaniyeler seviyesinde yanıt üretir; böylece veritabanı yalnızca gerçekten gerektiğinde devreye girer.

Devamı...

R ile İstatistiksel Hipotez Testleri: Normal Dağılım, t-Testi ve Ki-Kare

Veriyle çalışırken en heyecanlı soru şudur: Gördüğümüz fark gerçekten anlamlı mı, yoksa rastlantının küçük bir şakası mı? R, bu soruyu sistematik biçimde yanıtlamak için güçlü araçlar sunar. Normal dağılım varsayımını incelemek, ortalamaları t-testiyle karşılaştırmak ve kategorik ilişkileri ki-kare testiyle değerlendirmek; veri analistinin temel üçlüsüdür.

r-ile-istatistiksel-21

Devamı...

QUIC ve HTTP/3: UDP Üzerinde Hızlı, Güvenli ve Kayıp Paketlere Dayanıklı Web

quic-ve-http3-42

Web performansında milisaniyeler bazen kullanıcı deneyimini, bazen de bir satışın gerçekleşip gerçekleşmeyeceğini belirler. HTTP/3, bu yarışta yalnızca HTTP başlıklarını değiştirmez; alttaki taşıma katmanını da TCP’den QUIC’e taşıyarak oyunun kurallarını yeniler. QUIC, UDP datagramları üzerinde çalışan ancak TLS 1.3 şifreleme, güvenilir teslim, akış kontrolü ve tıkanıklık kontrolü gibi modern taşıma özelliklerini kendi içinde sunan bir protokoldür.

Devamı...

Prophet, ARIMA ve LSTM: Trend ile Mevsimsellik Avında Hangisi Daha Güçlü?

Zaman serisi tahmini, yalnızca geçmiş değerleri geleceğe uzatmak değildir; verinin içindeki yön değişimlerini, tekrar eden döngüleri ve beklenmedik dalgalanmaları okumaktır. Bir e-ticaret sitesinin günlük satışları, elektrik tüketimi ya da web trafiği bu açıdan klasik örneklerdir. Prophet, ARIMA ve LSTM aynı hedefe koşsa da trend ve mevsimselliği ele alış biçimleri oldukça farklıdır.

prophet-arima-ve-34

Devamı...

Pollard Rho ve Shor: Büyük Sayıları Çarpanlara Ayırma Yarışı

Bir RSA anahtarını oluşturan büyük sayıyı çarpanlarına ayırmak, yalnızca matematiksel bir bulmaca değildir; modern açık anahtarlı kriptografinin güvenlik varsayımlarından biridir. Bu problemde Pollard Rho klasik dünyada akıllı bir rastgele yürüyüş yaklaşımı sunarken, Shor algoritması kuantum bilgisayarların teorik olarak oyunun kurallarını değiştirebileceğini söyler. Ancak önemli ayrım şudur: Shor’u klasik bilgisayarda simüle etmek, algoritmayı kuantum hızında çalıştırmak anlamına gelmez.

pollard-rho-ve-21

Devamı...

Mobil Uygulamalarda OAuth 2.0 ve OpenID Connect: Authorization Code + PKCE Rehberi

mobil-uygulamalarda-oauth-64

Mobil uygulamalar için oturum açma tasarlarken en riskli fikirlerden biri, kullanıcı parolasını doğrudan uygulamaya toplatmak veya istemci sırrını APK/IPA içine gömmektir. Mobil paketler tersine mühendisliğe açıktır; bu nedenle uygulamanız bir public client olarak düşünülmelidir. Güvenli yaklaşım, kimlik sağlayıcının tarayıcı tabanlı oturumunu kullanan OAuth 2.0 Authorization Code akışı ile OpenID Connect (OIDC) katmanını, PKCE korumasıyla birleştirmektir.

Devamı...

gRPC ve Protocol Buffers: REST'ten Daha Hızlı Servis İletişimi

Mikroservis mimarisinde servislerin birbirleriyle konuşma hızı, yalnızca kullanıcı deneyimini değil altyapı maliyetini de belirler. REST ve JSON, okunabilirlikleri sayesinde harika bir başlangıç noktasıdır; fakat yüksek trafikte metin ayrıştırma, büyük istek gövdeleri ve tekrar eden HTTP başlıkları pahalılaşabilir. gRPC, bu noktada Protocol Buffers’ın ikili veri biçimini kullanarak daha kompakt, şemaya bağlı ve hızlı bir iletişim katmanı sunar.

Devamı...

Federal Öğrenmede Mahremiyet ve İletişim Maliyeti Dengesi

Bir makine öğrenmesi modelini eğitmek için herkesin verisini tek bir sunucuya taşımak, pratik görünse de mahremiyet açısından risklidir. Sağlık kayıtları, klavye davranışları veya finansal işlemler gibi veriler cihazdan ayrılmadan öğrenme yapılabilirse tablo değişir. Federal öğrenme (Federated Learning, FL), modeli verinin bulunduğu yere götürerek bu fikri hayata geçirir. Ancak bu yaklaşım sihirli bir gizlilik pelerini değildir: Daha güçlü mahremiyet önlemleri çoğu zaman daha fazla iletişim, hesaplama veya model doğruluğu kaybı anlamına gelir.

federal-ogrenmede-mahremiyet-59

Devamı...

ETL Süreçlerinde Data Profiling ve Doğrulama Kuralları Tasarlama

ETL hattı, veriyi bir kaynaktan alıp dönüştürerek hedef sisteme taşıyan lojistik bir bant gibidir. Ancak bant hızlı çalışırken yanlış ürünleri paketliyorsa hızın pek anlamı kalmaz. Data profiling (veri profilleme), verinin istatistiksel ve yapısal röntgenini çekerek bu riski görünür yapar; doğrulama kuralları ise röntgen sonucuna göre kapıda bekleyen kalite kontrol ekibidir.

etl-sureclerinde-data-33

Devamı...