Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
228 yazı bulundu #dotnet
LLM Context Window: Model Neyi Hatırlar, Neyi Sessizce Keser?
Yapay Zeka SERİ 04

LLM Context Window: Model Neyi Hatırlar, Neyi Sessizce Keser?

LLM API'leri stateless'tır; sohbet geçmişini her istekte sen gönderirsin ve her tur faturayı büyütür. Gemma 3 128K token desteklese de Ollama varsayılan olarak 4096'lık bir pencere ayırıyor ve 4498 token'lık bir prompt'u hiçbir hata vermeden 2051 token'a indiriyor. num_ctx'i C# ve TypeScript'te ayarlıyor, geçmişi kırpma ve özetlemeyle yönetmeyi gerçek çıktılarla deniyoruz.

6 Kas 2026 11 dk 10
LLM'e İlk İstek: Ollama, C# ve TypeScript ile İlk Cevap
Yapay Zeka SERİ 02

LLM'e İlk İstek: Ollama, C# ve TypeScript ile İlk Cevap

Ollama'yı tanıyor, ollama list ve ollama ps ile modellere bakıyor, /api/chat endpoint'ine curl ile ilk isteği atıyoruz. Aynı isteği C#'ta Microsoft.Extensions.AI ve OllamaSharp ile, TypeScript'te ollama paketiyle tekrarlıyor; cevabın içindeki token sayılarını, nanosaniye cinsinden süreleri ve ilk isteğin neden yavaş olduğunu gerçek çıktılarla okuyoruz.

6 Kas 2026 8 dk 14
OWASP Top 10: 2021'den 2025'e Ne Değişti ve Eski Dokümanları Güncellemek
Güvenlik SERİ 20

OWASP Top 10: 2021'den 2025'e Ne Değişti ve Eski Dokümanları Güncellemek

SSRF'in A01'e katılması, component sorununun Software Supply Chain Failures'a büyümesi, Security Misconfiguration'ın ikinciliğe çıkışı, yeni A10 Mishandling of Exceptional Conditions ve üç isim değişikliği. 2025 metodolojisini rakamlarıyla okuyor, eski ve yılsız kategori numaralarını bulup 2025 karşılığını öneren küçük bir .NET aracı yazıyoruz.

6 Kas 2026 8 dk 13
OWASP A04: Cryptographic Failures (1) — Encoding, Hashing, Encryption ve HTTPS
Güvenlik SERİ 07

OWASP A04: Cryptographic Failures (1) — Encoding, Hashing, Encryption ve HTTPS

Base64 neden şifreleme değil, hash ile encryption arasındaki fark ne? AES-GCM ile değiştirilen veriyi yakalıyor, parola sıfırlama kodunda Random yerine RandomNumberGenerator kullanıyor, MD5'in parola için neden yanlış olduğunu görüyor, CA5351 ve CA5394 analyzer'larını açıyor, ASP.NET Core'da HTTPS redirect'i ve HSTS varsayılanlarını curl ile inceliyoruz.

6 Kas 2026 9 dk 13
Dapper.AOT: Source Generator, Interceptor'lar ve Native AOT ile Dapper
Veritabanı SERİ 16

Dapper.AOT: Source Generator, Interceptor'lar ve Native AOT ile Dapper

PublishAot açıldığında vanilla Dapper neden dotnet run'da bile patlar? Dapper.AOT 1.1.0 ile kodu build sırasında üretmek: [module: DapperAot], InterceptorsNamespaces, üretilen interceptor kodu, Native AOT publish ve 49,8 ms'den 4,3 ms'ye başlangıç süresi, attribute ile type handler, DAP analyzer'ları ve QueryMultiple gibi kısıtlar.

6 Kas 2026 10 dk 18
Dapper Performansı: Query Cache, GetRowParser ve SqlBulkCopy, COPY ile Bulk Alternatifleri
Veritabanı SERİ 15

Dapper Performansı: Query Cache, GetRowParser ve SqlBulkCopy, COPY ile Bulk Alternatifleri

Dapper'ın query cache'i neyi saklar ve neden testere dişi çizer, CommandFlags.NoCache ne zaman gerekir, GetRowParser ile satır başına tip seçmek ve Dapper'da olmayan bulk işlemler için SQLite'ta transaction, SQL Server'da SqlBulkCopy, PostgreSQL'de COPY — hepsi gerçek ölçümlerle, sonunda BenchmarkDotNet.

