Ekim 19 2026

Hibrit Bulut Stratejileri: LocalStack’ten Üretim Ortamına Geçişin Riskleri

Hepimiz o sahneyi yaşadık: Docker daemon üzerinde koşan LocalStack konteyneri kusursuz çalışıyor, entegrasyon testleri saniyeler içinde yeşile dönüyor, CI/CD hattından geçen pipeline sorunsuz tamamlanıyor. Ancak deployment paketini gerçek bir AWS ortamına fırlattığınız an—ister staging olsun ister prod—CloudWatch logları kırmızıya boyanıyor. Cloud migration ve yerel geliştirme döngülerinde simülatör kullanmak harika bir maliyet avantajı sağlasa da, simülasyon ile gerçek dünya arasındaki uçurum bazen bir cuma akşamınızı mahvetmeye yeter.

Bu yazıda “LocalStack nedir, nasıl kurulur?” gibi giriş seviyesi konuları es geçiyoruz. 5 yıldan uzun süredir terminal başında sabahlayan bir mühendisin gözünden; LocalStack’in taklit edemediği alt seviye mimari nüansları, IAM’in sessiz tuzaklarını ve prodüksiyon seviyesinde baş ağrıtan asenkron davranış farklarını masaya yatırıyoruz.

1. IAM İllüzyonu: “Her Şeye İzin Ver” Rahatlığından Prod Çakılmasına

LocalStack Community sürümünün en büyük handikabı, varsayılan olarak IAM izinlerini denetlememesidir. S3’e dosya yazan bir Lambda fonksiyonu yazarsınız; fonksiyona hiçbir s3:PutObject izni tanımlamazsınız ama yerel ortamda tıkır tıkır çalışır. Pro sürümde ENFORCE_IAM=1 bayrağını açsanız bile, AWS IAM Evaluation Logic motorunun tüm karmaşıklığını Docker içinde replike etmek imkansıza yakındır.

Özellikle Resource-based Policies ile Identity-based Policies kesiştiğinde ve araya KMS şifrelemesi girdiğinde LocalStack havlu atar. Aşağıdaki tipik Terraform bloğunu ele alalım:

# LocalStack üzerinde çalışırken KMS yetkisi eksik olsa bile hata vermeyen 
# ancak AWS üzerinde anında 403 Access Denied fırlatan senaryo

resource "aws_s3_bucket_policy" "strict_policy" {
  bucket = aws_s3_bucket.data_lake.id

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Sid       = "EnforceKMSAuth"
        Effect    = "Deny"
        Principal = "*"
        Action    = "s3:PutObject"
        Resource  = "${aws_s3_bucket.data_lake.arn}/*"
        Condition = {
          StringNotEquals = {
            "s3:x-amz-server-side-encryption-aws-kms-key-id" = aws_kms_key.custom_key.arn
          }
        }
      }
    ]
  })
}

Neden böyle? AWS IAM motoru, bir isteği işlerken explicit deny, SCP (Service Control Policies), Permissions Boundary ve Session Policies gibi çok katmanlı bir evaluation tree üzerinden geçer. LocalStack ise Python tabanlı basitleştirilmiş bir kural kontrolü yapar. Sonuç: CI ortamında yeşil geçen test, canlı deployment sonrası API Gateway arkasındaki servisinizin KMS.AccessDeniedException hatasıyla çökmesine yol açar.

2. Dağıtık Sistemlerdeki Zamanlama ve Eventual Consistency Farkları

LocalStack bellekte (in-memory) veya hafif SQLite/DynamoDB-Local süreçleriyle çalışır. Bu mimari, AWS’in küresel bazda dağıtık veri merkezlerindeki gecikme ve tutarlılık modellerini maskeler.

DynamoDB: Tek Node Yanılgısı

LocalStack üzerinde koşan DynamoDB Local, tek bir Java prosesidir. Prodüksiyon ortamındaki partition splitting, hot partition, read/write capacity throttling (RCU/WCU) veya Burst Capacity tüketimini yerelde gözlemleyemezsiniz. Yerelde 5000 RPS ile geçen yük testiniz, AWS üzerinde rastgele ProvisionedThroughputExceededException fırlatabilir; çünkü veriniz gerçek partition’lara düzgün dağılmamıştır.

SQS ve SNS: Sıralama ve Görünürlük

LocalStack üzerinde FIFO kuyrukları simüle ederken MessageGroupId mantığı kusursuz gibi görünür. Ancak gerçek AWS SQS FIFO’da maksimum 300 msg/s (veya batching ile 3000) sınırı, message deduplication interval penceresi (5 dakika) ve visibility timeout yarış koşulları (race conditions) çok daha agresiftir.

# Yerelde anında mesaj çeken bu kod, AWS SQS üzerinde ReceiveMessageWaitTimeSeconds 
# ve VisibilityTimeout dinamikleri yüzünden mesaj kaybı/çift işleme yaratabilir.

aws --endpoint-url=http://localhost:4566 sqs receive-message \
    --queue-url http://localhost:4566/000000000000/orders.fifo \
    --max-number-of-messages 10 \
    --wait-time-seconds 0

LocalStack’te mesaj hemen oradadır. AWS’te ise kuyruk arka planda onlarca storage node’a dağılmıştır; kısa yoklama (short polling) yaptığınızda kuyrukta mesaj olmasına rağmen boş yanıt dönebilir. Testinizi WaitTimeSeconds=20 ile yazmadıysanız prod ortamında hayalet bug’lar peşinizi bırakmaz.

3. Ağ ve Altyapı İzolasyonu: Docker Bridge vs. AWS VPC

LocalStack konteynerleri varsayılan olarak Docker network’ü üzerinden konuşur. Bu durum, AWS’in karmaşık VPC mimarisini, Security Group kurallarını ve en önemlisi VPC Endpoint politikalarını tamamen görmezden gelmenize yol açar.

Gerçek hayatta Lambda’yı bir VPC içine aldığınızda ne olur? Hyperplane ENI (Elastic Network Interface) atanır. İlk başlatmada soğuk başlatma (cold start) süreleri uzar ve outbound internet trafiğiniz için bir NAT Gateway veya VPC Endpoint (PrivateLink) tanımlamanız gerekir. LocalStack içinde çalışan bir Lambda ise Docker host’un internetini doğrudan kullanır.

# Docker Compose ile LocalStack ve bağımlı servisler çalıştırılırken 
# ağ gecikmesi ve DNS kısıtlamaları simüle edilemez

services:
  localstack:
    image: localstack/localstack:latest
    ports:
      - "4566:4566"
    environment:
      - SERVICES=s3,sqs,sns,lambda,dynamodb
      - DOCKER_HOST=unix:///var/run/docker.sock
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"

Eğer Lambda fonksiyonunuz bir S3 bucket’ına VPC Endpoint olmadan erişmeye çalışıyorsa ve subnet’inizde NAT Gateway rotası yoksa, prod ortamında timeout alırsınız. LocalStack testlerinizde bu senaryonun patlama ihtimali sıfırdır; çünkü Docker konteyneri her yere doğrudan routing yapar.

4. Terraform Konfigürasyonunda “Provider Kirliliği” (Provider Drift)

CI/CD pipeline’larında LocalStack kullanırken altyapı kodunu (IaC) simülatöre yönlendirmek için genellikle Terraform provider override teknikleri kullanılır:

# main_override.tf örneği
provider "aws" {
  access_key                  = "mock_key"
  secret_key                  = "mock_secret"
  region                      = "eu-central-1"
  s3_use_path_style           = true
  skip_credentials_validation = true
  skip_metadata_api_check     = true
  skip_requesting_account_id  = true

  endpoints {
    s3       = "http://localhost:4566"
    dynamodb = "http://localhost:4566"
    sqs      = "http://localhost:4566"
  }
}

Bu yaklaşımın iki büyük riski vardır:

  • s3_use_path_style: AWS, S3 için path-style (s3.amazonaws.com/bucket) erişimini yıllar önce deprecated ilan etti ve virtual-hosted-style (bucket.s3.amazonaws.com) modeline zorluyor. LocalStack’te path-style kullanıp production konfigürasyonunda bunu unutursanız, DNS resolution ve SSL wildcard sertifika hatalarıyla karşılaşırsınız.
  • Feature Parity Eksikliği: Terraform AWS Provider’ın her yeni sürümünde eklenen yeni argümanlar (örneğin gelişmiş S3 Lifecycle kuralları veya EventBridge Pipe filtreleri), LocalStack tarafından hemen desteklenmeyebilir. Kod yerelde InvalidParameter verirken AWS’te geçerli olabilir veya tam tersi yaşanabilir.

5. LocalStack Risklerini Sıfıra İndiren Hibrit Pipeline Mimarisi

LocalStack’i tamamen çöpe mi atalım? Kesinlikle hayır. Hızlı geri bildirim (feedback loop) ve birim entegrasyon testleri için rakipsizdir. Ancak deployment stratejinizi sadece LocalStack onayına bağlayamazsınız.

Önerilen Doğrulama Piramidi

  1. Pre-commit / Local Dev: Mock kütüphaneleri (moto vb.) veya LocalStack Community. Sadece “happy-path” iş mantığı doğrulaması.
  2. CI Pipeline (PR Aşaması): Testcontainers ile izole LocalStack üzerinde API sözleşme testleri (Contract Testing).
  3. CD Pipeline (Merge Sonrası – Staging/Ephemeral): Gerçek bir AWS Sandbox hesabında, kısa ömürlü (TTL: 2 saat) dinamik ortamlar. Terraform ile gerçek kaynakların ayağa kaldırılması ve end-to-end (E2E) testlerin koşulması.
#!/usr/bin/env bash
# CI/CD aşamasında Ephemeral Environment yaşam döngüsü

ENVIRONMENT_ID="ci-pr-${PR_NUMBER}-${GITHUB_SHA:0:7}"

echo "Deploying ephemeral stack to real AWS: $ENVIRONMENT_ID"
terraform init
terraform workspace new "$ENVIRONMENT_ID"
terraform apply -auto-approve -var="env=$ENVIRONMENT_ID"

