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
68 yazı bulundu
jq ve yq Derinlemesine: Komut Satırında JSON ve YAML Sorgulamak, Dönüştürmek ve Düzenlemek
Geliştirici Araçları SERİ 06

jq ve yq Derinlemesine: Komut Satırında JSON ve YAML Sorgulamak, Dönüştürmek ve Düzenlemek

jq olmayan bir alanı hata değil null olarak döndürür ve boş sonuçta da 0 ile çıkar; CI'da koşul olarak kullandığın her filter'a -e ekle. Bookstore.Api, kubectl, dotnet list package ve GitHub API çıktılarıyla select, group_by, reduce inputs, --arg/--argjson ve @csv'yi; yq ile image tag'ini yorumları koruyarak güncellemeyi, iki farklı yq'yu ve Windows tırnaklamasını gerçek çıktılarla gösteriyoruz.

15 Kas 2026 13 dk 10
JSON Schema ile Configuration'ı Doğrulamak: Editor IntelliSense, SchemaStore ve CI'da Validation
Geliştirici Araçları SERİ 05

JSON Schema ile Configuration'ı Doğrulamak: Editor IntelliSense, SchemaStore ve CI'da Validation

.NET binder yazım hatalı bir ayar key'ini sessizce yok sayar; JSON Schema'da additionalProperties: false bu hatayı dosyayı yazarken ve CI'da yakalar. Bookstore.Api için 2020-12 şeması yazıp SchemaStore, VS Code eşlemesi, YAML şema yorumu, check-jsonschema, ajv ve JsonSchema.Net ile doğruluyor; draft karışıklığını ve format'ın her yerde kontrol edilmediğini gerçek çıktılarla gösteriyoruz.

15 Kas 2026 12 dk 12
TOML, INI, .env ve Diğerleri: Hangi Configuration Formatı Ne Zaman?
Geliştirici Araçları SERİ 04

TOML, INI, .env ve Diğerleri: Hangi Configuration Formatı Ne Zaman?

Dosyayı kimin okuyacağına göre seç: tek okuyucu .NET ise JSON ve environment variable yeterli, aynı .env'i birden fazla araç okuyorsa en katı ortak alt kümeyle yaz. Aynı .env'i Compose, Node.js, dotenv, python-dotenv ve bash'le; aynı INI'yi .NET, Python ve git'le okuyup farkları, TOML 1.1'in tarih tiplerini ve Bookstore.Api ayarının beş formatta tek configuration'a dönüşmesini gösteriyoruz.

15 Kas 2026 12 dk 13
YAML 2: Multiline String'ler, Anchor/Alias, Merge Key, Çoklu Doküman ve KYAML
Geliştirici Araçları SERİ 03

YAML 2: Multiline String'ler, Anchor/Alias, Merge Key, Çoklu Doküman ve KYAML

Script'i | ile, uzun metni > ile yaz; secret gibi tek satırlık değerlerde |- kullan, yoksa sona \n eklenir. Merge key (<<) YAML 1.2'de yok: Compose, kubectl ve kubeconform destekliyor, GitHub Actions desteklemiyor, js-yaml 5 ise ayar istiyor. Çoklu doküman, anchor'ın doküman sınırı, güvensiz tag'ler, KYAML ve Bookstore için bir yamllint kural setini gerçek çıktılarla gösteriyoruz.

15 Kas 2026 14 dk 12
YAML 1: Syntax, Tipler ve "Norway Problem": Bir YAML Dosyasını Doğru Okumak
Geliştirici Araçları SERİ 02

YAML 1: Syntax, Tipler ve "Norway Problem": Bir YAML Dosyasını Doğru Okumak

Tırnaksız bir YAML değerinin tipini parser'ın uyguladığı kural seti belirler: YAML 1.1'de NO false, 12:30 sayı, 0755 sekizlik; YAML 1.2'de üçü de farklı. PyYAML, ruamel.yaml, js-yaml, YamlDotNet, yq, Docker Compose ve kubectl'i aynı dosyayla çalıştırıp Bookstore'un compose.yaml ve Kubernetes manifest'indeki üç gerçek tip hatasını gösteriyoruz.

15 Kas 2026 13 dk 11
JSON'u Gerçekten Bilmek: RFC 8259, Sayı Hassasiyeti, Duplicate Key, JSONC, JSON5 ve JSON Lines
Geliştirici Araçları SERİ 01

JSON'u Gerçekten Bilmek: RFC 8259, Sayı Hassasiyeti, Duplicate Key, JSONC, JSON5 ve JSON Lines

RFC 8259 duplicate key'i ve sayı hassasiyetini tanımsız bıraktığı için aynı JSON'u Node.js, Python, jq ve .NET farklı okuyabiliyor: dördü de tekrar eden key'de sonuncuyu alıyor, 2^53'ten büyük ID'yi yalnız JavaScript yuvarlıyor. BOM, NaN, baştaki sıfır, appsettings.json'daki JSONC, JSON5 ve Bookstore sipariş export'unun JSON Lines hâlini gerçek çıktılarla gösteriyoruz.

15 Kas 2026 16 dk 10
Regex'in Bedeli: ReDoS, Catastrophic Backtracking, Okunabilirlik ve Regex'i Test Etmek
Geliştirici Araçları SERİ 08

Regex'in Bedeli: ReDoS, Catastrophic Backtracking, Okunabilirlik ve Regex'i Test Etmek