6 Kas 2026 11 dk 15
Dapper ile Dinamik SQL: SqlBuilder, Güvenli Filtreler ve Contrib, Dommel, Dapper Plus
Veritabanı SERİ 14

Dapper ile Dinamik SQL: SqlBuilder, Güvenli Filtreler ve Contrib, Dommel, Dapper Plus

Opsiyonel filtreleri string birleştirmeden kurmak: Dapper.SqlBuilder'ın template ve placeholder mantığı, aynı builder'la sayım ve sayfa sorgusu, whitelist ile güvenli sıralama ve OrWhere'in sürprizi. Ardından Dapper.Contrib, Rainbow, Dommel ve ticari Dapper Plus için Kasım 2026 itibarıyla dengeli bir değerlendirme.

6 Kas 2026 10 dk 16
Dapper ve SQL Server: TVP, ANSI String'ler, {=literal} ve Parameter Sniffing
Veritabanı SERİ 13

Dapper ve SQL Server: TVP, ANSI String'ler, {=literal} ve Parameter Sniffing

Doğru sonuç veren ama index'i baştan sona tarayan sorgular: nvarchar parameter'ların varchar kolonlarda yarattığı implicit conversion, Dapper'ın 4000 karakter kuralı, IN listelerinin plan çoğaltması, table-valued parameter'lar, {=literal} ile filtered index ve parameter sniffing — hepsi gerçek logical reads ölçümleriyle.

6 Kas 2026 11 dk 20
Dapper ile Stored Procedure: Output, Return Value ve 2.1.11'in Otomatik Algılama Tuzağı
Veritabanı SERİ 12

Dapper ile Stored Procedure: Output, Return Value ve 2.1.11'in Otomatik Algılama Tuzağı

SQLite'ta stored procedure olmadığı için docker'daki SQL Server'a geçiyoruz: CommandType.StoredProcedure, DynamicParameters ile output ve return value, SET NOCOUNT'un Execute'a etkisi, 2.1.11'den beri tek kelimelik command'ların procedure sanılması ve PostgreSQL'de function ile procedure farkı.

6 Kas 2026 10 dk 13
Dapper Type Handler'ları ve Custom Mapping: Guid, DateTimeOffset ve CustomPropertyTypeMap
Veritabanı SERİ 11

Dapper Type Handler'ları ve Custom Mapping: Guid, DateTimeOffset ve CustomPropertyTypeMap

SQLite'ta Guid, DateTimeOffset ve TimeSpan okurken Dapper neden patlar? SqlMapper.TypeHandler<T> ile tercüman yazıyor, SetValue'nun neden çağrılmadığını kaynak koddan görüyor, DateOnly/TimeOnly'nin 2.1.86 hikâyesini ve CustomPropertyTypeMap ile kolon mapping'ini ele alıyoruz.

6 Kas 2026 11 dk 16
Dapper ile Buffered ve Unbuffered Okuma: Büyük Result Set'leri Akıtmak
Veritabanı SERİ 10

Dapper ile Buffered ve Unbuffered Okuma: Büyük Result Set'leri Akıtmak

Dapper'da buffered ve unbuffered okumanın farkını ölçüyoruz: unbuffered sonucun her enumerate'te sorguyu yeniden çalıştırdığını, bir milyon row'da 191 MB'a karşı sıfıra yakın belleği, QueryUnbufferedAsync ile IAsyncEnumerable stream'ini, WithCancellation ile iptali ve dispose edilmiş connection tuzağını gerçek çıktılarla görüyoruz.

6 Kas 2026 9 dk 10
Dapper ile QueryMultiple ve GridReader: Tek Round Trip'te Birden Fazla Result Set
Veritabanı SERİ 09

Dapper ile QueryMultiple ve GridReader: Tek Round Trip'te Birden Fazla Result Set

Dapper'da QueryMultiple ve GridReader ile tek command'dan birden fazla result set okuyoruz: grid'lerin neden sırayla ve bir kez okunduğunu, master-detail bir siparişi tek round trip'te yüklemeyi, iki result set'i bellekte birleştirmeyi, unbuffered grid tuzağını ve multi-mapping ile ne zaman hangisini seçeceğimizi gerçek çıktılarla görüyoruz.

6 Kas 2026 10 dk 11
Blog Haritası