# Gerçek AWS API üzerinde testleri koştur
pytest tests/e2e --aws-env="$ENVIRONMENT_ID"
TEST_EXIT_CODE=$?

# Temizlik adımı (Cost Optimization)
echo "Tearing down ephemeral stack..."
terraform destroy -auto-approve -var="env=$ENVIRONMENT_ID"
terraform workspace select default
terraform workspace delete "$ENVIRONMENT_ID"

exit $TEST_EXIT_CODE

LocalStack harika bir geliştirme aracıdır; ancak hiçbir zaman nihai bir doğrulama katmanı değildir. Gerçek bir cloud migration sürecinde ve kesintisiz CI/CD hatlarında parite farklarını hesaba katmayan ekipler, simülasyonun konforunda boğulup faturayı canlı ortam kesintileriyle öderler.

Category: Genel | LEAVE A COMMENT
Ekim 19 2026

Hızlı ve Besleyici: Yazılımcılar İçin 10 Dakikalık ‘Brain-Fuel’ Kahvaltı

Sabah alarmı çaldı, günlük stand-up toplantısına 20 dakika var ve aklında sadece iki şey dönüyor: Sıcak bir kahve ve çözülmeyi bekleyen o inatçı bug. Çoğu zaman en hızlı çözüme, yani fırından kapılmış bir poğaçaya ya da sadece sıvı kafeine sığınıyoruz. Ancak saat 11:00 olduğunda çöken o meşhur zihinsel sis (brain fog) tesadüf değil. İyi bir yazılım temiz mimari ister; beynimiz ise dengeli bir yakıt. Neyse ki sağlıklı beslenme sanıldığı gibi saatlerce mutfakta mesai harcamayı gerektirmiyor. Doğru yemek seçimleriyle ve pratik hızlı tarifler sayesinde, gün boyu sürecek bir odaklanma performansı yakalamak tam 10 dakikanızı alır.

Bugün menüde bilişsel fonksiyonlarınızı overclock edecek, tam anlamıyla bir brain food bombası var: Tavada Yumuşak Çırpılmış Yumurtalı & Avokadolu Ekşi Maya Tost.

Tarif Bilgileri

Porsiyon: 1 Kişilik
Hazırlık Süresi: 5 Dakika
Pişirme Süresi: 5 Dakika

Gerekli Malzemeler

  • 1 dilim kaliteli ekşi mayalı ekmek (veya tam çavdar)
  • 2 adet taze organik yumurta
  • Yarım olgun avokado
  • 1 tatlı kaşığı tereyağı veya soğuk sıkım zeytinyağı
  • 1 tatlı kaşığı kabak çekirdeği içi
  • Bir tutam pul biber veya çörek otu
  • Bir tutam deniz tuzu ve taze çekilmiş karabiber

Adım Adım Hazırlanışı

  1. Ekmeği Isıtın: Ekşi maya ekmek dilimini tavada veya kızartma makinesinde altın sarısı bir kıtır kıvama gelene kadar kızartın.
  2. Avokadoyu Ezme Haline Getirin: Yarım avokadoyu bir kasede çatal yardımıyla ezin; içine tuz, karabiber ve birkaç damla limon suyu sıkıp karıştırın. Ardından kızarmış ekmeğin üzerine cömertçe yayın.
  3. Yumurtaları Çırpın: Yumurtaları küçük bir kasede çatalla 15-20 saniye hafifçe köpürene kadar çırpın. İçine ekstra süt ya da krema eklemenize gerek yok.
  4. Kısık Ateşte Pişirin: Küçük boy yapışmaz tavayı kısık ateşe alın, tereyağını eritin. Yumurtaları dökün ve spatula ile dıştan içe doğru nazikçe çekerek kremsi (scrambled) kıvam alana kadar yaklaşık 1-2 dakika pişirin. Yumurtaların tavada kurumasına izin vermeyin.
  5. Tabağı Birleştirin: Yumuşacık yumurtayı avokadonun üzerine yerleştirin. Üzerine kabak çekirdeği ve çörek otu serpiştirerek servis edin.

Meşgul Zihinler İçin Alternatifler

Dolapta avokado yoksa panik yok. Avokado yerine 2 yemek kaşığı süzme yoğurt veya lor peyniri kullanabilirsiniz; böylece protein oranını daha da yukarı çekersiniz. Kabak çekirdeği yerine ceviz içi kırmak da şahane bir omega-3 desteğidir. Hatta vaktiniz bolsa ve bütçeniz elveriyorsa, yumurtanın yanına ekleyeceğiniz 30-40 gram füme somon bilişsel odaklanmayı bir üst segmente taşır.

Neden Bu Tabak Bir “Brain-Fuel”?

Bu tabağın arkasında çok net bir biyokimya var. Beynimiz enerjisinin büyük kısmını glikozdan alır; fakat rafine şeker ya da beyaz un gibi hızlı karbonhidratlar ani insülin dalgalanması yaratarak 1 saat sonra sizi uyku moduna sokar.

Ekşi mayalı ekmek düşük glisemik indekse sahiptir; kana yavaş karışır. Yumurta sarısı, beyindeki hafıza ve odak nörotransmitteri olan asetilkolinin öncüsü kolin bakımından doğadaki en zengin kaynaktır. Avokado ve kabak çekirdeği ise nöronlar arası iletişimi hızlandıran sağlıklı yağ asitleri ve magnezyum sunar. Kısacası bu tabak, IDE’nizi açtığınız andan öğle arasına kadar sizi crash etmeden çalıştıracak bir bataryadır.

Püf Noktası

Yumurtayı pişirirken ateşi asla yüksek tutmayın. Yumurtanın tavadaki ısısı tabağa aldıktan sonra da 30 saniye boyunca pişmeye devam eder. Bu yüzden yumurtayı tavadan alırken hafif nemli, parlak ve ıslak görünmesi gerekir. Kurumuş bir çırpılmış yumurta lezzetini kaybeder, yumuşak kalan ise kremamsı dokusuyla avokadonun en iyi dostudur.

Kahvenin Yanına 10 Saniyelik Bonus Snack

Yemek bitti, terminal açıldı. Yanınıza alacağınız kahvenin yanına küçük bir kaseye 3 tam ceviz ve bir avuç yaban mersini (blueberry) atın. Yaban mersinindeki antosiyaninler beyni oksidatif stresten korurken, ceviz şekliyle bile nereye hizmet ettiğini fısıldar. 10 dakikalık bu rutinle günün ilk yarısını yüksek odaklanma ile tamamlamak artık sizin elinizde. Afiyet olsun!

Category: Genel | LEAVE A COMMENT
Ekim 18 2026

AI Ajanlarında ‘Judgment-First’ Yaklaşımı: Otomasyonu Denetleyen İnsan Karar Mekanizması

Son bir yıldır teknoloji dünyasında herkes aynı hayali satıyor: Bir ai agents ordusu kuracaksınız, siz kahvenizi yudumlarken onlar kod yazacak, testleri geçecek ve prodüksiyona deploy edecek. Kulağa harika geliyor değil mi? Ancak işin mutfağına girdiğinizde gerçekler biraz can yakıyor. Test sunucusunu yanlışlıkla silen veya sonsuz döngüye girip kredi kartı limitinizi eriten bir yapay zekayla karşılaştığınızda, otonomluğun aslında ne kadar tekinsiz bir lüks olduğunu anlıyorsunuz. İşte tam bu kırılma noktasında karşımıza yeni bir paradigma çıkıyor: Judgment-First yaklaşımı.

Bu makalede, kod yazımı ve devops süreçlerinde otonom ajanları başıboş bırakmak yerine, insan muhakemesini (yani judgment mekanizmasını) merkeze alan dengeli bir ai workflow nasıl kurulur, birlikte inceliyoruz.

“Bırakın Yapsın” Yanılgısı ve Prompt Engineering Sınırları

Bir süredir sadece iyi bir prompt engineering yaparak her sorunu çözebileceğimiz söylendi. “Sen kıdemli bir yazılımcısın, hata yapma” yazdığınızda modelin gerçekten kusursuz çalışacağına inandık. Ancak Large Language Models (LLM) olasılıksal makinelerdir; deterministik değillerdir. Yani aynı prompt, dokuz kez doğru çalışan bir kodu onuncu denemede çökertebilir.

Yapay zekanın “karar alma” (judgment) yetisi yoktur; sadece bir sonraki en olası kelimeyi tahmin etme yeteneği vardır. Kodun çalışması ile o kodun şirket kültürüne, güvenlik standartlarına ve iş mantığına uyması bambaşka şeylerdir. Bu yüzden kontrolsüz otomasyon yerine, ajanın sadece “öneri getirdiği”, insanın ise “onayladığı” bir mimari kurmak zorundayız.

[Görsel: Bir terminal ekranında sol tarafta otonom ajanın önerdiği Git diff çıktısı, sağ tarafta ise geliştiricinin onayını bekleyen interaktif CLI onay kutusu]

Judgment-First Mimarisi Nasıl Çalışır?

Geleneksel bir ai workflow döngüsünde ajan görevi alır, planlar, adımları yürütür ve bitirir. Judgment-First modelinde ise bu süreç kritik kontrol noktalarıyla (checkpoint) bölünür:

  • Keşif ve Taslak: Ajan bağlamı toplar, problemi analiz eder ve çözüm için bir plan sunar. Henüz hiçbir kod veya ayar değişmez.
  • İnsan Değerlendirmesi: Geliştirici ajanın planını inceler. Yanlış varsayımlar burada elenir.
  • Sınırlı İcra: Ajan sadece onaylanan adımı, izole bir ortamda (sandbox) çalıştırır.
  • Doğrulama ve Kabul: Nihai diff veya sistem değişikliği insan tarafından tekrar kontrol edilip ana dala birleştirilir.

Özellikle devops süreçlerinde bu yaklaşım hayat kurtarır. Bir ajana Terraform dosyalarını doğrudan uygulama yetkisi vermek yerine, plan çıktısını alıp Slack üzerinden onayınıza sunmasını sağlamak tipik bir “judgment” katmanıdır.

