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
49 yazı bulundu
tmux ile Terminal Multiplexing: Pane'ler, Session'lar ve SSH Kopmasına Dayanmak
Geliştirici Araçları SERİ 06

tmux ile Terminal Multiplexing: Pane'ler, Session'lar ve SSH Kopmasına Dayanmak

tmux'ta shell'ler arka plandaki tmux server'ın içinde çalışır, terminal yalnızca bir client'tır; bu yüzden SSH koptuğunda tmux dışındaki iş ölür, tmux içindeki devam eder (gerçek denemeyle). Session, window ve pane kavramlarını, prefix kısayollarını, dotnet watch ve ng serve'ü tek komutla açan bir geliştirme script'ini, copy mode'u, tmux 3.4 ile 3.8 arasındaki varsayılan farklarını dikkate alan minimal bir .tmux.conf'u ve iç içe tmux ile TERM tuzaklarını anlatıyoruz.

14 Kas 2026 12 dk 2
Modern CLI Araçları: fzf, ripgrep, fd, bat, eza, zoxide ve jq ile Günlük İş Akışı
Geliştirici Araçları SERİ 05

Modern CLI Araçları: fzf, ripgrep, fd, bat, eza, zoxide ve jq ile Günlük İş Akışı

ripgrep ve fd .gitignore'a uyduğu için Bookstore repo'sunda grep'ten daha az ama doğru sonucu yaklaşık 90 kat hızlı buluyor; fzf ise her listenin önüne konabilen bir seçici. Araçları brew, winget ve apt ile kurmayı (Ubuntu'daki fdfind/batcat adları ve eski fzf), Ctrl-R/Ctrl-T entegrasyonunu, branch ve test seçicilerini, jq ile API, dotnet package list ve npm ls çıktılarını işlemeyi ve bu araçlara script'te neden bağımlı olmaman gerektiğini anlatıyoruz.

14 Kas 2026 12 dk 2
PowerShell 7 ile Geliştirici Terminali: Object Pipeline, $PROFILE, PSReadLine ve Bash Kullanıcısı için Karşılıklar
Geliştirici Araçları SERİ 04

PowerShell 7 ile Geliştirici Terminali: Object Pipeline, $PROFILE, PSReadLine ve Bash Kullanıcısı için Karşılıklar

PowerShell'de pipe'tan metin değil .NET object'leri geçer; bu yüzden Bookstore API'sinin JSON'u Invoke-RestMethod ile doğrudan filtrelenip gruplanabilir (fiyatlar double gelir, para için decimal'e çevir). $PROFILE ve module'ler, execution policy'nin gerçekte neyi koruduğu, winget, bash karşılık tablosu, curl.exe, 7.6 LTS'in getirdikleri ve 7.4'ün 10 Kasım 2026'da biten desteği, encoding ve CRLF tuzaklarını gerçek çıktılarla anlatıyoruz.

14 Kas 2026 13 dk 2
zsh'ı Yapılandırmak: .zshrc, Alias, Function, Plugin'ler, Prompt ve Başlangıç Hızı
Geliştirici Araçları SERİ 03

zsh'ı Yapılandırmak: .zshrc, Alias, Function, Plugin'ler, Prompt ve Başlangıç Hızı

İyi bir .zshrc sabit bir sırayla yazılır: history, completion, alias ve function, plugin'ler ve en sonda prompt; yavaşlığı çoğu zaman framework değil her açılışta çalışan dış komutlar getirir. Alias, function ve script'in ne zaman seçileceğini, zsh-autosuggestions ve zsh-syntax-highlighting'i elle kurmayı, git branch'ini ve .NET sürümünü gösteren Starship prompt'unu ve açılışı 206 ms'den 21 ms'ye indiren completion cache'ini gerçek ölçümlerle anlatıyoruz.

14 Kas 2026 12 dk 2
Klavyeden Hızlı Olmak: Satır Düzenleme Kısayolları, History Arama, Tab Completion ve CLI Completion'ları
Geliştirici Araçları SERİ 02

Klavyeden Hızlı Olmak: Satır Düzenleme Kısayolları, History Arama, Tab Completion ve CLI Completion'ları

Ok tuşları yerine Ctrl-A/E/W/K/Y, Alt-. ve Ctrl-R ile çalışmak terminaldeki hızın büyük kısmını getirir; bash, zsh ve PSReadLine aynı kısayol ailesini paylaşır. History'nin secret'ları nasıl sakladığını üç shell'de gerçek denemeyle gösteriyor, doğru history ayarlarını, .NET 10'un dotnet completions script'ini, ng completion'ı ve zsh'de karşılaştığımız iki completion tuzağının çözümünü anlatıyoruz.

14 Kas 2026 12 dk 2
Terminal, Shell, Console ve Prompt: Kavramları Ayırmak ve İşletim Sistemine Göre Doğru Kurulum
Geliştirici Araçları SERİ 01

Terminal, Shell, Console ve Prompt: Kavramları Ayırmak ve İşletim Sistemine Göre Doğru Kurulum

Terminal emulator pencereyi çizer, shell yazdığın satırı yorumlar, aradaki PTY tuşları ve sinyalleri taşır; ikisi ayrı program olduğu için ayrı ayrı kurulur ve güncellenir. bash, zsh ve PowerShell'in hangi ayar dosyasını ne zaman okuduğunu gerçek bir denemeyle gösteriyor, Windows'ta PowerShell 7.6 + Windows Terminal + WSL 2, macOS'ta zsh için karar tablosu ve repo'nun nerede durması gerektiğini anlatıyoruz.