İç içe quantifier, çakışan alternation ya da art arda .* içeren bir pattern, neredeyse eşleşen bir input'ta üstel ya da polinom sayıda deneme yapar; ölçümümüzde ^(a+)+$ 28 harfte .NET'te 10 saniye sürdü, NonBacktracking 0,07 ms. Tehlikeli yapıları PCRE2 adım sayılarıyla tanıyor, Cloudflare'in 2019 kesintisini, Angular validator'ı ve sunucu doğrulamasını, (?x) ile okunur pattern'i, xUnit [Theory] ile test tablosunu ve e-posta için MailAddress kararını gösteriyoruz.

15 Kas 2026 15 dk 9
.NET'te Regex: GeneratedRegex, RegexOptions, Timeout, NonBacktracking ve Span API'leri
Geliştirici Araçları SERİ 07

.NET'te Regex: GeneratedRegex, RegexOptions, Timeout, NonBacktracking ve Span API'leri

Sabit pattern'ler için [GeneratedRegex] kullan, runtime'da belli olan pattern'leri bir kez oluşturup sakla ve güvenilmeyen input'ta timeout ya da NonBacktracking ver; her çağrıda new Regex(..., Compiled) ölçümümüzde source generator'dan otuz üç bin kat yavaştı. BenchmarkDotNet ölçümü, allocation yapmayan EnumerateMatches, timeout ve NonBacktracking'in reddettiği yapılar, IgnoreCase'in kültürü ne zaman okuduğu ve Bookstore için ISBN doğrulama ile Türkçe slug üretimi gerçek çıktılarla.

15 Kas 2026 15 dk 10
Komut Satırında ve IDE'de Regex: grep -E/-P, ripgrep, sed, git grep, PowerShell ve Repo Genelinde Find/Replace
Geliştirici Araçları SERİ 06

Komut Satırında ve IDE'de Regex: grep -E/-P, ripgrep, sed, git grep, PowerShell ve Repo Genelinde Find/Replace

Repo genelinde regex ile değişikliği güvenli yapmanın sırası şu: temiz çalışma ağacı, dosya listesini git grep ile almak, rg -r ile önizlemek, sed -E ile uygulamak ve git diff ile kontrol etmek. grep, ripgrep, PowerShell ve IDE'lerin regex farklarını, Bookstore'da interpolation'lı log çağrılarını message template'e çeviren gerçek bir refactor'u ve CRLF'li dosyada $'ın neden eşleşmediğini .NET 11'in AnyNewLine option'ıyla birlikte gösteriyoruz.

15 Kas 2026 14 dk 9
Regex Flavor'ları: .NET, JavaScript, PCRE2, POSIX BRE/ERE ve RE2 Arasındaki Farklar, Glob ile Regex'i Ayırmak
Geliştirici Araçları SERİ 05

Regex Flavor'ları: .NET, JavaScript, PCRE2, POSIX BRE/ERE ve RE2 Arasındaki Farklar, Glob ile Regex'i Ayırmak

Aynı pattern flavor'a göre çalışır, hata verir ya da hata vermeden başka bir şey eşleştirir: Perl ailesi (.NET, JavaScript, PCRE2) backtracking ile lookaround sunar, RE2 ve Rust regex lineer zaman için bunlardan vazgeçer, POSIX en uzun eşleşmeyi seçer. Aynı probe listesini beş engine'de çalıştırıyor, Prometheus'un =~ ile tam eşleşmesini promtool ile, glob ile regex farkını .gitignore ve PowerShell ile gösteriyoruz.

15 Kas 2026 16 dk 10
Lookaround, Inline Flag'ler ve Unicode: Lookahead, Lookbehind, (?i), \p{L} ve Türkçe Karakterler
Geliştirici Araçları SERİ 04

Lookaround, Inline Flag'ler ve Unicode: Lookahead, Lookbehind, (?i), \p{L} ve Türkçe Karakterler

Lookahead ve lookbehind karakter tüketmeden bir pozisyonun önünü ya da arkasını kontrol eder; değişken uzunluklu lookbehind .NET ve JavaScript'te çalışır, PCRE2'de sınırlı, ripgrep'te hiç yoktur. Inline flag'leri ve JavaScript'in (?i:…) modifier'larını, \p{L} ile v flag'ini, .NET'te IgnoreCase'in kültüre bağlı olduğu için ıssız ile ISSIZ'in eşleşip eşleşmediğinin ortama göre değiştiğini gerçek çıktılarla gösteriyoruz.

15 Kas 2026 15 dk 10
Gruplar ve Backreference: Capture, Named Group, Non-capturing, Alternation ve Replace'te $1/${name}
Geliştirici Araçları SERİ 03

Gruplar ve Backreference: Capture, Named Group, Non-capturing, Alternation ve Replace'te $1/${name}

Capture group'lar açılış parantezinin sırasıyla numaralanır, ama .NET isimli grupları en sona koyduğu için aynı $2/$1 replacement'ı .NET'te ve JavaScript'te farklı sonuç verir. Named group yazımlarını, ES2025'in tekrar eden grup isimlerini, backreference ile tekrar eden kelimeyi, POSIX'in en uzun eşleşme kuralını ve .NET, JavaScript, sed ve VS Code'un replace syntax'ını gerçek çıktılarla karşılaştırıyor, Bookstore'un CSV'sinde yazar adlarını çeviriyoruz.

15 Kas 2026 12 dk 10
Blog Haritası