# Örnek: Ajanın doğrudan çalıştırması yerine plan çıktısı üretmesi
terraform plan -out=tfplan.binary
# Ajan bu noktada durur ve insan operatöre diff özetini iletir:
# "3 kaynak eklenecek, 1 veritabanı SİLİNECEK. Onaylıyor musunuz? (e/h)"

Gerçek Dünya Testi: LangGraph ve CrewAI ile Doğrulama

Geçtiğimiz haftalarda kendi projelerimden birinde LangGraph kullanarak basit bir hata ayıklama ajanı kurdum. Sisteme iki farklı yaklaşım uyguladım:

İlk senaryoda ajan tam yetkiliydi. Kod tabanındaki hatayı buldu, bir bağımlılığı güncelledi ve testleri çalıştırmadan doğrudan repoya commit attı. Sonuç? Paket uyumsuzluğu yüzünden build patladı. İkinci senaryoda ise araya bir insan onay fonksiyonu (human-in-the-loop) ekledim. Ajan güncelleme önerdiğinde terminal bana sordu. Bağımlılığın ana sürüm atladığını fark edip işlemi reddettim ve ajana “minor sürümü sabitle” direktifini verdim. Sorunsuz çözüldü.

[Görsel: LangGraph akış şemasında ‘Agent Execution’ ve ‘Tool Call’ arasına yerleştirilmiş kırmızı renkli ‘Human Approval Gate’ diyagramı]

Tam Otonom vs. Judgment-First Yaklaşımı

İki yaklaşım arasındaki farkı netleştirmek için artı ve eksilere bir göz atalım:

Kriter Tam Otonom Ajanlar Judgment-First Ajanlar
Hız Çok yüksek (aralıksız çalışır) Orta (insan onayına bağlıdır)
Hata Maliyeti Yüksek (prodüksiyon riskleri taşır) Düşük (hatalar kapıda yakalanır)
Maliyet / Token Tüketimi Sonsuz döngü riski yüksektir Denetimli ve öngörülebilirdir
Geliştirici Güveni Düşük (paranoya yaratır) Yüksek (kontrol geliştiricidedir)

Araçlar, Fiyatlar ve Ücretsiz Alternatifler

Bu doğrulama katmanını sıfırdan yazmak zorunda değilsiniz. Ekosistemde hem açık kaynaklı hem de ücretli birçok seçenek mevcut:

  • LangGraph (LangChain): Python ve JS kütüphanesi. Tamamen açık kaynak ve ücretsizdir (self-hosted). Human-in-the-loop (kesme noktaları) yeteneği şu an sektör standardı düzeyinde.
  • CrewAI: Kolay kurulur, ajanlar arası görev dağılımı yapar. Temel kütüphane ücretsiz, kurumsal Enterprise sürümü kullanıcı başına aylık 25 dolardan başlıyor.
  • n8n: Eğer kod yazmadan bir ai workflow kurmak istiyorsanız ideal. Kendi sunucunuzda çalıştırmak (Community Edition) ücretsiz; bulut versiyonu ise aylık 20 euro civarından başlıyor. Araya onay mailleri veya webhook eklemek çocuk oyuncağı.
  • GitHub Actions Environments: Kod süreçlerinizde ekstra maliyet ödemeden “Required Reviewers” özelliğini kullanarak yapay zekanın PR’larını insan onayına bağlayabilirsiniz (Genel repolarda ücretsiz).

Sonuç: Direksiyonu Tamamen Bırakmayın

Ajanların yetenekleri her ay katlanarak artıyor, bunda şüphe yok. Ancak en sofistike LLM bile sisteminizin iş hedeflerini, teknik borçlarını ve kullanıcı reflekslerini sizin kadar anlayamaz.

Yapay zekayı harika bir stajyer gibi düşünün: Hızlı araştırır, ilk taslağı yıldırım gibi çıkarır, rutin angaryayı sırtlar. Ancak kontratı imzalamadan veya prodüksiyona çıkmadan önce evrakın üzerinden bir çift tecrübeli gözün geçmesi şarttır. Judgment-First yaklaşımı, sizi hem yapay zeka trenini kaçırmaktan hem de o trenin altında kalmaktan kurtaracak en rasyonel formüldür.

Category: Genel | LEAVE A COMMENT
Ekim 18 2026

Masa Başı Çalışanlar İçin Active Recovery: Eklemleri Yenileyen Günlük Rutin

Günün sekiz saatini bir sandalyeye kilitli geçirip mesai bitiminde koltuğa yığılmak, vücudumuza yaptığımız en sinsi haksızlıklardan biri. Kendimizi yorgun hissettiğimizde ilk refleksimiz “hiç kıpırdamadan dinlenmek” oluyor; oysa modern masa başı yorgunluğunun ilacı pasif bir hareketsizlik değil. Bedenimizin sertleşen dokularını gevşetmek ve office-health standardımızı yukarı çekmek için ihtiyacımız olan asıl yöntem: active-recovery.

Peki ama tüm gün zihinsel olarak tükenmişken neden hâlâ hareket etmemiz gerekiyor? Çünkü biyolojimiz statik kalmak üzerine değil, hareket ettikçe kendini onarmak üzerine kurulu.

Neden Pasif Dinlenme Yetmiyor? İşin Biyolojisi

Uzun süre oturduğumuzda olan şey basit: Kan dolaşımı yavaşlar, kalça fleksörleri kısalır ve omurga diskleri üzerindeki basınç katlanır. Eklemlerimizin içinde, onları adeta bir makine yağı gibi besleyen ve sürtünmeyi önleyen sinovyal sıvı bulunur. Sorun şu ki, kıkırdak dokunun doğrudan bir kan damarı ağı yoktur; bu sıvının eklem içine pompalanabilmesi için o eklemin hareket etmesi, yani bükülüp açılması şarttır.

Araştırmalar gösteriyor ki, düşük yoğunluklu ritmik hareketler kan dolaşımını hızlandırarak kaslarda biriken laktat ve inflamatuar atıkların çok daha hızlı temizlenmesini sağlıyor. Yani mesai sonrası yapılacak 10 dakikalık bilinçli bir hareket seansı, koltukta iki saat uzanmaktan katbekat daha hızlı toparlanma sağlıyor.

Ergonomics Önemli, Ama Mobility Kurtarıcıdır

İyi bir çalışma ortamı için doğru ergonomics ayarlarına yatırım yapmak harika bir başlangıçtır: Monitör göz hizasında, ayaklar yere basıyor, bel destekli… Ancak en pahalı ergonomik sandalye bile sizi sabit kalmanın fizyolojik bedelinden kurtaramaz. Statik duruş, ne kadar “doğru” olursa olsun, bir süre sonra kas spazmlarına davetiye çıkarır.

İşte burada devreye mobility (eklem hareket açıklığı) çalışmaları giriyor. Esneklik sadece bir kası uzatmakken, mobilite o eklemi kontrol ederek tüm hareket açısında aktif kullanabilmektir.

Kronik bel, boyun veya eklem fıtığı gibi teşhis edilmiş bir rahatsızlığınız varsa, aşağıdaki hareketleri uygulamadan önce mutlaka doktorunuza veya fizyoterapistinize danışın. Hareket sırasında keskin bir batma veya uyuşma hissederseniz egzersizi derhal bırakın.

Eklemleri Yenileyen 10 Dakikalık Günlük Rutin

Bu protokolü iş bitiminde ya da gün ortasında uzun bir molada uygulayabilirsiniz. Terletmez, özel bir ekipman gerektirmez; tek ihtiyacınız biraz zemin alanı.

1. Cat-Cow (Omurga Akışı) — 10 Tekrar

Dört ayak pozisyonuna geçin. Nefes alırken karnınızı yere doğru yaklaştırıp başınızı ve göğsünüzü yukarı kaldırın (Cow). Nefes verirken omurganızı tavana doğru kubbe yapın, çenenizi göğsünüze yaklaştırın ve kürek kemiklerinizi birbirinden uzaklaştırın (Cat). Bu hareket, saatlerce hareketsiz kalan omurga disklerini yeniden besler.

2. Worlds Greatest Stretch (Torasik Mobilite ve Kalça Açıcı) — Her İki Tarafa 5 Tekrar

Adının hakkını veren bir klasik. Şınav pozisyonundan sağ ayağınızı sağ elinizin hemen dışına atın (derin lunge). Sağ dirseğinizi sağ ayak bileğinize doğru yaklaştırın, ardından gövdenizi sağa doğru çevirerek sağ kolunuzu gökyüzüne doğru uzatın. Gözlerinizle elinizi takip edin. Bu hareket hem kamburluğa yol açan sırt sertliğini kırar hem de sıkışan kalça fleksörlerini rahatlatır.

3. 90/90 Kalça Geçişleri — 8-10 Kontrollü Geçiş

Yere oturun, dizlerinizi bükerek bir bacağınızı önde 90 derece, diğerini yanda 90 derece açıyla konumlandırın. Gövdenizi dik tutarak, ellerinizi mümkünse yere koymadan bacaklarınızı diğer tarafa doğru devirin. Kalça ekleminin iç ve dış rotasyonunu aynı anda çalıştıran en etkili yöntemlerden biridir.

4. Glute Bridge (Kalça Aktivasyonu) — 12 Tekrar (Tepede 2 Saniye Beklemeli)

Sırtüstü yatın, dizlerinizi bükün ve ayak tabanlarınızı yere basın. Topuklarınızdan güç alarak kalçanızı yukarı kaldırın. Tepe noktada kalça kaslarınızı (glutes) sıkın ve iki saniye bekleyin. Bütün gün üzerinde oturduğumuz için “uyuyan” kalça kaslarını yeniden uyandırmak, bel ağrılarının en büyük panzehiridir.

Günü Kurtaracak Mikro Alışkanlıklar