14 Kas 2026 13 dk 2
.NET 8'den .NET 11'e Diagnostics'te Değişenler: System.Runtime Meter, Yeni dotnet-trace Profile'ları, collect-linux, Runtime Async Stack'leri ve In-Process Crash Report
Geliştirici Araçları SERİ 10

.NET 8'den .NET 11'e Diagnostics'te Değişenler: System.Runtime Meter, Yeni dotnet-trace Profile'ları, collect-linux, Runtime Async Stack'leri ve In-Process Crash Report

.NET 9 eski EventCounter'ları System.Runtime Meter'ıyla değiştirdi, .NET 10 dotnet-trace'in varsayılanlarını ve collect-linux'u getirdi, .NET 11 ise kayıpsız event tamponu, runtime async ve process içi crash report ekledi. Eski ve yeni metric adlarının eşleme tablosunu veriyor, cpu-sampling ve Block modu hatalarını, runtime async'in askıya alma öncesi ve sonrası stack'lerini ve crash report çıktısını .NET 10 ve 11'de gerçek koşularla gösteriyoruz.

14 Kas 2026 11 dk 4
Diagnose, Fix, Prove: Bookstore'da Uçtan Uca Bir Performans Vakası
Geliştirici Araçları SERİ 09

Diagnose, Fix, Prove: Bookstore'da Uçtan Uca Bir Performans Vakası

Bir performans sorununu çözmenin yolu sırayla ölçmek: dotnet-counters ile geniş bakış, dotnet-trace ile sıcak yol, gcdump ile büyüyen tip, sonra BenchmarkDotNet ve aynı yükle k6 ile kanıt. Bookstore checkout'unun p99'unu 537 ms'ye çıkaran kök nedeni, kod incelemesinin suçladığı yeni JsonSerializerOptions değil, her istekte 2.000 kuralı okumak ve hiç hit almayan bir cache olarak buluyor, düzeltmeyle p99'u 1,5 ms'ye indiriyor ve bir rapor şablonu veriyoruz.

14 Kas 2026 11 dk 4
Production'da Diagnostics: dotnet-monitor, Collection Rule'lar, Kubernetes Sidecar ve Continuous Profiling
Geliştirici Araçları SERİ 08

Production'da Diagnostics: dotnet-monitor, Collection Rule'lar, Kubernetes Sidecar ve Continuous Profiling

dotnet-monitor, trace, gcdump ve dump'ı kimsenin container'a girmesine gerek bırakmadan bir HTTP API ve collection rule'larla toplar; rule'lar için Listen modu, güvenlik için localhost'a bağlı API, API key ve sınırlı egress gerekir. Bookstore'u kind'de sidecar'la çalıştırıyor, yavaş rapor isteklerinde ve kendi meter'ımızda tetiklenen kuralları, Limits'in throttling'ini ve suspend/nosuspend farkını ölçüyor, OpenTelemetry Profiles'ın alpha durumuna bakıyoruz.

14 Kas 2026 11 dk 4
Visual Studio ve Rider Profiler'ları: CPU Usage, .NET Object Allocation, Instrumentation, Database ve Async Araçları
Geliştirici Araçları SERİ 07

Visual Studio ve Rider Profiler'ları: CPU Usage, .NET Object Allocation, Instrumentation, Database ve Async Araçları

IDE profiler'ları geliştirici makinesinde en hızlı sonucu verir; Visual Studio'nun Database aracı N+1'i aynı metinli yüzlerce kısa sorgu olarak gösterir. Bookstore'un Siparişlerim sayfasında lazy loading'in istek başına 80 SQL komutu gönderdiğini ve thread pool'u tıkadığını aynı event'leri komut satırından okuyarak ölçüyor, Include ile throughput'u 30, projection ile 41 katına çıkarıyor; Copilot Profiler Agent'ı ve Rider'ın dotTrace/dotMemory karşılıklarını konumlandırıyoruz.

14 Kas 2026 11 dk 6
PerfView ile Derin Analiz: GC Stats, JIT Stats, Grouping/Folding ve İki Trace'i Karşılaştırmak
Geliştirici Araçları SERİ 06

PerfView ile Derin Analiz: GC Stats, JIT Stats, Grouping/Folding ve İki Trace'i Karşılaştırmak

PerfView'in gücü GroupPats, Fold%, diff ve GCStats/JITStats raporlarında; hepsi TraceEvent kütüphanesine dayandığı için aynı analizi Linux'ta kodla da yapabilirsin. Bookstore'da iki trace'i diff'leyerek bir regresyonun 2,6 saniyesinin GC beklemesi olduğunu buluyor, JITStats ile ReadyToRun'ın açılışta JIT'lenen method'ları yalnızca 980'den 928'e indirdiğini ölçüyor ve CI için gürültüsü ölçülmüş bir allocation kapısı kuruyoruz.

14 Kas 2026 13 dk 4
Memory Leak Avı: dotnet-gcdump, Heap Snapshot Karşılaştırma ve Yaygın Leak Pattern'leri
Geliştirici Araçları SERİ 05

Memory Leak Avı: dotnet-gcdump, Heap Snapshot Karşılaştırma ve Yaygın Leak Pattern'leri

Memory leak tek snapshot'la değil, aynı yükte alınan iki gcdump'ın farkıyla ve büyüyen object'i kökten tutan retention path'le bulunur. Bookstore'da singleton bir event'e abone olup hiç ayrılmayan scoped handler'ın 20.000 istekte heap'i 17,8 MB'tan 348,5 MB'a çıkarmasını dotnet-gcdump ile yakalıyor, gcdump'ı full dump'la karşılaştırıyor, düzeltmeyi üçüncü snapshot'la kanıtlıyor ve yaygın leak pattern'lerini listeliyoruz.

14 Kas 2026 11 dk 4
Blog Haritası