Rutinler harikadır, ancak gün boyu biriken hasarı tek bir blokta çözmek zorunda değilsiniz. Süreci kolaylaştırmak için şu mikro adımları alışkanlık haline getirebilirsiniz:

  • 45/5 Kuralı: Her 45 dakikalık odaklanmış çalışmanın ardından 5 dakika ayağa kalkın, su için veya sadece odanın içinde yürüyün.
  • Telefon Görüşmelerinde Ayakta Kalın: Sesli görüşmelerinizi yürüyerek yapmak, gün içindeki adım sayınızı ve dolaşımınızı fark ettirmeden artırır.
  • Göz Dinlendirme (20-20-20): Her 20 dakikada bir, 20 saniye boyunca en az 20 fit (yaklaşık 6 metre) uzağa bakın. Boyun kaslarının gevşemesi doğrudan göz kaslarının rahatlamasıyla bağlantılıdır.

Bedenimiz hareketsizlik faturasını hemen kesmez; bunu aylar, yıllar içinde kronik sızılarla yapar. Günün sonunda kendinize ayıracağınız 10 dakikalık bir toparlanma seansı, sadece bedeninizi değil, zihinsel enerjinizi de sıfırlayacaktır.

Category: Genel | LEAVE A COMMENT
Ekim 17 2026

Ekrana Bakmaktan Kurtulamayanlar İçin: Boyun ve Omuz Mobilite Protokolü

Şu an bu satırları okurken boynunun açısına hiç dikkat ettin mi? Eğer masa başında çalışan ortalama bir modern insansan, muhtemelen çenen göğsüne doğru yaklaşmış, omuzların kulaklarına tırmanmış ve omurgan hafifçe haşlanmış bir karides formunu almış durumda. Günümüz dünyasında ofis sağlığı giderek lüks bir kavrama dönüşürken, kronikleşen boyun ağrısı neredeyse profesyonel hayatın kaçınılmaz bir parçası gibi kabul ediliyor. Oysa durum böyle olmak zorunda değil; doğru bir mobilite yaklaşımı ve birkaç küçük egzersiz ile fiziksel sağlık dengeni hızla geri kazanabilirsin.

Neden Böyle Oluyor? Başımızın Ağırlığı ve Yerçekimi

İnsan kafası nötr pozisyondayken —yani kulaklar omuzlarla aynı hizada durduğunda— yaklaşık 4.5 ila 5.5 kilogram ağırlığındadır. Ancak kafamızı ekrana, telefona veya klavyeye doğru öne eğdiğimiz her derece, omurgaya binen yükü katlayarak artırır. Biyomekanik araştırmalar gösteriyor ki, başımızı sadece 45 derece öne eğmek, boyun omurlarına binen yükü yaklaşık 22 kilograma çıkarıyor. Bu, gün boyu boynunda 8 yaşında bir çocuğu taşımakla neredeyse aynı şey!

Vücut bu yükün altında ezilmemek için savunma mekanizmasını çalıştırır: Üst sırt ve boyun kasları sürekli kasılarak kafayı geride tutmaya çalışır. Sonuç? Sertleşmiş trapezius kasları, donmuş kürek kemikleri ve tıp literatüründe artık “Tech Neck” (teknolojik boyun) olarak adlandırılan o meşhur tutulma.

Sadece Esnemek Neden İşe Yaramıyor?

Boynun ağrıdığında ilk refleksin kafanı sağa sola çekip esnetmek olabilir. Bu geçici bir ferahlama sağlasa da sorunu kökten çözmez. Çünkü o kaslar güçsüzlükten ve sürekli gergin kalmaktan yorulmuştur, sadece boyları kısaldığı için değil. Bize gereken şey pasif bir çekme değil; eklem hareket açıklığını artıran ve kaslara yeniden doğru çalışmayı öğreten aktif bir mobilite protokolüdür.

Önemli Uyarı: Bu hareketler masa başındaki mekanik gerginlikleri rahatlatmak içindir. Eğer kollarında uyuşma, karıncalanma, belirgin bir his kaybı veya keskin, batıcı bir ağrı yaşıyorsan egzersizleri durdurmalı ve bir fizik tedavi uzmanına ya da doktora danışmalısın.

5 Dakikalık Ofis İçi Mobilite Protokolü

Masanın başından bile kalkmadan, sadece sandalyeni biraz geriye çekerek uygulayabileceğin bu mini rutin, kas spazmlarını kırıp eklem kapsüllerini uyarır. Günde iki kez (özellikle öğleden sonra o malum çöküş anında) tekrarlayabilirsin.

1. Gıdı Çıkarma Sanatı: Chin Tuck (10 Tekrar)

Bu hareket dışarıdan komik görünse de boyun derin fleksör kaslarını aktive eden altın standarttır.

  • Sırtın dik otur, karşıya bak.
  • Kafanı aşağı eğmeden, sanki birisi burnunun ucuna dokunacakmış gibi çeneni geriye doğru kaydır (çift gıdı yapıyormuş gibi).
  • Geride 2 saniye bekle, boynunun arkasındaki uzamayı hisset ve serbest bırak.

2. Torasik Açılma: Sandalye Arkalığı Esnetmesi (8 Tekrar)

Boyun ağrısının asıl suçlusu genellikle boyun değil, hareketsiz kalmış üst sırttır (torasik omurga).

  • Ellerini başının arkasında birleştir, dirseklerini yanlara aç.
  • Sandalyenin sırt desteğini pivot noktası olarak kullanarak, nefes vererek yavaşça geriye doğru yaslan ve göğsünü tavana doğru aç.
  • Bunu yaparken belini aşırı çukurlaştırmamaya dikkat et; hareket sadece göğüs kafesi hizasından gelmeli. 2 saniye dur ve başlangıca dön.

3. Kürek Kemiği Sıkıştırma: W-V Hareketi (10 Tekrar)

Öne yuvarlanan omuzları orijinal yuvasına geri göndermek için kürek kemiklerini uyandırmamız gerek.

  • Kollarını yukarı kaldırarak ‘V’ harfi oluştur.
  • Ardından dirseklerini geriye ve aşağıya doğru çekerek gövdenle ‘W’ harfi yap.
  • Dirseklerini aşağı çekerken kürek kemiklerinin arasında bir ceviz kırmaya çalışıyormuş gibi hisset. 2 saniye sık ve tekrar yukarı uzan.

4. Göğüs Açıcı Kapı Pervazı Gerdirme (30 Saniye)

Sürekli öne doğru çalıştığımız için pektoral kaslar kısalır ve omuzları öne çeker.

  • En yakın kapı pervazına veya ofis bölmesine git. Kolunu 90 derece açıyla pervaza daya.
  • Bir adım öne çık ve göğsünü hafifçe zıt yöne çevir.
  • Göğüs kaslarında derin bir açılma hissedeceksin. Derin nefes alarak 30 saniye boyunca bekle, ardından diğer kola geç.

Uzun Vadeli Strateji: Çevre Tasarımı

Araştırmalar gösteriyor ki, gün boyu sabit bir pozisyonda kalındığında en ergonomik koltuk bile ağrıyı tek başına engelleyemez. Ergonomi bir başlangıçtır, ancak beden harekete göre evrilmiştir. Bu yüzden:

  • Monitörünü Göz Hizasına Al: Ekranının üst üçte birlik kısmı göz hizanla paralel olmalı. Bu, boynunun doğal eğriliğini korur.
  • Saat Başı 30 Saniye Kuralı: Her 50 dakikada bir yerinden kalk, omuzlarını geriye doğru üç kez yuvarla ve derin bir diyafram nefesi al.

Kendi bedenine bir makine gibi davranmayı bırakıp biyolojik bir sistem olarak yaklaştığında, küçük hareketlerin günün toplamında devasa farklar yarattığını göreceksin. Şimdi bu yazıyı kapat, dikleş, çeneni geriye çek ve boynuna derin bir nefes aldır!

Category: Genel | LEAVE A COMMENT
Ekim 17 2026

Kubernetes’te ‘Ghost’ Resource’ları Bulmak: Zombie Pod Avcılığı

Modern bir devops ekibinin yönettiği multi-tenant production cluster’ında her şeyin dashboard üzerinde yemyeşil görünmesi, her şeyin yolunda olduğu anlamına gelmez. Kümeler büyüdükçe, microservice mimarileri dallanıp budaklandıkça ve continuous delivery hatları günde onlarca kez release çıktıkça arka planda sessiz bir felaket birikir: “Ghost” (hayalet) resource’lar. Sağlıklı bir resource-management stratejisi ve keskin observability pratikleri kurgulamadığınızda, kubernetes worker node’larınız aslında hiçbir iş yapmayan, hiçbir trafiğe yanıt vermeyen ama faturayı kabartan “zombie pod” sürüleriyle dolar taşar.

Bu yazıda 5+ yıl deneyimli bir mühendisin bildiği o temel kavramları bir kenara bırakıyoruz. Pod nedir, replica nedir anlatmayacağım. Doğrudan sahaya inip kümedeki hayaletleri avlayacağız; neden oluştuklarını analiz edecek, gerçek komutlar, PromQL sorguları ve otomasyon script’leriyle bu yükü kümeden kazıyacağız.

Zombie Pod Nedir ve Neden Türer?

Kubernetes ekosisteminde bir kaynağa “zombie” veya “ghost” dememiz için ille de CrashLoopBackOff hatası alması gerekmez. Hatta en tehlikelisi, cluster’a göre kusursuz çalışanlardır. Bir pod şu durumlarda zombie statüsüne düşer:

  • Lich Podlar (Stuck in Terminating): Kapatılma sinyali (SIGTERM) almış fakat unmount edilemeyen volume veya takılı kalan bir finalizer yüzünden günlerdir Terminating durumunda bekleyenler.
  • Avare (Orphaned/Headless) Podlar: Bir Service selector’ı ile eşleşmeyen, ingress rotası olmayan veya Helm release’i purge edildiği halde etcd tutarsızlığı nedeniyle silinmeyenler.
  • Sıfır Yüklü “Over-provisioned” Podlar: Geliştiricinin debug amacıyla ayağa kaldırdığı, arkasında 4 vCPU / 16 GiB request unuttuğu ve haftalardır 0.001 Core tüketen test artıkları.
  • StatefulSet Kalıntıları (Unbound/Dangling PVCs): StatefulSet scale down edildiğinde Kubernetes mimari gereği PVC’leri silmez. Pod gitmiştir ama arkasında pahalı SSD block storage’lar yatmaya devam eder.

1. Adım: Terminating State’te Çakılı Kalan Podları Avlamak

En sık karşılaşılan senaryo, storage unmount işlemlerinin node üzerinde kilitlenmesi veya custom controller’ların yazdığı finalizer’ların reconcile edilememesidir. Bu podlar CPU/RAM harcamasa bile IP pool’unu (özellikle AWS-VPC CNI veya Calico kullanıyorsanız) rezerve tutar ve node drain işlemlerini bloklar.

Kümedeki tüm namespace’ler genelinde 1 saatten uzun süredir Terminating durumunda olan podları bulalım:

kubectl get pods -A --field-selector=status.phase!=Running \
  -o json | jq -r '
  .items[] | 
  select(.metadata.deletionTimestamp != null) | 
  select((now - (.metadata.deletionTimestamp | fromdateiso8601)) > 3600) | 
  "Namespace: " + .metadata.namespace + " | Pod: " + .metadata.name + " | Waiting: " + ((now - (.metadata.deletionTimestamp | fromdateiso8601))/3600 | tostring) + " hours"'

Birçok mühendis burada hemen kubectl delete pod <pod-name> --force --grace-period=0 komutuna sarılır. Yapmayın. Neden? Çünkü arkasında asılı bir CSI volume kilidi bırakırsanız, ileride o node’a schedule edilecek yeni pod Multi-Attach error for volume hatasıyla patlayacaktır.

Bunun yerine pod’un neden takıldığını görmek için metadata finalizer alanına bakın:

kubectl get pod <zombie-pod-name> -n <namespace> -o jsonpath='{.metadata.finalizers}'

Eğer storage driver çoktan node üzerinden çekildiyse ve controller yanıt vermiyorsa, finalizer’ı JSON merge patch ile söküp atın:

kubectl patch pod <zombie-pod-name> -n <namespace> \
  -p '{"metadata":{"finalizers":null}}' --type=merge

2. Adım: Arkasında Servis Olmayan “Sağır” Podları Yakalamak

CI/CD pipeline’ları çöktüğünde bazen Deployment silinir ancak pod bağımsız bir şekilde çalışmaya devam eder. Ya da deployment label’ları güncellenir fakat Service manifest’indeki selector güncellenmeyi unutulur. Sonuç: Pod CPU ve Memory tüketir ama gelen tek bir HTTP isteği dahi almaz.

Herhangi bir Service’in Endpoints veya modern Kubernetes kümelerinde EndpointSlice objesi tarafından hedeflenmeyen podları tespit etmek için bu pratik bash one-liner’ını çalıştırın:

#!/usr/bin/env bash
# Namespace bazlı hedefsiz pod kontrolü
NAMESPACE="production"

# Tüm geçerli endpoint IP'lerini al
VALID_IPS=$(kubectl get endpointslices -n "$NAMESPACE" -o jsonpath='{.items[*].endpoints[*].addresses[*]}' | tr ' ' '\n' | sort -u)

# Çalışan podların IP'lerini karşılaştır
for POD in $(kubectl get pods -n "$NAMESPACE" -o jsonpath='{range .items[?(@.status.phase=="Running")]}{.metadata.name}{":"}{.status.podIP}{"\n"}{end}'); do
    POD_NAME=$(echo "$POD" | cut -d: -f1)
    POD_IP=$(echo "$POD" | cut -d: -f2)

    if ! echo "$VALID_IPS" | grep -q "$POD_IP"; then
        # DaemonSet ve standalone jobları hariç tutmak isteyebilirsiniz
        OWNER=$(kubectl get pod "$POD_NAME" -n "$NAMESPACE" -o jsonpath='{.metadata.ownerReferences[0].kind}')
        if [[ "$OWNER" != "DaemonSet" && "$OWNER" != "Job" ]]; then
            echo "[ZOMBIE DETECTED] Pod: $POD_NAME (IP: $POD_IP) - Hiçbir Service arkasında değil!"
        fi
    fi
done

Bu senaryo özellikle preview environment’larda çok yaşanır. Pull Request merge edilir, ingress kalkar, service kalkar ama pod orada sonsuza dek sessizce yaşar.

3. Adım: Observability ile Kaynak İsrafını Ortaya Çıkarma

FinOps dünyasında en tehlikeli ghost pod, “iş yapıyor gibi durup hiçbir şey yapmayan” poddur. Geliştirici deployment manifest’inde cpu: "2" ve memory: "4Gi" talep etmiştir. Kubernetes scheduler bu talebi garanti altına almak için node üzerinde ilgili kaynağı rezerve eder (allocatable space düşer). Ancak pod arka planda sadece idle beklemektedir.

Bu israfı yakalamak için Prometheus ve Thanos üzerinde çalıştıracağımız PromQL sorguları devreye girer. Son 7 gün boyunca talep ettiği CPU kaynağının %1’inden azını kullanan podları listeleyelim:

# Prometheus / Thanos PromQL
(
  sum(rate(container_cpu_usage_seconds_total{container!=""}[1h])) by (namespace, pod)
  /
  sum(kube_pod_container_resource_requests{resource="cpu"}) by (namespace, pod)
) * 100 < 1

Bu sorgunun çıktısı size direkt olarak kümenizdeki “zombi rezervasyonları” verir. Pod fiziki olarak ölü değildir, ama maliyet açısından tam bir hayalettir. Node Autoscaler (Karpenter veya Cluster Autoscaler) bu pod yüzünden yeni ec2/compute instance ayağa kaldırmak zorunda kalır.

4. Adım: Sahipsiz StatefulSet Kalıntıları (Ghost PVC’ler)

Storage israfı, compute israfından daha sinsi seyreder çünkü disk saatlik değil, provizyon edildiği toplam boyut üzerinden (GB/ay) faturalandırılır. Bir StatefulSet’in replica sayısını 5’ten 2’ye indirdiğinizde Kubernetes, veri kaybını önlemek adına 3 adet PVC’yi cluster içinde Bound statüsünde tutmaya devam eder.

Peki bu diskleri kullanan aktif bir pod var mı? Görelim:

kubectl get pvc -A -o json | jq -r '
  .items[] | 
  select(.status.phase == "Bound") | 
  select(.metadata.annotations["volume.kubernetes.io/selected-node"] == null and .metadata.ownerReferences == null) | 
  "Namespace: " + .metadata.namespace + " | Unmounted PVC: " + .metadata.name + " | Size: " + .spec.resources.requests.storage'

Burada listelenen PVC’ler, Kubernetes API server düzeyinde kilitli kalmış, pod’u çoktan yok edilmiş disklere işaret eder. Eğer Retain politikasına sahip bir StorageClass kullanıyorsanız, deployment tamamen silinse bile AWS EBS veya GCP Persistent Disk konsolunda faturayı şişirmeye devam eder.

Otomasyon: Zombie Avını Sürekli Kılmak

Her hafta terminal başına geçip bu script’leri çalıştırmak sürdürülebilir bir SRE yaklaşımı değildir. Bunu engellemenin en temiz yolu, kuralları policy engine seviyesinde cluster’a enjekte etmektir.

Completed (başarıyla bitmiş) job podlarının cluster’da günlerce yer kaplamasını engellemek için manifest’lerinize mutlaka ttlSecondsAfterFinished ekleyin veya bir Kyverno policy’si ile bunu zorunlu kılın:

apiVersion: batch/v1
kind: Job
metadata:
  name: nightly-backup-sync
spec:
  # Pod tamamlandıktan 300 saniye (5 dk) sonra kendini imha eder
  ttlSecondsAfterFinished: 300
  template:
    spec:
      containers:
      - name: sync-worker
        image: custom-sync:v1.2
      restartPolicy: OnFailure

Aynı şekilde Kyverno veya OPA Gatekeeper kullanarak, her Deployment için memory/cpu limit ve request oranının belirli bir çarpanı (örneğin request limitin %50’sinden az olamaz kuralı) aşmasını admission webhook aşamasında engelleyebilirsiniz.

Sonuç: FinOps Salt Fatura İncelemek Değildir

DevOps dünyasında maliyet optimizasyonu (FinOps), ay sonunda AWS veya GCP faturasındaki grafikleri inceleyip “Compute Engine çok harcamış” demekten ibaret değildir. Asıl optimizasyon, runtime seviyesinde etcd ve scheduler üzerindeki gereksiz yükleri ayıklamaktır.

Terminating state’te kalan podlar IP tüketir, selector’ı kopmuş podlar gereksiz compute harcar, dangling PVC’ler storage faturasını patlatır. Kümelerinizde periyodik olarak bu kontrolleri pipeline’larınıza veya cron job’larınıza entegre edin. Ghost resource’ları temizlemek sadece faturayı düşürmekle kalmaz, scheduler gecikmelerini (scheduling latency) ve control plane üzerindeki memory overhead’ini doğrudan azaltır.

Category: Genel | LEAVE A COMMENT
Ekim 16 2026

Evde Fermentasyon Sanatı: Bağırsak Sağlığı İçin Kombucha ve Kefir Rehberi

Porsiyon: Yaklaşık 2 Litre | Hazırlık Süresi: 15 Dakika | Fermantasyon Süresi: 7-10 Gün (Kombucha) / 24 Saat (Kefir)

Kabul edelim: Market raflarında “canlı kültürlü” etiketiyle minik şişelerde satılan içeceklere servet dökmekten hepimiz biraz yorulduk. Oysa sağlıklı yaşam arayışında bedenimize yapabileceğimiz en büyük iyiliklerden biri olan bağırsak sağlığı, aslında mutfak tezgahında sessizce bekleyen bir kavanozda başlıyor. Binlerce yıllık bir gelenek olan fermentasyon; hem bütçeyi korumanın hem de mikrobiyotamıza hak ettiği ilgiyi göstermenin en kestirme, lezzetli ve tatmin edici yoludur.

Peki neden fermente gıdalar? Çünkü modern beslenme tarzımız bağırsaktaki iyi bakterileri adeta aç bırakıyor. Evde kendi kombucha veya kefir içeceğinizi hazırladığınızda, dışarıdan aldığınız pastörize ve ömrü uzatılmış ürünlerin aksine, trilyonlarca canlı ve aktif mikroorganizmayı doğrudan sindirim sisteminize davet etmiş olursunuz.

Malzemeler: Mutfağı Laboratuvara Dönüştürmeden

Korkutucu ekipmanlara hiç gerek yok. İhtiyacımız olan şeyler oldukça sade. Temel olarak Kombucha üzerinden ilerleyeceğiz ama Kefir için gereken minik dokunuşu da listeye ekliyoruz:

  • Su: 2 litre klorsuz, içme suyu (Klor bakterileri öldürür, aman dikkat).
  • Çay: 4-5 poşet veya 2 yemek kaşığı siyah ya da yeşil çay (Aromasız, sade çay tercih edin; bergamotlu earl grey içindeki yağlar fermantasyonu bozar).
  • Şeker: 1 su bardağı (yaklaşık 150 gr) beyaz toz şeker. Alternatif: Kamış şekeri de olur. “Şeker zararlı değil mi?” demeyin; o şekeri siz değil, SCOBY tüketecek!
  • SCOBY ve Başlangıç Sıvısı: 1 adet kombucha kültürü ve 1 çay bardağı önceden mayalanmış kombucha sıvısı. (Bir arkadaştan isteyin ya da güvenilir yerlerden temin edin).
  • Kefir Alternatifi İçin: 1 litre günlük tam yağlı süt ve 1 yemek kaşığı aktif kefir mayası.

Adım Adım Ev Yapımı Kombucha

Meşgul bir takviminiz olsa bile bu süreç haftada sadece 15 dakikanızı alır. Geri kalan işi mikroplar halleder.

  1. Çayı Demleyin: 2 litre suyu kaynatın, ocaktan alıp şekeri içinde tamamen eritin. Çayı ekleyin ve 15-20 dakika demlenmeye bırakın. Ardından çay yapraklarını/poşetlerini süzün.
  2. Tamamen Soğutun: Burası kritik. Çayın oda sıcaklığına (20-25°C) gelmesini bekleyin. Sıcak çay, canlı kültürünüzü anında öldürür. Acelemiz yok, bırakın soğusun.
  3. Kavanozda Buluşturun: Soğuyan tatlı çayı temiz bir cam kavanoza aktarın. Üzerine başlangıç sıvısını ve temiz ellerinizle SCOBY’yi bırakın. SCOBY dibe çökebilir ya da yüzebilir; ikisi de normaldir.
  4. Nefes Almasını Sağlayın: Kavanozun ağzını temiz bir tülbent veya kağıt havluyla kapatıp lastikle sabitleyin. Kapağı sıkıca kapatmayın; bakterilerin oksijene ihtiyacı var.
  5. Karanlıkta Dinlendirin: Kavanozu doğrudan güneş almayan, ılık ve havadar bir köşeye (örneğin mutfak dolabının bir köşesine) kaldırın. 7 ila 10 gün dokunmayın.

Bonus: Hızlı Çözüm Arayanlara Kefir Yolu

Eğer “Ben 10 gün bekleyemem, hemen probiyotik lazım” diyorsanız; 1 litre oda sıcaklığındaki süte 1 yemek kaşığı kefir tanesini atın, kavanozun kapağını hafif gevşek kapatıp karanlık bir dolapta 24 saat bekletin. Plastik bir süzgeçten geçirdiğiniz anda taze, kıvamlı kefirinizi içmeye hazırsınız!

Püf Noktası: Fermantasyonun İki Altın Kuralı

Evde fermentasyon yaparken başarının sırrı hijyen ve kullanılan araç gereçtedir. İşte asla atlamamanız gereken detaylar:

  • Metale Kesinlikle Hayır: Ne kombucha ne de kefir hazırlarken metal kaşık, kap veya süzgeç kullanın. Metal, fermente edici bakterileri zayıflatır ve asitle tepkimeye girer. Yalnızca cam, ahşap ya da kaliteli plastik/silikon kullanın.
  • Tadarak Karar Verin: Kombuchanızı 7. günden itibaren temiz bir pipet yardımıyla tadın. Çok tatlıysa fermantasyon bitmemiştir; elma sirkesi gibi keskinleşmişse fazla beklemiştir. Damak zevkinize göre tatlı-ekşi dengesini yakaladığınız an şişeleyip buzdolabına kaldırın. Soğuk, fermantasyonu durdurur.

Kendi içeceğinizi üretmek bir hobi değil, bedeninize gösterdiğiniz samimi bir özendir. İlk partiyi kurun, gerisini doğanın küçük mucizelerine bırakın!

Category: Genel | LEAVE A COMMENT
Ekim 15 2026

Agentic AI Döneminde GitLab: Kod Yazmaktan Sistem Yönetmeye Geçiş

Yazılım geliştirme dünyasında işler çok hızlı değişiyor. Dün sadece kod tamamlama araçlarına şaşırırken, bugün Agentic AI kavramı gündemimizin tam ortasına oturdu. Klasik yapay zeka araçları biz soru sorduğumuzda tek bir cevap üretirken, “ajan” tabanlı sistemler verilen bir hedef doğrultusunda plan yapıyor, kararlar alıyor, araçları kullanıyor ve işi uçtan uca bitiriyor. İşte bu noktada GitLab, sunduğu derinlemesine otomasyon ve DevOps entegrasyonuyla yeni nesil geliştirici platformları yarışında farklı bir kulvara göz kırpıyor.

Peki bu yeni dönem gerçekten yazılımcıların hayatını kolaylaştırıyor mu, yoksa pazarlama departmanlarının yeni bir cilası mı? GitLab Duo Workflow’u masaya yatırdık, test ettik ve neler vaat ettiğine yakından baktık.

“Agentic” Ne Demek ve Neden Birdenbire Önemli Oldu?

Kısa ve net bir benzetme yapalım: GitHub Copilot gibi ilk nesil asistanlar, yanınızda oturan ve siz kod yazarken bir sonraki satırı tahmin etmeye çalışan hevesli bir stajyer gibiydi. Agentic AI ise ona “Bu issue’daki bug’ı çöz, testleri çalıştır, pipeline geçerse bana merge request aç” dediğiniz ve gidip kahve içebildiğiniz bir çalışma arkadaşı modeli.

Yani sadece metin üretmiyor; dosya ağacını geziyor, terminalde komut çalıştırıyor, CI/CD çıktısını okuyor ve hata aldığında kendi kodunu tekrar düzeltiyor. GitLab’in bu alandaki hamlesi olan GitLab Duo Workflow, tam olarak bu mantık üzerine inşa edilmiş durumda.

[Görsel: GitLab Duo arayüzünde arka planda çalışan yapay zeka ajanının pipeline loglarını analiz ettiği ve önerilen çözüm adımlarını listelediği ekran]

Gerçek Bir Test: Gece Kırılan CI/CD Pipeline’ı

Bunu somut bir senaryoyla test ettik. Küçük bir Node.js mikroservisinde bilerek bir tip uyuşmazlığı ve kırık bir unit test bıraktık. Normalde geliştiricinin süreci bellidir: Pipeline fail olur, terminale gidilir, loglar taranır, hata bulunur, düzeltilip tekrar push edilir.

GitLab Duo’nun Root Cause Analysis (Kök Neden Analizi) ajanını devreye soktuğumuzda akış şöyle ilerledi:

# GitLab CI Runner çıktısı:
FAIL src/auth/token.spec.ts
● Test suite failed to run: Type 'string | undefined' is not assignable to type 'string'.

Ajan, hatanın satırını bulmakla kalmadı; ilgili commit geçmişini kontrol etti, ortam değişkenlerindeki eksik kontrolü fark etti ve doğrudan şu formatta bir düzeltme önerdi:

# Duo Workflow'un pipeline logundan çıkardığı otomatik çözüm:
- const token: string = process.env.AUTH_SECRET;
+ const token: string = process.env.AUTH_SECRET ?? '';

Buradaki kritik detay hız değil; bağlam (context). GitLab zaten kodunuzu, CI/CD pipeline’ınızı, issue listenizi ve güvenlik taramalarınızı tuttuğu için ajan harici bir araca göre çok daha fazla bağlama sahip. Ajan dışarıdan gelmiyor, deponun (repo) mutfağında yaşıyor.

Duo Workflow ile Çalışırken Neler Fark Ettik?

Kağıt üzerinde her şey kusursuz görünse de pratikte birkaç pürüz var. Her şeyden önce, bir ajana güvenip merge tuşuna basmak için henüz çok erken. Ajan bazen güvenlik açıklarını kapatırken uygulamanın iş mantığını (business logic) bozacak kestirme yollar seçebiliyor. Kodu incelerken gözünüzü dört açmanız şart.

[Görsel: GitLab Issue panosunda otomatik oluşturulan Merge Request ve ajan tarafından eklenen detaylı açıklama metni]

Artılar ve Eksiler

Platformu birkaç hafta boyunca gerçek projelerde gözlemledikten sonra çıkardığımız bilanço şu şekilde:

Özellik / Durum Artılar (+) Eksiler (-)
Entegrasyon CI/CD, Issue ve Security taramalarıyla tam entegre çalışır. Harici API bağlamaya gerek kalmaz. GitLab ekosistemine sıkı sıkıya bağımlıdır; lokal geliştirme ortamında esnekliği kısıtlıdır.
Hata Çözümü Pipeline hatalarını terminal loglarını okuyarak saniyeler içinde tespit eder. Karmaşık mimarilerde bazen yüzeysel çözümler önerip ana sorunu ıskalayabilir.
Gizlilik & Güvenlik Kod verileriniz modelleri eğitmek için kullanılmaz; kurumsal regülasyonlara uygundur. Özelleştirilmiş şirket içi modelleri GitLab SaaS üzerinde doğrudan çalıştırmak zordur.

Fiyatlandırma ve Cep Yakan Detaylar

Gelelim cüzdan kısmına. GitLab Duo özellikleri ne yazık ki tamamen ücretsiz sunulmuyor.

  • GitLab Duo Pro: Kullanıcı başına aylık $19 (Mevcut Premium veya Ultimate lisansınıza ek olarak ödenir). Kod tamamlama ve chat içerir.
  • GitLab Duo Enterprise: Kullanıcı başına aylık $39. Asıl “agentic” yetenekler, kök neden analizi ve güvenlik açığı giderme özellikleri bu pakette toplanmış.

Bütçesi kısıtlı ekipler veya bireysel geliştiriciler için bu rakamlar yüksek gelecektir. Peki ücretsiz veya açık kaynaklı alternatifler yok mu? Elbette var:

  • Aider: Terminalinizde çalışan, yerel Git deponuzla konuşan ve kendi kendine commit atan şahane bir açık kaynak CLI aracı.
  • Continue.dev: VS Code ve JetBrains için açık kaynaklı eklenti. Kendi API anahtarınızla (veya yerel Ollama modelleriyle) çalıştırabilirsiniz.
  • OpenDevin (All-Hands AI): GitLab Duo Workflow mantığını açık kaynak olarak inşa etmeyi hedefleyen, tarayıcı ve terminal kontrolü yapabilen topluluk projesi.

Geliştiriciler Bu Yeni Döneme Nasıl Hazırlanmalı?

Görünen köy kılavuz istemez: Önümüzdeki 2-3 yıl içinde vaktimizin çoğunu sıfırdan satır satır kod yazarak değil, ajanların yazdığı kodları denetleyerek (code review) geçireceğiz. Bu dönüşüme ayak uydurmak için şimdiden yapabileceğiniz üç şey var:

  1. Daha İyi Dokümantasyon Yazın: Ajanlar projenizin README’sini, CONTRIBUTING rehberini ve mimari şemalarını okuyarak kararlar alır. Bağlam ne kadar netse, ajanın çıktısı o kadar isabetli olur.
  2. Test Kapsamını Artırın: Kod yazan bir yapay zekanız varsa, o kodun doğruluğunu kanıtlayacak sağlam unit ve integration testlerine dünden daha çok ihtiyacınız var.
  3. Küçük Görevlerle Başlayın: Ajanlara doğrudan tüm mimariyi teslim etmek yerine; döküman güncelleme, bağımlılık versiyonu yükseltme ve kırık testleri onarma gibi rutin işleri devrederek sınırlarını öğrenin.

Son Söz

GitLab, Agentic AI dalgasını sadece bir sohbet kutusu eklemek olarak görmüyor; tüm DevOps döngüsünün beyni haline getirmeye çalışıyor. Henüz mükemmel değil, zaman zaman saçmalıyor ve fiyatı küçük ekipler için tuzlu. Ancak yazılım geliştirme süreçlerinin geleceği tam olarak burada şekilleniyor. İşi tamamen yapay zekaya bırakmak akıllıca değil; fakat bir ajanla birlikte çalışmayı öğrenmemek yakında büyük bir dezavantaja dönüşecek.

Category: Genel | LEAVE A COMMENT
Ekim 12 2026

Yeşil DevOps: CI/CD Pipeline’larınızın Karbon Ayak İzini Nasıl Takip Edersiniz?

Modern mühendislik ekipleri olarak FinOps dashboard’larına bakıp AWS faturasından yüzde üç kırpınca kendimizi zafer kazanmış sayıyoruz. Ancak altyapı maliyetini optimize ederken gözden kaçırdığımız çok daha somut bir parametre var: Watt tüketimi. CI/CD süreçlerimizin tükettiği ham enerji ve açığa çıkardığı karbon ayak izi, yazılım dünyasında sürdürülebilirlik başlığı altında artık doğrudan ölçülebilir bir mühendislik metriği. Carbon-Aware DevOps yaklaşımı, bu süreci “ağaç diktik” sertifikalarından çıkarıp doğrudan pipeline konfigürasyonlarına, Prometheus metriklerine ve eBPF seviyesine indiriyor.

Her PR açıldığında tetiklenen devasa entegrasyon testleri, gereksiz katman inşa eden Docker build’leri ve 32 vCPU’luk runner’larda 2 dakika koşan linter’lar sadece fatura değil, şebekeden doğrudan kirli elektrik tüketiyor. Peki bu tüketimi hissi yaklaşımlarla değil, production-grade araçlarla nasıl ölçer ve optimize ederiz?

SCI (Software Carbon Intensity) ve Ölçüm Mantığı

Green Software Foundation tarafından standardize edilen SCI spesifikasyonu karmaşık bir fizik denklemi değil. Bir CI/CD pipeline’ı için denklemi şu şekilde özetleyebiliriz:

SCI = ((E * I) + M) / R

  • E (Energy): Pipeline çalışırken harcanan toplam enerji (kWh).
  • I (Location-Based Carbon Intensity): İşlemin yapıldığı veri merkezinin bağlı olduğu elektrik şebekesindeki emisyon oranı (gCO2eq/kWh).
  • M (Embodied Carbon): Sunucu donanımının üretimi ve bertarafından düşen amortisman payı.
  • R (Functional Unit): Bizim durumumuzda tek bir “Pipeline Run”, “Build Başına PR” veya “Deployment”.

Geliştirici ortamında M parametresini çoğunlukla sabit kabul ederiz. Mühendislik olarak doğrudan müdahale edebileceğimiz iki değişken var: Harcanan enerji (E) ve bu enerjinin tüketildiği andaki grid karbon yoğunluğu (I).

Runner Seviyesinde Enerji Tüketimini Ölçmek: Kepler ve eBPF

Eğer self-hosted runner kullanıyorsanız (Kubernetes üzerinde Actions Runner Controller – ARC veya GitLab Runner), bare-metal ya da sanal makine seviyesindeki enerji tüketimini RAPL (Running Average Power Limit) sayaçları ve eBPF kullanarak pod bazında ayrıştırabilirsiniz. Bu noktada sektör standardı araç Kepler (Kubernetes-based Efficient Power Level Exporter).

Kepler, eBPF tracing ile CPU döngülerini, bellek erişimlerini pod ve container seviyesinde dinler; ardından RAPL arayüzünden okunan watt değerini bu metriklerle ilişkilendirir. Kubernetes tabanlı runner kümenize Kepler’i Helm ile deploy etmek oldukça yalındır:

helm repo add kepler https://sustainable-computing-io.github.io/kepler-helm-chart
helm repo update

helm install kepler kepler/kepler \
  --namespace kepler-system \
  --create-namespace \
  --set serviceMonitor.enabled=true \
  --set canMount.usrSrc=true

Kepler ayağa kalktıktan sonra, CI runner’larınızın namespace’i için Prometheus üzerinden doğrudan anlık tüketimi Joule cinsinden sorgulayabilirsiniz. Tek bir pipeline pod’unun toplam enerji tüketimini (kWh cinsinden) çıkarmak için şu PromQL sorgusu işinizi görür:

# Belirli bir CI pod'unun tükettiği toplam enerji (kWh)
sum(
  increase(kepler_container_joules_total{container_namespace="ci-runners", pod_name=~"runner-build-.*"}[1h])
) / 3600000

3.600.000’e bölmemizin nedeni Joule’ü kWh’a çevirmek. Elinizde artık soyut bir “build 8 dakika sürdü” verisi değil, “bu build 0.042 kWh tüketti” metrik verisi var.

Carbon-Aware Scheduling: Testleri Ne Zaman Koşmalı?

CI pipeline’larını sadece “hızlı bitsin” diye tasarlamak yerine, işin doğasına göre sınıflandırmak gerekir. Kritik bir hotfix PR’ı hemen koşmalıdır; ancak nightly build’ler, periyodik regression testleri veya end-to-end sentetik yük testleri zamana duyarlı değildir. İşte burada Carbon-Aware Execution devreye girer.

Elektrik şebekesindeki karbon yoğunluğu rüzgar ve güneş üretimine göre gün içinde radikal biçimde değişir. Örneğin Almanya (eu-central-1) şebekesi öğlen saatlerinde güneş panelleri devredeyken 150 gCO2eq/kWh seviyesindeyken, akşam rüzgar kesildiğinde ve kömür devreye girdiğinde 600 gCO2eq/kWh seviyesine fırlayabilir.

Aşağıdaki GitHub Actions workflow örneğinde, Electricity Maps API’sini kullanarak o anki grid karbon yoğunluğunu sorguluyoruz. Eğer emisyon eşik değerin üzerindeyse ve acil olmayan bir batch job koşuyorsak, build’i postpone ediyoruz veya düşük karbonlu bir bölgedeki runner’a route ediyoruz:

name: Carbon-Aware Integration Suite

on:
  schedule:
    - cron: '0 * * * *' # Saatlik tetikleme
  workflow_dispatch:

jobs:
  check-carbon-intensity:
    runs-on: ubuntu-latest
    outputs:
      should_run: ${{ steps.carbon_check.outputs.should_run }}
    steps:
      - name: Fetch Carbon Intensity
        id: carbon_check
        env:
          EMAPS_API_TOKEN: ${{ secrets.ELECTRICITY_MAPS_TOKEN }}
          ZONE: "DE" # Almanya şebekesi
          THRESHOLD: 250 # gCO2eq/kWh sınırı
        run: |
          RESPONSE=$(curl -s -H "auth-token: $EMAPS_API_TOKEN" \
            "https://api.electricitymap.org/v3/carbon-intensity/latest?zone=$ZONE")
          
          INTENSITY=$(echo $RESPONSE | jq '.carbonIntensity')
          echo "Güncel Karbon Yoğunluğu: $INTENSITY gCO2eq/kWh"

          if [ "$INTENSITY" -lt "$THRESHOLD" ]; then
            echo "Şebeke temiz. Pipeline çalıştırılıyor."
            echo "should_run=true" >> $GITHUB_OUTPUT
          else
            echo "Şebeke kirli. Ağır testler erteleniyor."
            echo "should_run=false" >> $GITHUB_OUTPUT
          fi

  heavy-tests:
    needs: check-carbon-intensity
    if: needs.check-carbon-intensity.outputs.should_run == 'true'
    runs-on: arc-runner-set
    steps:
      - uses: actions/checkout@v4
      - name: Run E2E Tests
        run: make test-e2e

Neden Böyle Yapıyoruz?

Çünkü saatte 200 kWh tüketen devasa bir staging test kümeniz varsa, sadece çalıştırma saatini kaydırarak (carbon-shifting) pipeline altyapısına tek bir satır kod optimizasyonu yapmadan emisyonu yüzde 40 ila 60 oranında azaltabilirsiniz. Bu, production iş yüklerini taşımaktan çok daha risksiz ve anında etki eden bir yöntemdir.

Pipeline Seviyesinde Optimizasyon: Boşa Yanan CPU Döngülerini Kesmek

Yalnızca zamanlama yetmez; tüketilen ham enerjiyi (E) kısmak için pipeline anatomisini elden geçirmek gerekir. Tipik kurumsal CI/CD süreçlerinde en çok enerji israfına yol açan pratikler ve çözümleri şunlardır:

1. Docker Katman Önbelleği (BuildKit Cache Thrashing)

CI ortamında her build’de sıfırdan pip install veya npm ci yapmak sadece pipeline süresini uzatmaz; runner üzerinde disk I/O ve network adaptörü aracılığıyla gereksiz CPU watt tüketimi üretir. GitHub Actions Cache veya harici S3/Registry cache backend kullanmak doğrudan enerji tasarrufudur.

# Kaniko veya Buildx ile GitHub Actions Cache backend kullanımı
docker buildx build \
  --cache-to type=gha,mode=max \
  --cache-from type=gha \
  --tag my-service:${{ github.sha }} \
  --file Dockerfile .

mode=max kullanımı sadece son imajı değil, ara katmanları da saklar. Bu sayede multi-stage build’lerde dependency stage’i değişmediği sürece CPU neredeyse rölanti modunda kalır.

2. Mimari Değişimi: x86_64 Yerine ARM64 Runner’lar

AWS Graviton veya Ampere Altra tabanlı ARM64 instance’lar, modern Intel/AMD eşdeğerlerine kıyasla Watt başına kayda değer oranda daha yüksek işlem kapasitesi sunar (Performance-per-Watt). CI/CD runner filolarınızı ARM mimarisine taşımak, build sürelerini dramatik olarak değiştirmese bile doğrudan tüketilen toplam enerjiyi yüzde 20-30 oranında aşağı çeker.

Aşağıdaki gibi basit bir Docker buildx multi-arch matrix konfigürasyonu yerine derlemeyi doğrudan hedef donanımda (native) yapmak CPU emülasyon maliyetini (QEMU overhead) ortadan kaldırır:

# QEMU üzerinden emüle edilmiş ARM build (YÜKSEK ENERJİ TÜKETİMİ - KAÇININ)
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker buildx build --platform linux/arm64 -t app:latest .

# DOĞRU YAKLAŞIM: Native ARM64 Runner ayağa kaldırıp doğrudan derlemek
# GitHub Actions: runs-on: [self-hosted, linux, arm64]

Emülasyon ile derleme yapmak CPU döngülerini 4 ila 10 kat artırarak ciddi bir enerji israfı yaratır. Build’i native runner’a devretmek doğrudan watt tasarrufudur.

Emisyon Verisini PR Seviyesine İndirmek

Mühendise geri bildirim vermediğiniz hiçbir metrik iyileşmez. Code-coverage raporu veya lint hatası gibi, her pull request’in ne kadar karbon emisyonuna yol açtığını PR yorumu olarak basmak ekip kültürünü dönüştürür. Açık kaynak araçlardan Eco-CI bu iş için doğrudan GitHub Actions içine entegre olabilen hazır step’ler sağlar:

steps:
  - name: Eco-CI Init
    uses: green-coding-solutions/eco-ci-energy-estimation@v4
    with:
      task: start-measurement

  - name: Build and Test Project
    run: |
      mvn clean verify

  - name: Eco-CI Measurement
    uses: green-coding-solutions/eco-ci-energy-estimation@v4
    with:
      task: get-measurement
      label: 'Maven Test Suite'

  - name: Eco-CI PR Comment
    uses: green-coding-solutions/eco-ci-energy-estimation@v4
    with:
      task: display-results
      send-pr-comment: true

Bu konfigürasyon, GitHub API üzerinden PR altına çalıştırılan donanımın ortalama enerji katsayılarına göre tüketilen kWh ve üretilen CO2eq gramajını yazar. Bir geliştirici, yazdığı verimsiz bir integration testinin pipeline süresini 10 dakika uzatmasının sadece kendisini değil, ölçülebilir bir emisyonu tetiklediğini gördüğünde optimizasyon soyut bir hedef olmaktan çıkar.

Sonuç: FinOps ve GreenOps Ayrımı Ortadan Kalkıyor

Yeşil DevOps, marjinal bir çevreci PR çalışması değil; modern sistem mimarisinin kaçınılmaz bir optimizasyon evresidir. Pipeline’larınızdaki CPU kullanımını optimize etmek, katmanları doğru önbelleğe almak, runner’ları doğru mimariye geçirmek ve zamana duyarsız işleri şebekenin temiz olduğu anlara kaydırmak teknik borcu azaltır. Daha az CPU döngüsü, daha az fatura ve nihayetinde daha düşük bir karbon ayak izi demektir.

Category: Genel | LEAVE A COMMENT
Ekim 11 2026

Geliştiriciler İçin Mutfak Otomasyonu: Sous-Vide ile Veri Odaklı Beslenme

Porsiyon: 2 Kişilik | Hazırlık Süresi: 10 Dakika | Pişirme Süresi: 60 Dakika (Eller serbest)

Kod yazarken deploy süreçlerini otomatikleştiriyoruz da neden akşam yemeğinde bir tavuk göğsünün başında nöbet tutuyoruz? Yoğun çalışma temposunda healthy eating alışkanlığını sürdürmek genelde can sıkıcı bir hal alır; fakat sous-vide tekniği sayesinde meal preparation süreçlerinizi adeta arka planda çalışan bir cron job’a dönüştürebilir, günlük productivity kaybı yaşamadan restoran kalitesinde tabaklar çıkarabilirsiniz.

Deterministik Yemek Pişirme: Sous-Vide Nedir?

Sous-vide (Fransızca “vakum altında”), gıdaların kilitli veya vakumlu bir torbaya konulup hassas bir ısı kontrol cihazıyla su banyosunda yavaşça pişirilmesi yöntemidir. Klasik tavada ısı dıştan içe hızla akar; bu da dışın yanmasına, için ise çiğ kalmasına yol açar. Sous-vide’de ise suyun sıcaklığı tam olarak hedeflediğiniz iç sıcaklığa ayarlanır. Yani tavuk göğsünüzü 64°C banyoya bırakırsanız, 1 saat sonra da 3 saat sonra da tam 64°C kalır. Aşırı pişme, kuruma ya da yanma riski matematiksel olarak imkânsızdır.

Malzemeler

  • 2 adet kemiksiz, derisiz tavuk göğsü (yaklaşık 400-500g)
  • 1 yemek kaşığı sızma zeytinyağı
  • 1 diş ezilmiş sarımsak (veya 1 çay kaşığı sarımsak tozu)
  • 1 dal taze biberiye veya kekik
  • 1 çay kaşığı tuz
  • Yarım çay kaşığı taze çekilmiş karabiber
  • Yarım limonun kabuğu (rendelenmiş)

Alternatif Malzeme Önerisi: Tavuk yerine somon fileto kullanabilirsiniz. Somon için cihazı 52°C’ye ayarlayıp süreyi 35 dakikaya indirmeniz yeterlidir. Vegan bir alternatif arıyorsanız, aynı baharat dengesini ekstra sıkı tofu veya kalın dilimlenmiş istiridye mantarı ile deneyebilirsiniz.

Adım Adım Hazırlanışı

  1. Suyu Isıtın: Sous-vide cihazınızı derin bir tencereye sabitleyin. Suyu 64°C’ye ayarlayın ve cihazın hedef ısıya ulaşmasını bekleyin.
  2. Marine ve Paketleme: Tavuk göğüslerini kurulayın. Tuz, karabiber, zeytinyağı, sarımsak, taze otlar ve limon kabuğu ile hafifçe ovun. Tavukları kilitli fermuarlı poşete (ziploc) veya vakum poşetine yerleştirin.
  3. Havayı Tahliye Edin: Vakum makineniz yoksa poşeti yavaşça suya daldırarak suyun basıncıyla havanın yukarı çıkmasını sağlayın (su yer değiştirme yöntemi) ve ağzını tam su seviyesinde kapatın.
  4. Pişirmeye Başlayın: Torbayı 64°C’deki suya bırakın ve timer’ı 60 dakikaya kurun. Şimdi bilgisayarınızın başına dönüp kodunuza odaklanabilirsiniz; yemek kendi kendine güvenle pişecektir.
  5. Mühürleme (Opsiyonel ama Tavsiye Edilir): Süre dolduğunda tavukları torbadan çıkarıp kağıt havluyla kurulayın. Döküm bir tavayı yüksek ateşte iyice ısıtın, çok az yağ ekleyin ve her iki tarafını sadece 45’er saniye mühürleyip servis yapın.

Püf Noktası

Sous-vide torbasından çıkan et soluk görünür çünkü su banyosunda Maillard reaksiyonu (karamelize lezzet kabuğu) gerçekleşmez. Eti tavaya atmadan önce yüzeyindeki tüm nemi kağıt havluyla mutlaka alın. Et ne kadar kuru olursa, tavada o kadar hızlı renk alır ve iç sıcaklığı yükselmeden dışı çıtırlaşır. 45 saniyeyi kesinlikle aşmayın; içerideki sululuğu korumak asıl amacımız.

Batch Cooking ile Haftayı Kurtarın

Pazar günü bu işlemi tek seferde 6-8 adet tavuk göğsüyle yapın. Pişirme biter bitmez torbaları buzlu suya atarak şoklayın ve ardından buzdolabına kaldırın. Hafta içi yoğun bir sprint koşarken tek yapmanız gereken torbayı açıp salatanıza doğramak ya da 1 dakika tavada ısıtmak. Sağlıklı beslenmek artık irade savaşı değil, sadece iyi kurulmuş bir sistem meselesi.

Category: Genel | LEAVE A COMMENT