Ekim 28 2026

Shadow IT ile Mücadele: Altyapıda Gizli Çalışan Araçları Tespit ve Entegre Etme Rehberi

Modern bir yazılım organizasyonunda DevOps güvenliği genellikle CI/CD pipeline’larına konulan static analiz araçları veya prod ortamındaki WAF kurallarıyla sınırlı sanılır. Oysa asıl kanama, radarın altında gerçekleşir. Bir sabah Slack’ten gelen bir webhook bildiriminin AWS yerine rastgele bir Fly.io instance’ına gittiğini, ekibin logları incelemek için üçüncü parti, ücretsiz bir SaaS paneline IAM Access Key bastığını ya da geliştiricinin webhook test etmek için production pod’una ngrok kurduğunu fark edersiniz. Hoş geldiniz; Shadow IT dünyasındasınız. Bu makalede, kurumsal güvenlik standartlarını yerle bir etmeden, modern altyapı yönetimi dinamikleriyle bu kaçak yapıları nasıl avlayacağımızı ve platform mühendisliği sınırlarına nasıl çekeceğimizi konuşacağız.

Geliştirici Neden Shadow IT’ye Sığınır?

Kök nedene inmeden audit tool çalıştırmak, yalnızca semptomları bastırır. Bir kıdemli mühendisin ya da tech lead’in şirket politikalarını çiğneyip “kaçak” araç kurmasının tek bir temel sebebi vardır: Friction (Sürtünme).

Jira’da “S3 Bucket oluşturulması” için bilet açıp üç gün onay bekleyen bir geliştirici, deadline yaklaştığında işi çözmek için kişisel AWS hesabında bucket açar ve production koduna bu credential’ları gömer. VPN yapılandırması yüzünden yerel ortamında debug yapamayan adam, container’ın içine gizlice cloudflared sokar. Güvenlik ekiplerinin “hayır” dediği her senaryo, Shadow IT için verimli bir toprak yaratır. Çözüm, sadece engellemek değil; tespiti otomatize edip ardından o aracı “Paved Road” (onaylı ve otomasyonu yapılmış yol) standardına dönüştürmektir.

1. Rogue Tünellerin Tespiti: ngrok, cloudflared ve FRP

Geliştiricilerin ingress kısıtlamalarını aşmak için kullandığı en popüler yöntem reverse tunnel araçlarıdır. Uç noktalarda (developer makineleri veya staging pod’ları) bu araçları tespit etmek için osquery veya doğrudan eBPF tabanlı denetim mekanizmaları kurmalıyız.

Aşağıdaki osquery sorgusu, sistemde bilinen tünel istemcilerini ve bunların açık socket bağlantılarını anlık olarak yakalar:

SELECT p.pid, p.name, p.path, p.cmdline, pos.remote_address, pos.remote_port
FROM processes p
JOIN process_open_sockets pos ON p.pid = pos.pid
WHERE p.name IN ('ngrok', 'cloudflared', 'frpc', 'localtunnel')
   OR p.cmdline LIKE '%tunnel%'
   OR p.cmdline LIKE '%reverse%';

Kubernetes cluster’ınızda bu tarz kaçak tünellerin container seviyesinde çalışmasını engellemek için runtime güvenliği (Falco) kurallarını devreye almanız gerekir. Falco kural setinize ekleyeceğiniz basit bir yaml bloğu, staging veya production pod’larında shell üzerinden rogue binary indirilip çalıştırıldığı an SIEM sisteminize alert düşürür:

- rule: Unauthorized Reverse Tunnel Tool Launched
  desc: Detect rogue tunnel tools executed inside containers
  condition: >
    spawned_process and container and
    (proc.name in (ngrok, cloudflared, frpc) or
     proc.args contains "bore.pub" or
     proc.args contains "telebit")
  output: Rogue tunnel tool started (user=%user.name command=%proc.cmdline container_id=%container.id image=%container.image.repository)
  priority: CRITICAL
  tags: [container, network, shadow_it]

2. Bulutta State Dışı Kaynak Avı: Drift ve Rogue Resource Tespiti

Terraform veya OpenTofu ile altyapı yönetiyorsanız, pipeline dışında AWS Management Console’dan veya gcloud CLI üzerinden elle açılan kaynaklar doğrudan Shadow IT sınıfına girer. Bu kaynaklar hem maliyet anomalisi yaratır hem de security group’ları genellikle 0.0.0.0/0 olarak bırakılır.

Bu durumu tespit etmenin en temiz yolu, Terraform state dosyası ile gerçek bulut durumunu düzenli olarak karşılaştıran drift-detection cronjob’larıdır. Ancak daha derin bir tarama için doğrudan CloudTrail logları üzerinden IaC role’ü dışındaki kimliklerin yarattığı kaynakları filtrelemelisiniz.

Aşağıdaki AWS CLI komutu, altyapı otomasyonu servis rolü (örneğin TerraformExecutionRole) haricinde bir kullanıcı veya rol tarafından son 24 saatte oluşturulmuş Security Group’ları doğrudan listeler:

aws cloudtrail lookup-events \
  --lookup-attributes AttributeKey=EventName,AttributeValue=CreateSecurityGroup \
  --start-time "$(date -u -v-24H +%Y-%m-%dT%H:%M:%SZ)" \
  --query 'Events[?Username!=`TerraformExecutionRole`].[EventTime, Username, CloudTrailEvent]' \
  --output json | jq -r '.[] | {Time: .[0], User: .[1], Detail: (.[2] | fromjson)} | select(.Detail.userIdentity.sessionContext.sessionIssuer.userName != "TerraformExecutionRole")'

Eğer bir developer AWS Console’a girip click-ops yöntemiyle bir EC2 veya RDS ayağa kaldırdıysa, CloudTrail ve CloudWatch Events üzerinde tetiklenecek bir Lambda fonksiyonu ile kaynağı etiketleyebilir (“non-compliant-shadow-it”), Slack kanalına bildirebilir veya otomatik olarak terminate edebilirsiniz.

3. Git Ekosisteminde Kaçak Webhook ve Entegrasyon Denetimi

Geliştiricilerin işlerini kolaylaştırmak amacıyla kişisel hesaplarını şirketin GitHub/GitLab organizasyonlarına bağlaması sık görülen bir sızıntı vektörüdür. Kod analizi yapan ücretsiz bir SaaS aracı, organizasyonunuza read/write yetkisiyle eklendiğinde tüm fikri mülkiyetiniz ve secret’larınız ilgili SaaS platformunun güvenliğine teslim edilmiş olur.

GitHub API kullanarak, organizasyon düzeyinde kurulmuş yetkisiz GitHub App’leri ve repository webhook’larını denetleyen bir scripti CI/CD süreçlerinizin başında düzenli çalıştırmalısınız:

# Organizasyondaki tüm repolarda bilinmeyen hedeflere giden webhookları listeleme
ORG="sirket-adiniz"
APPROVED_DOMAINS=("ci.sirket.internal" "slack.com" "argocd.sirket.internal")

gh repo list $ORG --limit 100 --json name -q '.[].name' | while read -r repo; do
  hooks=$(gh api "repos/$ORG/$repo/hooks" --jq '.[].config.url')
  for url in $hooks; do
    domain=$(echo "$url" | awk -F[/:] '{print $4}')
    if [[ ! " ${APPROVED_DOMAINS[@]} " =~ " ${domain} " ]]; then
      echo "[ALERT] Repo: $repo üzerinde bilinmeyen webhook hedefi: $url"
    fi
  done
done

Bu yaklaşımı GitLab tarafında Project Badges, Webhooks ve System Hooks API endpoint’lerini periyodik olarak scrape ederek uygulayabilirsiniz.

4. Egress Filtreleme ve DNS Log Analizi (CoreDNS)

Kubernetes cluster’ınızdaki container’ların nereye konuştuğunu bilmek zorundasınız. Çoğu Kubernetes kümesinde pod’lar varsayılan olarak tüm internete çıkış iznine (egress) sahiptir. İşte bu durum, Shadow SaaS kullanımını ve kaçak veri aktarımlarını tetikler.

Kubernetes içinde CoreDNS kullanıyorsanız, dnstap veya doğrudan log plugin’i ile dışarıya doğru yapılan DNS çözümlemelerini loglayıp bir SIEM (Elasticsearch, Loki vb.) üzerinde aggregate edebilirsiniz. Örnek bir Corefile konfigürasyonu:

.:53 {
    errors
    health
    ready
    kubernetes cluster.local in-addr.arpa ip6.arpa {
        pods insecure
        fallthrough in-addr.arpa ip6.arpa
    }
    # Shadow IT tespiti için cluster dışına giden tüm istekleri logla
    log . {
        class denial error
        dump
    }
    # Dış DNS isteklerini loglamak için özel format
    rewrite name suffix .internal .cluster.local
    forward . /etc/resolv.conf {
        max_concurrent 1000
    }
    cache 30
    reload
}

Burada toplanan domain loglarında düzenli olarak notion.so, airtable.com, trello.com gibi araçlara pod içi credential’lar veya staging ortamından istek atılıp atılmadığı analiz edilmelidir. Eğer bir backend servisi bir günde aniden Pastebin veya Anonfiles API’larına sorgu atmaya başladıysa, ortada ya bir Shadow IT senaryosu ya da sızdırılmış bir secret ile veri kaçırma (exfiltration) vakası vardır.

Göz Yumma, Yasaklama: Entegre Et

Shadow IT’yi avlarken düşülen en büyük hata “Yasakçı Polis” rolünü benimsemektir. Geliştirici ekiple savaşamazsınız; geliştirici her zaman güvenlik duvarınızın etrafından dolaşacak daha yaratıcı bir yol bulur.

Kullanılan aracı yakaladığınızda uygulamanız gereken playbook şu adımlardan oluşmalıdır:

  • İhtiyacı Anlayın: Bu servis neden kuruldu? Şirketin sunduğu Jenkins yetersiz olduğu için mi CircleCI’a gidildi? AWS SQS yerine Upstash Redis mi kullanılmış?
  • Paved Road’a Alın: Aracın kurumsal sürümünü (SSO destekli, SCIM destekli, denetlenebilir) platforma entegre edin. Eğer güvenlik standartlarına uymuyorsa, kurum içi benzer bir self-service alternatifi sağlayın.
  • Self-Service Altyapı Sunun: Backstage veya benzeri bir IDP (Internal Developer Platform) kurarak, geliştiricinin ihtiyaç duyduğu geçici ingress tünelini, dev database’ini veya S3 bucket’ını dakikalar içinde, standartlara uygun olarak kendi kendine deploy etmesini sağlayın.

DevOps’ta güvenlik, geliştiricinin hızını kesen bir bariyer değil; onların 200 km hızla giderken uçurumdan yuvarlanmasını engelleyen çelik bariyerler olmalıdır. Radarınızı açık tutun, telemetry verinizi dinleyin ve izin veremeyeceğiniz araçların yerine her zaman daha iyi bir mühendislik alternatifi koyun.

Category: Genel | LEAVE A COMMENT
Ekim 27 2026

Model-Agnostic İş Akışları: Farklı LLM’leri Tek Bir Arayüzde Zincirleme (Chaining)

Yapay zeka dünyasında son bir yıldır garip bir kabilecilik var: Kimi sadece Claude 3.5 Sonnet övüyor, kimi GPT-4o olmadan parmağını bile kıpırdatmıyor. Oysa üretim bandına indiğimizde acı gerçek yüzümüze çarpıyor: Her işi mükemmel yapan tek bir llm henüz icat edilmedi. Günümüzün modern ai tools ekosisteminde asıl güç, tek bir modele tapınmakta değil; modellerin en iyi yönlerini bir araya getiren akıllı bir otomasyon kurgulamakta yatıyor.

Bu yazıda, tek bir modele bağımlı kalmadan (“model-agnostic”), Claude’un akıcı üslubu ile GPT-4’ün analitik zekasını aynı pipeline üzerinde nasıl zincirleyeceğimizi (chaining) test edeceğiz. Üstelik karmaşık kod yığınlarına boğulmadan, popüler iş akışı aracı n8n üzerinden somut bir senaryo kuracağız.

“Model-Agnostic” Ne Demek ve Neden Umurumuzda Olmalı?

Model-agnostic, en basit tanımıyla kurduğunuz sistemin arkasındaki yapay zeka sağlayıcısına (OpenAI, Anthropic, Google ya da yerel bir Mistral modeli) körü körüne bağımlı olmamasıdır. Bugün ChatGPT API’ı çökerse ya da Anthropic fiyatlarına %50 zam yaparsa iş akışınız duruyor mu? Duruyorsa, “vendor lock-in” tuzağındasınız demektir.

Bir diğer mesele de her modelin uzmanlık alanının farklı olması. OpenAI modelleri genellikle katı JSON çıktıları üretmekte, fonksiyon çağırmada (function calling) ve mantıksal veri analizinde bir tık daha kararlıyken; Anthropic’in Claude modelleri insansı metin üretimi, yaratıcı yazarlık ve nüans yakalama konusunda bariz şekilde daha doğal hissettiriyor. Peki neden birini seçmek zorunda kalalım?

Test Senaryosu: Kaotik Veriden Akıcı Bültene

Lafı uzatmadan laboratuvara geçelim. Şöyle bir problemimiz olsun: Müşterilerden gelen dağınık geri bildirimleri (e-postalar, destek biletleri, anketler) toplayıp yönetim ekibi için haftalık şık bir özet bültene dönüştürmek istiyoruz.

Bu senaryoda tek bir LLM kullandığımızda genellikle iki sorunla karşılaşıyoruz:
1. GPT-4’e “samimi ve akıcı bir dille özetle” dediğimizde yine de hafif kurumsal ve mekanik bir ton alıyoruz.
2. Claude’a ham veriyi atıp “bunu önce kategorize et, puanla, sonra yaz” dediğimizde bazen format kurallarını esnetebiliyor.

Çözüm: Görevi ikiye bölüp zincirlemek (chaining).

[Görsel: n8n üzerinde Webhook tetikleyicisi, ardından OpenAI Node’u ve devamında Claude Node’unun bağlandığı iş akışı şeması]

Adım 1: GPT-4o ile Analiz ve Sınıflandırma

İlk aşamada ham metni OpenAI’ın GPT-4o modeline paslıyoruz. Burada iyi bir prompt engineering dokunuşuyla modelden sadece ve sadece geçerli bir JSON çıktısı istiyoruz. Modelin edebiyat yapmasını değil, duyguları -1 ile +1 arasında puanlamasını ve ana problemleri etiketlemesini bekliyoruz.

POST https://api.openai.com/v1/chat/completions
{
  "model": "gpt-4o",
  "response_format": { "type": "json_object" },
  "messages": [
    {"role": "system", "content": "Gelen metni analiz et ve {'kategori': '', 'duygu_skoru': 0, 'oncelik': ''} formatında JSON dön."}
  ]
}

Adım 2: Claude 3.5 Sonnet ile Hikayeleştirme

GPT-4o işini bitirdiğinde elimizde tertemiz, filtrelenmiş bir JSON objesi var. Şimdi bu JSON’ı alıp Claude 3.5 Sonnet’e devrediyoruz. Claude’a verdiğimiz komut basit: “Bu analitik veriyi al ve şirket içi Slack kanalında paylaşılacak, esprili, motive edici ama sorunları da net gösteren bir mini bültene çevir.”

Sonuç? GPT-4’ün hata yapmayan mantık süzgecinden geçmiş, Claude’un o nefis kaleminden çıkmış hibrit bir rapor. İki model de en iyi bildiği işi yaptı.

Bu Düzeni Nasıl Kurduk? n8n ile Pratik Entegrasyon

Bunu Python script’leriyle LangChain kullanarak da yapabilirdiniz. Ancak işi operasyonel hale getirmek ve görsel olarak takip edebilmek için n8n biçilmiş kaftan. n8n, API’ları birbirine lego gibi bağlamanızı sağlayan açık kaynaklı bir iş akışı otomasyon aracı.

Kurulum mantığı oldukça sade:

  1. Bir Webhook ya da Cron node’u akışı tetikler.
  2. OpenAI Node’u ham veriyi alır, yapılandırılmış analizi çıkarır.
  3. Araya koyacağınız minik bir Code Node’u (JavaScript) veriyi kontrol eder; hata varsa modeller arasında fallback mekanizması çalıştırır.
  4. Anthropic Node’u temiz veriyi alıp nihai metni üretir.
  5. Sonuç Slack, E-posta ya da Notion’a otomatik postalanır.

[Görsel: n8n Node ayarlarında Prompt alanına bir önceki GPT adımından gelen JSON parametrelerinin eklendiği arayüz görünümü]

Zincirleme Yapmanın Artıları ve Eksileri

Her teknolojik yaklaşım gibi bu sistem de sihirli bir değnek değil. Masaya getirdiği avantajlar kadar, beraberinde getirdiği yükler de var.

Avantajlar Dezavantajlar / Zorluklar
Her modelin en güçlü yönünden faydalanırsınız. İki farklı API çağrısı nedeniyle gecikme (latency) süresi artar.
Tek bir sağlayıcının çökmesine karşı B planı (fallback) kurabilirsiniz. Hata ayıklama (debugging) zorlaşır; zincirin nerede koptuğunu bulmak gerekir.
Daha tutarlı ve formatına sadık çıktılar üretir. İki farklı API için token maliyeti doğar.

Maliyetler ve Ücretsiz Alternatifler

İki model birden kullanınca “Cüzdanı OpenAI ve Anthropic’e mi bırakacağız?” diye sorabilirsiniz. İşin matematiği düşündüğünüz kadar korkutucu değil:

  • API Maliyeti: GPT-4o mini ve Claude 3.5 Haiku gibi daha ufak modelleri zincirlediğinizde, 1.000 adet raporun maliyeti 1 doları bile bulmuyor. Ön analizi ucuz modelle yapıp, vitrin metnini pahalı modele emanet etmek ciddi tasarruf sağlıyor.
  • Araç Maliyeti (n8n): n8n Cloud versiyonu aylık yaklaşık 20€’dan başlıyor. Ancak güzelliği şurada: n8n fair-code lisanslıdır. Kendi sunucunuza (örneğin 5 dolarlık bir Hetzner/DigitalOcean VPS) Docker ile kurarsanız, arayüz için sıfır lira ödersiniz.
  • Alternatif Araçlar: Benzer chaining işlemlerini kod yazmadan yapmak için tamamen açık kaynaklı ve ücretsiz olan Flowise veya Dify araçlarını da tercih edebilirsiniz. Eğer no-code dünyasının kolaylığına alışıksanız Make.com da iyi bir opsiyondur fakat operasyon sayısı arttıkça maliyeti katlanır.

Sonuç: Tek Bir Modele Mahkûm Değilsiniz

Yapay zekayı bir çalışan gibi düşünün. Muhasebe müdürünüze pazarlama metni yazdırmadığınız gibi, yaratıcı metin yazarınıza da karmaşık finansal verileri ayıklatmazsınız. LLM’ler için de mantık aynı.

Model-agnostic düşünmek, yarın GPT-5 çıktığında veya yerel açık kaynak bir model Claude’u tahtından indirdiğinde sisteminizi 5 dakika içinde güncelleyebilme lüksü tanır. İşinizi tek bir yapay zekaya emanet etmek yerine, modelleri bir orkestra gibi yöneten iş akışları kurmaya bugünden başlayın.

Category: Genel | LEAVE A COMMENT
Ekim 27 2026

Trenle ‘Workation’: Avrupa’da Güçlü Wi-Fi ve Ergonomik Çalışma Alanı Sunan İstasyonlar

Dizüstü bilgisayarınızın şarj adaptörünü çantanızdan çıkarıp bir kafede priz arama telaşı, her dijital göçebe için fazlasıyla tanıdıktır. Ancak son dönemde uzaktan çalışma rutinini havalimanlarının ruhsuz bekleme salonlarından kurtaran çok daha dinamik bir alternatif var: raylar. Avrupa tren ağları artık yalnızca şehirler arası seyahat etmeyi değil, hareket halindeyken üretmeyi hedefleyen bir workation deneyimini mümkün kılıyor. Yine de asıl mesele trenin kendisinden ziyade, aktarma yaparken birkaç saatinizi verimli geçirebileceğiniz, güçlü interneti ve sakin köşeleri olan doğru istasyonları bilmekte yatıyor.

Hollanda’nın Ulaşım Laboratuvarı: Utrecht Centraal

Avrupa’da tren kültürünün zirve noktalarından biri şüphesiz Hollanda. Utrecht Centraal ise sadece devasa bir aktarma noktası değil, adeta üretkenlik için tasarlanmış bir yaşam alanı. Amsterdam’ın kalabalığından ve pahalılığından kaçıp trenle sadece 25 dakikada buraya vardığınızda, istasyonun doğrudan içine entegre edilmiş Hoog Catharijne kompleksini göreceksiniz. Burada fahiş fiyatlı zincir kafelere mahkûm değilseniz; istasyon içerisindeki modern oturma adaları ve çevredeki ortak çalışma noktaları hızlı internet arayanlar için biçilmiş kaftan.

İstasyonun üst katlarında yer alan sessiz köşeler, 150 Mbps civarında seyreden ücretsiz kamu ağıyla harikalar yaratıyor. Hollanda demiryolları (NS) biletinizi alırken yoğun saatler dışını, yani daluren dönemini tercih ederseniz tren biletini yaklaşık yüzde 40 daha ucuza getirebilirsiniz. Sabah 09.00 sonrasına denk gelen bu saat dilimi, hem cüzdanınızı koruyor hem de istasyonun o telaşlı sabah kalabalığından arınmış, sakin atmosferinde çalışmanıza zemin hazırlıyor.

Utrecht’te uzun bir aktarmanız varsa büyük valiz dolaplarına 8 ila 12 Euro vermek yerine, istasyonun batı çıkışındaki emanet noktalarını kontrol edin. Bazen çevre kafeler, küçük bir kahve siparişi karşılığında çantanızı güvenle vestiyere alabiliyor.

Viyana Hauptbahnhof: Şıklıktan Ödün Vermeyen Verimlilik

Avusturya’nın başkenti, Doğu ve Batı Avrupa’yı birbirine bağlayan Railjet seferlerinin kalbi konumunda. Viyana Hauptbahnhof, mimari açıdan ferahlığının yanında dijital göçebelerin ihtiyaç duyduğu elektrik prizi bolluğunu en cömertçe sunan istasyonlardan biri. Geniş cam tavanların altındaki bekleme bölümlerinde ergonomik masalar ve her koltuğun altına gizlenmiş prizler yer alıyor. Üstelik istasyonun genel kablosuz ağı, şifre veya karmaşık SMS doğrulamalarıyla sizi uğraştırmadan doğrudan bağlanmanızı sağlıyor.

Bütçe bilincine sahip bir gezgin olarak burada yapabileceğiniz en akıllıca hamle, ÖBB uygulamasını takip etmek. Standart bir ikinci sınıf biletiniz olsa bile, seyahat günü bazen 9 ila 15 Euro gibi cüzi bir farkla birinci sınıf yükseltmesi yakalayabiliyorsunuz. Bu yükseltme size sadece trende geniş koltuk sağlamıyor; istasyondaki ÖBB Lounge alanına giriş hakkı da veriyor. Sessiz bir ofis ortamı, sınırsız espresso ve kesintisiz internet için bu küçük harcama, dışarıda bir kafede harcayacağınız paradan çok daha karlı bir yatırıma dönüşüyor.

Gotik Görkem ve Sessiz Köşeler: Antwerpen-Centraal

Belçika’nın bu demiryolu katedrali genellikle fotoğraf çekip hızla geçilen bir yer olarak bilinir. Oysa Antwerpen-Centraal’in çok katlı yapısı, dikkatli bir göz için mükemmel çalışma sığınakları barındırıyor. Üst peronların tarihi kubbesi altında çalışmak biraz soğuk ve gürültülü olabilir; ancak zemin kata inip yan kanatlara doğru ilerlediğinizde, yerel yolcuların bile pek uğramadığı sakin bekleme alanları keşfedeceksiniz.

Brüksel ile Amsterdam arasındaki bu stratejik durakta internet hızı oldukça tatmin edici düzeyde. İstasyonun hemen çıkışındaki Astrid Meydanı’nda yer alan yerel kahveciler yerine, istasyon içindeki yüksek tavanlı asma katları tercih edin. Burada dizüstü bilgisayarınızla geçireceğiniz iki saat boyunca kimse sizden sürekli bir şeyler sipariş etmenizi beklemez. Brüksel Havalimanı’ndan buraya trenle ulaşmak yaklaşık 30 dakika sürüyor ve standart bilet fiyatları 12-14 Euro bandında seyrediyor.

Belçika içi seyahatlerde hafta sonu tarifesini (Weekend Ticket) mutlaka değerlendirin. Cuma akşamı 19.00’dan sonra başlayan bu kampanya, gidiş-dönüş biletlerinde otomatik olarak yüzde 50 indirim sağlıyor.

Ray Üzerinde Üretken Kalmanın İncelikleri

Avrupa’da trenle çalışırken başarı, küçük detayları önceden planlamakta gizli. Sınır geçişlerinde hücresel verinizin kopma ihtimaline karşı çevrimdışı çalışabileceğiniz dökümanları önceden hazır tutmak altın kuraldır. Ayrıca rezervasyon yaparken mutlaka vagon haritasını açıp masa düzenine sahip ikili veya dörtlü koltukları seçmelisiniz; zira sırt sırta dizilmiş standart koltuklarda fare kullanmak bile ciddi bir ergonomi savaşına dönüşebilir.

İstasyonlar sadece varış ve kalkış noktaları değil; doğru kullanıldığında ücretsiz, ilham verici ve canlı birer ortak çalışma ofisidir. Bir sonraki rotanızı çizerken aktarma sürelerini kısa tutmak yerine üçer saatlik çalışma blokları olarak planlayın. Hem yolculuğun tadını çıkaracak hem de işlerinizi bir kafeye kapanıp kalmadan, Avrupa’nın tarihi garlarının ritmi eşliğinde tamamlamanın hafifliğini yaşayacaksınız.

Category: Genel | LEAVE A COMMENT
Ekim 27 2026

Tek Tavada Haftalık Protein Deposu: Minimalist Meal Prep

Pazar akşamı mutfak tezgahında biriken dağ gibi bulaşıklar, çoğumuzun sağlıklı beslenme hevesini kursağında bırakır. Oysa hafta içi ofisteki yoğun tempoda enerjinizi yüksek tutacak bol protein içeren tabaklara ulaşmak için saatlerce ocak başında nöbet tutmanıza gerek yok. Akıllıca kurgulanmış bir meal prep rutiniyle, sadece tek bir fırın tepsisi kullanarak lezzetten ödün vermeyen pratik yemek çözümleri üretebilirsiniz. Üstelik minimum efor ve sıfıra yakın bulaşıkla.

Porsiyon: 4 Öğün
Hazırlık Süresi: 15 dakika
Pişirme Süresi: 35 dakika

Neden Tek Tepsi (Sheet Pan) Yöntemi?

Modern şehir hayatında vaktimiz dar, dikkatimiz dağınık. Tek tepsi yönteminin güzelliği, fırının homojen ısısını kullanarak farklı pişme sürelerine sahip malzemeleri aynı anda lezzetlendirmesidir. Tavuğun bıraktığı aromalı su alttaki sebzeleri yumuşatırken, fırının kuru sıcağı dış yüzeylerde karamelizasyon yaratır. Yani az emekle maksimum derinlik elde edersiniz.

Malzeme Listesi

  • Protein kaynağı: 700 gr tavuk göğsü veya kemiksiz but (Kuşbaşı doğranmış)
  • Kompleks karbonhidrat: 1 büyük boy tatlı patates (Küp doğranmış)
  • Lif ve renk: 1 orta boy brokoli (Çiçeklerine ayrılmış)
  • Antioksidan desteği: 1 adet kırmızı kapya biber (İri dilimlenmiş)
  • Bakliyat desteği: 1 su bardağı haşlanmış nohut (Ekstra çıtırlık için)
  • Sos için: 3 yemek kaşığı zeytinyağı, 1 tatlı kaşığı toz kırmızı biber, 1 çay kaşığı kimyon, 1 çay kaşığı sarımsak tozu, tuz ve karabiber.

Alternatif Malzeme Önerileri

Elinizde bu malzemeler yoksa mutfağı terk etmeyin; uyarlama yapın:

  • Tavuk yerine: Hindi göğsü veya marine edilmiş sert tofu (vejetaryenler için harika bir alternatif).
  • Tatlı patates yerine: Bal kabağı veya taze patates.
  • Brokoli yerine: Karnabahar veya Brüksel lahanası.

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

  1. Fırını önceden 200°C’ye fansız modda ısıtın ve geniş bir fırın tepsisine pişirme kağıdı serin.
  2. Geniş bir kapta zeytinyağı ve baharatları çırparak homojen bir sos tabanı hazırlayın.
  3. Doğradığınız tavukları, tatlı patatesleri, brokoliyi, biberleri ve haşlanmış nohutları bu kaba alın; tüm malzemeler sosa bulanana kadar ellerinizle harmanlayın.
  4. Harcı fırın tepsisine yayın. Malzemelerin üst üste yığılmamasına, tepsiye eşit dağılmasına özen gösterin.
  5. Tepsiyi orta rafa sürün ve tavuklar altın sarısı renk alıp patatesler çatalla kolayca ezilene kadar yaklaşık 30-35 dakika pişirin.
  6. Fırından çıkardıktan sonra 10 dakika oda sıcaklığında dinlendirin, ardından 4 eşit cam saklama kabına paylaştırın.

Püf Noktası

Sebzelerin fırında haşlanmış gibi yumuşak değil, hafif çıtır ve köz lezzetinde olmasını istiyorsanız tek kural var: Tepsiyi aşırı doldurmayın. Malzemeler üst üste binerse kendi buharlarında pişer ve sulanır. Ayrıca tavukları soslamadan önce mutlaka kağıt havluyla kurulayın; etin yüzeyi ne kadar kuru olursa baharatlar o kadar iyi tutunur ve dışı o kadar güzel kızarır.

Kapaklı cam kaplarda buzdolabında 4 güne kadar tazeliğini koruyan bu tepsiyi ister ısıtıp doğrudan tüketin, ister öğle arasında üzerine biraz yoğurt ya da tahin ekleyerek zenginleştirin. Sağlıklı beslenmek karmaşık olmak zorunda değil; bazen sadece iyi bir tepsi ve doğru ısı yeterlidir.

Category: Genel | LEAVE A COMMENT
Ekim 26 2026

Ghost Infrastructure: Cloud Maliyetlerinizi Gizlice Artıran Kullanılmayan Resource’ları Tespit Etme

Modern bir devops mühendisinin kabusları genellikle gece yarısı gelen PagerDuty alarmlarıyla sınırlı değildir. Asıl soğuk terler, ay sonunda FinOps ekibinin Slack’ten attığı “Bu ayki cloud faturası neden %40 arttı?” mesajıyla başlar. Şirketler büyüdükçe, microservice mimarileri genişledikçe ve CI/CD pipeline’ları günde yüzlerce kez ephemeral ortamlar ayağa kaldırıp indirdikçe, arkada sessizce biriken “ghost infrastructure” (hayalet altyapı) kaçınılmaz hale gelir. Cost optimization sadece instance type küçültmekten ibaret değildir; asıl mesele, varlığından bile haberdar olmadığınız ama her saniye faturalandırılan zombi kaynakları yönetebilmektir. Bu rehberde, proaktif resource management ve finops pratikleriyle bu sızıntıları nasıl tespit edip kökünden temizleyeceğimizi inceliyoruz.

Zombi Altyapının Anatomisi: Bu Kaynaklar Nereden Çıkıyor?

Kıdemli bir mühendis olarak “Biz her şeyi Terraform ile yönetiyoruz, drift olmaz” yanılgısına düşmüş olabilirsiniz. Ne yazık ki gerçek dünya production ortamları ideal koşullarda çalışmaz. Zombi kaynakların arkasında genellikle üç ana faktör yatar:

1. Pipeline Race Condition ve Timeout’lar: CI runner’da koşan bir terraform destroy komutunun ağ kesintisi veya SIGKILL ile sonlanması, state dosyasının güncellenememesine ama cloud provider tarafında bazı resource’ların (örneğin provision edilmiş bir ALB veya NAT Gateway) yetim (orphaned) kalmasına yol açar.

2. Kubernetes CSI Driver Sızıntıları: K8s cluster’ında bir PersistentVolumeClaim silindiğinde, underlying cloud diskini (AWS EBS, GCP Persistent Disk) temizlemesi beklenen CSI driver zaman zaman API rate limit’e takılır veya reclaim policy’si yanlış yapılandırıldığı için diski available durumunda serbest bırakır. Pod ölür, PVC silinir ama disk sonsuza kadar faturaya yazmaya devam eder.

3. Manuel Acil Müdahaleler: Production incident sırasında debug amaçlı açılan read-replica’lar, detach edilen root volume’lar veya snapshot’lar post-mortem sonrasında ticket’lar kapandığında unutulur.

En Büyük Sessiz Katiller ve CLI ile Avlanma Taktikleri

Şimdi lafı uzatmadan, ay sonunda faturayı kabartan majör zombi kaynakları tespit etmek için terminale geçelim. AWS ekosistemini baz alacağız ancak mantık GCP ve Azure için de birebir aynıdır.

1. Unattached EBS Volume’lar

Bir EC2 instance termine edildiğinde, varsayılan olarak root volume silinir; fakat secondary volume’lar (özellikle DeleteOnTermination=false flag’i ile attach edilmiş olanlar) veya dinamik PVC diskleri arkada kalır. Üstelik bunlar io2 veya gp3 gibi yüksek IOPS provision edilmiş pahalı disklerse maliyet çarpanı devasa olur.

Aşağıdaki AWS CLI + JMESPath query’si ile sadece boşa çıkmış (available) diskleri, tipleri ve boyutlarıyla filtreleyebilirsiniz:

aws ec2 describe-volumes \
    --filters Name=status,Values=available \
    --query "Volumes[*].{ID:VolumeId,Size:Size,Type:VolumeType,AZ:AvailabilityZone,Created:CreateTime}" \
    --output table

Eğer 30 günden eski ve unattached olan diskleri doğrudan bulup silinebilir listesine atmak isterseniz, küçük bir bash one-liner işinizi görür:

aws ec2 describe-volumes \
    --filters Name=status,Values=available \
    --query "Volumes[?CreateTime<='$(date -v-30d -u +%Y-%m-%d)'].VolumeId" \
    --output text | tr '\t' '\n'

2. Unassociated Elastic IP (EIP) Sızıntıları

Cloud provider’ların en sevdiği para kazanma yöntemi: Bir IP’yi kullanırsanız ücretsizdir (veya çok ucuzdur), ama tahsis edip hiçbir instance veya Network Interface’e bağlamazsanız saatlik ceza faturası kesilir. IPv4 kıtlığı nedeniyle AWS, 1 Şubat 2024’ten itibaren tüm public IPv4 adreslerini (kullanılsın veya kullanılmasın) saatlik $0.005 ile ücretlendirmeye başladı. 100 adet boşta EIP, ayda yaklaşık $360 doğrudan çöp demektir.

aws ec2 describe-addresses \
    --query "Addresses[?AssociationId==null].{AllocationId:AllocationId,PublicIp:PublicIp}" \
    --output table

Çıkan listedeki adresleri serbest bırakmak için:

for alloc_id in $(aws ec2 describe-addresses --query "Addresses[?AssociationId==null].AllocationId" --output text); do
    echo "Releasing: $alloc_id"
    aws ec2 release-address --allocation-id "$alloc_id"
done

3. Hayalet Load Balancer’lar ve Trafiksiz NAT Gateway’ler

Bir ortamı decommission ederken compute katmanını (Auto Scaling Group, ECS Task, EKS Node) kapatıp, önündeki ALB’yi veya VPC içindeki NAT Gateway’i silmeyi unutmak çok yaygındır. NAT Gateway, üzerinden 1 byte bile geçmese bile sırf ayakta kaldığı için her ay yaklaşık $32 taban ücret çeker (bölgeye göre değişir). Çoklu AZ kurulumunda 3 NAT Gateway ayda ~$100 eder.

Son 7 gün içinde üzerinden sıfır request geçmiş ALB’leri CloudWatch metriği sorgulamadan doğrudan tespit edemezsiniz. AWS CLI ile CloudWatch metriklerini tarayarak RequestCount toplamı 0 olan load balancer’ları yakalamak en garanti yoldur:

START_TIME=$(date -u -v-7d +%Y-%m-%dT%H:%M:%SZ)
END_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)

for alb_arn in $(aws elbv2 describe-load-balancers --query "LoadBalancers[*].LoadBalancerArn" --output text); do
    alb_name=$(echo "$alb_arn" | awk -F'/' '{print $2"/"$3"/"$4}')
    sum=$(aws cloudwatch get-metric-data --metric-data-queries '[{
        "Id": "m1",
        "MetricStat": {
            "Metric": {
                "Namespace": "AWS/ApplicationELB",
                "MetricName": "RequestCount",
                "Dimensions": [{"Name": "LoadBalancer", "Value": "'"$alb_name"'"}]
            },
            "Period": 604800,
            "Stat": "Sum"
        }
    }]' --start-time "$START_TIME" --end-time "$END_TIME" --query "MetricDataResults[0].Values[0]" --output text)

    if [ "$sum" == "None" ] || [ -z "$sum" ] || [ "$sum" == "0.0" ]; then
        echo "Zombie ALB Tespit Edildi: $alb_arn (Son 7 günde 0 request)"
    fi
done

Modern Tespit Yöntemi: Steampipe ile SQL Tabanlı Cloud Auditing

Bütün AWS API’lerini bash scriptleriyle gezip JSON parse etmek bir noktadan sonra kırılgan hale gelir. Infrastructure as Code kültürüne SQL sorgulama yeteneğini entegre eden Steampipe, cloud auditing için endüstri standardı araçlardan biri haline geldi. Cloud kaynaklarını bir Postgres veritabanı gibi sorgulamanızı sağlar.

Örneğin, bağlı bir instance’ı olmayan tüm network interface’leri (ENI) bulmak için:

steampipe query "
select
  network_interface_id,
  status,
  interface_type,
  description
from
  aws_ec2_network_interface
where
  status = 'available';
"

Ya da tüm region’lardaki sahipsiz EBS snapshot’larını tek seferde listelemek için:

steampipe query "
select
  snapshot_id,
  volume_size,
  start_time,
  description
from
  aws_ebs_snapshot
where
  volume_id not in (select volume_id from aws_ebs_volume);
"

Zombileri Kalıcı Olarak Engellemek: Preventative FinOps

Manuel olarak veya haftalık cron job’lar ile CLI çalıştırmak geçici bir pansumandır. Asıl amaç, ghost altyapının oluşmasını mühendislik seviyesinde engellemektir.

1. TTL (Time-To-Live) Tabanlı Resource Tagging

Test ve staging ortamlarında ayağa kaldırılan her şey zorunlu bir TTL veya ExpiresAt tag’ine sahip olmalıdır. Bir Open Policy Agent (OPA) kuralı veya AWS SCP (Service Control Policy) ile tag’i olmayan kaynakların provision edilmesini CI seviyesinde engelleyin.

# Örnek: Cloud Custodian policy snippet (custodian.yml)
policies:
  - name: terminate-expired-ephemeral-ec2
    resource: ec2
    filters:
      - "tag:Environment": "development"
      - type: marked-for-op
        op: terminate
    actions:
      - terminate

2. Terraform lifecycle Bloklarını Doğru Kullanmak

Instance oluştururken persistent diskler bağlıyorsanız, instance silindiğinde diskin yetim kalmaması için Terraform konfigürasyonunuzda block device mapping ayarlarını açıkça belirtin:

resource "aws_instance" "app_server" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "c6i.xlarge"

  ebs_block_device {
    device_name           = "/dev/xvdf"
    volume_size           = 100
    volume_type           = "gp3"
    delete_on_termination = true # Asla unattached kalmaz
  }
}

Özet ve Aksiyon Planı

Bulut sağlayıcıları altyapınızı kurmanızı inanılmaz kolaylaştırır; ancak temizlemeyi zorlaştırmak onların iş modelinin doğal bir sonucudur. Boşta duran diskler, rotasız IP’ler ve trafiği kesilmiş load balancer’lar şirketinizin sermayesini günden güne eritir.

Yarın sabah yapacağınız ilk iş, ekibinizle 1 saatlik bir “Zombie Hunting” sprint’i düzenlemek olsun. Yukarıdaki scriptleri read-only modda çalıştırın, çıkan faturayı görün ve silme scriptlerini pipeline’larınıza gömün. FinOps sadece muhasebecilerin işi değildir; production’a saygı duyan her DevOps mühendisinin asli görevidir.

Category: Genel | LEAVE A COMMENT
Ekim 25 2026

LLM Pipeline’larında Veri Kirliliği ve RegEx Güvenliği: Yapay Zeka Çıktılarını Temizlerken Nerede Patlıyoruz?

Yazılım dünyasında neredeyse elli yıldır değişmeyen gayriresmi bir kural vardır: Çözemediğin bir metin ayrıştırma problemi mi var? Yapıştır bir RegEx (düzenli ifade), arkana yaslan. Ancak modern NLP sistemleri ve hayatımızın merkezine oturan LLM (Büyük Dil Modelleri) dünyasında işler artık bu kadar basit değil. Yapay zeka tarafından üretilen veya işlenen metinleri geleneksel yöntemlerle temizlemeye kalktığınızda, işin ucu ciddi bir güvenlik zafiyetine ve çöken sunuculara varabiliyor.

Kendi pipeline’larımda yaşadığım birkaç “Neden bu sunucu saatlerdir %100 CPU kullanıyor?” krizinden sonra meseleyi masaya yatırmaya karar verdim. Gelin, LLM çıktılarının klasik yöntemleri nasıl bozguna uğrattığını testlerle inceleyelim.

Klasik Çekiç, Kuantum Çiviye Karşı: RegEx Nerede Çuvallıyor?

Geleneksel yazılımda veri öngörülebilirdir. Bir formdan gelen e-posta adresi bellidir: Birkaç harf, bir @ işareti, biraz daha harf ve bir nokta. Ancak bir LLM’e “Bana metindeki iletişim bilgilerini çıkar” dediğinizde, model size sadece e-posta vermez; bazen Markdown blokları, bazen açıklama cümleleri, bazen de görünmez Unicode karakterleri hediye eder.

İşte tam bu noktada geliştiriciler hemen şu refleksi gösterir: “Araya bir regex atar, temizlerim.” Fakat LLM çıktılarının doğası üç temel problem barındırır:

  • Sıfır Genişlikli (Zero-Width) Karakterler: LLM’ler internetten beslenir. Kopyalanan metinlerin içinde görünmeyen boşluklar (örneğin \u200B) veya sağdan sola yazım (RTL) işaretleri bulunabilir. Sizin “temiz” sandığınız regex bu karakterleri atlarsa, veri tabanınız sessizce kirlenir.
  • Halüsinasyon Kaynaklı Format Bozulmaları: Modele “Sadece saf JSON ver” deseniz bile, model bazen keyifli bir günündeyse cevabın başına ```json ekler, sonuna da Umarım bu yardımcı olmuştur! iliştirir.
  • Tipografik Tırnak Tuzağı: Model düz tırnak (") yerine akıllı tırnak (“ veya ”) ürettiğinde, basit bir JSON parser veya regex pattern’i anında iflas eder.

[Görsel: Bir LLM’in ürettiği metin içinde gizlenen sıfır genişlikli boşlukların ve bozuk tırnak işaretlerinin hex editöründeki görünümü]

Korkulu Rüya: ReDoS (Regular Expression Denial of Service)

İşin en tehlikeli boyutu güvenlik. Bir LLM pipeline’ında kullanıcı girdisi önce modele gidiyor, modelden çıkan yanıt da sizin yazdığınız bir regex filtresinden geçiyorsa, kapınızı ReDoS saldırılarına ardına kadar açmış olabilirsiniz.

ReDoS, kötü kurgulanmış bir regex ifadesinin, karmaşık veya beklenmedik uzunluktaki bir metinle karşılaştığında “catastrophic backtracking” (yıkıcı geri izleme) yaşamasıdır. Regex motoru eşleşmeyi bulabilmek için milyarlarca kombinasyon dener ve işlemciyi kilitler.

Küçük bir laboratuvar testi yapalım. Masum görünen şu deseni ele alalım:

import re
import time

# Masum görünen ama tehlikeli bir regex
pattern = re.compile(r"^(a+)+$")

# LLM'in beklenmedik şekilde ürettiği uzun ve hatalı bir string
dirty_llm_output = "a" * 30 + "!"

start = time.time()
pattern.match(dirty_llm_output)
print(f"İşlem süresi: {time.time() - start:.2f} saniye")

Sadece 30 karakterlik bu metin, bilgisayarınızda saniyeler süren bir donmaya sebep olur. Karakter sayısını 35’e çıkardığınızda işlem dakikalar alır, 40 yaptığınızda ise sunucunuz fişi çeker. LLM’in sentetik veri üretirken araya sıkıştırdığı saçma bir tekrar dizisi, tüm API servisinizi çökertebilir.

[Görsel: Terminal ekranında CPU kullanımının %100’e fırladığı ve ReDoS yüzünden kilitlenen bir Python regex process’i]

Peki Ne Yapacağız? Modern Temizleme Stratejileri

LLM çıktılarını temizlemek için artık regex cambazlığı yapmak yerine, problemi kaynağında çözen modern yaklaşımlara geçmek şart. Test ettiğim ve pipeline’larda güvenle çalışan üç ana yöntem:

1. Şema Tabanlı Zorlama (Grammar-Guided Generation)

Modelin kafasına göre çıktı üretmesine izin verip sonra arkasını süpürmek yerine, modeli üretirken kısıtlayın. Outlines veya llama.cpp’nin Grammar özellikleri, modelin token üretirken sadece geçerli bir JSON veya belirli bir regex formatına uymasını zorunlu kılar. Kural dışı tek bir karakter bile üretilemez.

2. Doğrulama Katmanları (Pydantic ve Instructor)

Python ekosistemindeyseniz Instructor kütüphanesi harikalar yaratıyor. OpenAI veya yerel modellerin fonksiyon çağırma (function calling) yeteneğini kullanarak çıktıyı doğrudan bir Pydantic modeline dönüştürüyor. Tip uyuşmazlığı varsa, regex ile uğraşmak yerine modeli otomatik olarak uarıp hatayı düzelttiriyor.

3. Güvenli Regex Motorları

Eğer regex kullanmaktan başka çareniz yoksa, Python’ın yerleşik re modülü yerine Google’ın geliştirdiği re2 kütüphanesini kullanın. re2, backtracking mekanizmasını sınırlandırarak doğrusal zamanda çalışır; yani ReDoS saldırılarına karşı bağışıktır.

Hangi Yaklaşım Ne Kadar Mantıklı?

Testlerimde öne çıkan araçların artılarını ve eksilerini şöyle özetleyebiliriz:

Yöntem / Araç Güvenlik Geliştirme Hızı Artıları Eksileri
Klasik RegEx Düşük Hızlı (Başlangıçta) Ek kütüphane gerektirmez, hafiftir ReDoS riski, görünmez karakterleri kaçırma
Google re2 Yüksek Hızlı ReDoS imkansızdır, güvenlidir Lookaround gibi bazı gelişmiş özellikleri desteklemez
Instructor + Pydantic Çok Yüksek Orta Tipe dayalı tam veri garantisi, otomatik düzeltme Modelin function calling desteğine bağımlı
Guardrails AI Çok Yüksek Yavaş (Öğrenme eğrisi var) Kurumsal doğrulama kuralları, hazır kalıplar Pipeline’a ek gecikme (latency) ekleyebilir

Fiyat ve Ücretsiz Alternatifler

Bu çözümleri projenize entegre ederken cebinizden büyük paralar çıkmak zorunda değil:

  • Tamamen Ücretsiz & Açık Kaynak: google-re2, Outlines ve Instructor kütüphaneleri 0 TL. Tamamen açık kaynak ve MIT lisanslıdır. Sadece tükettiğiniz LLM API maliyetiyle çalışırlar.
  • Guardrails AI: Açık kaynaklı temel kütüphanesi ücretsizdir. Ancak ekipler için sundukları bulut tabanlı hazır hub çözümleri, kullanım hacmine göre ücretlendirilen freemium bir modele sahiptir.
  • Yerel Çözüm (En Ucuzu): Ollama veya vLLM ile kendi sunucunuzda açık kaynaklı bir model (örneğin Llama 3 veya Mistral) koşturup üzerine Outlines eklerseniz, hiçbir API faturası ödemeden tamamen güvenli bir temizleme pipeline’ı kurabilirsiniz.

Son Söz: Çekici Yere Bırakma Zamanı

Yapay zeka modelleri deterministik (her zaman aynı sonucu veren) makineler değildir; doğaları gereği olasılıksaldır. Olasılıksal bir sistemin çıktısını, 1970’lerden kalma katı kurallarla çalışan geleneksel RegEx desenleriyle evcilleştirmeye çalışmak sunucunuza yapacağınız en büyük haksızlıktır.

Pipeline’ınızda regex kullanmaya devam edebilirsiniz; ancak bunu ilk savunma hattı değil, şema kontrollü filtrelerin arkasındaki son güvenlik ağı olarak konumlandırmak en mantıklı strateji olacaktır.

Category: Genel | LEAVE A COMMENT
Ekim 24 2026

Ephemeral Environment’larda ‘Token Budget’ Yönetimi: Otomasyon Giderlerini Kontrol Altına Alın

Modern devops pratiklerinde preview ya da ephemeral environment altyapılarını PR bazlı ayağa kaldırmak artık bir endüstri standardı. Ancak denkleme kod analiz eden, sentetik test verisi üreten veya migrasyon doğrulayan otonom AI ajanları dahil olduğunda, kontrolsüz automation süreçleri cloud costs grafiklerini saatler içinde darmadağın edebiliyor. Sonsuz döngüye giren bir agent’ın ephemeral pipeline içinde OpenAI veya Anthropic faturalarını tüketmesini izlemek istemiyorsanız, CI/CD hattınıza deterministik bir token budget mekanizması kurmak zorundasınız.

Bu makalede, geçici ortamlarda koşan AI iş yükleri için in-line bir “Token Gate” mimarisinin nasıl kurgulanacağını, PR yaşam döngüsüyle senkronize bütçe tahsisini ve acil durum devre kesicilerini (circuit breaker) ele alıyoruz.

FinOps Uyarıları Neden CI/CD Hızına Yetişemiyor?

Geleneksel FinOps araçları ve cloud provider fatura alarmları post-mortem çalışır. AWS Cost Anomaly Detection veya OpenAI Usage Webhook’ları genelde saatlik ya da günlük batch gecikmelerle tetiklenir. Oysa bir GitHub Actions runner’ı üzerinde koşan ve hatalı bir prompt yüzünden recursive döngüye giren bir test ajanı, 25 dakikalık bir test koşumunda yüz binlerce token tüketip 400 doları sessizce harcayabilir.

Sorun sadece faturanın kabarması değil; ephemeral environment’ın doğası gereği geçici olması. PR kapandığında pod’lar silinir, namespace yok edilir, geriye sadece LLM provider panelinde nedeni belirsiz devasa bir kullanım grafiği kalır. Bu yüzden bütçe denetimini harici bir fatura kontrolü olarak değil, deployment pipeline’ının doğrudan içine gömülü bir gatekeeper olarak konumlandırmalıyız.

Mimari: Proxy Tabanlı Token Gate

Agent’ların doğrudan public LLM API’lerine gitmesi en büyük governance hatasıdır. Ajan ile LLM arasına hafif siklet, statelesse yakın bir proxy katmanı yerleştiriyoruz. Bu mimaride açık kaynaklı LiteLLM Proxy veya Envoy tabanlı bir custom egress filter kullanabiliriz. Biz prodüksiyonda kendini kanıtlamış olan Redis destekli LiteLLM Proxy modelini baz alacağız.

Model şu şekilde işler:

  1. CI pipeline başladığında ephemeral environment ID’si (örn. pr-842) için proxy üzerinde tek kullanımlık bir Virtual Key üretilir.
  2. Bu key’e strictly izole edilmiş bir harcama limiti (max spend) ve TTL atanır.
  3. Ephemeral environment içerisindeki tüm agent’lar ve otomasyon araçları LLM endpoint’i olarak bu proxy’yi görür.
  4. Bütçe tükendiği anda proxy doğrudan 429 BudgetExceeded döner; pipeline runner’ı kilitlemeden, kontrollü bir exit code ile fail eder.
  5. PR merge veya close olduğunda key ve ilişkili Redis state’i tamamen süpürülür.

Adım 1: LiteLLM Proxy ve Redis Konfigürasyonu

Öncelikle proxy katmanını Kubernetes üzerinde veya CI cluster’ınızın ortak tooling namespace’inde ayağa kaldırıyoruz. Aşağıdaki konfigürasyon, harcama verilerini Redis üzerinde tutarak stateless proxy instance’ları arasında tam senkronizasyon sağlar.

# config.yaml
model_list:
  - model_name: claude-3-5-sonnet
    litellm_params:
      model: anthropic/claude-3-5-sonnet-20241022
      api_key: os.environ/ANTHROPIC_API_KEY
  - model_name: gpt-4o-mini
    litellm_params:
      model: openai/gpt-4o-mini
      api_key: os.environ/OPENAI_API_KEY

general_settings:
  master_key: sk-master-infra-gatekeeper-key
  database_url: "redis://redis-sentinel.infra.svc.cluster.local:6379"

router_settings:
  routing_strategy: "least-busy"
  timeout: 30

Proxy’yi Docker üzerinde ayağa kaldırmak için:

docker run -d \
  -p 4000:4000 \
  -v $(pwd)/config.yaml:/app/config.yaml \
  -e ANTHROPIC_API_KEY="sk-ant-live-xxxx" \
  -e OPENAI_API_KEY="sk-proj-live-xxxx" \
  ghcr.io/berriai/litellm:main-v1.49.0 \
  --config /app/config.yaml --port 4000

Adım 2: CI Pipeline İle Dinamik Token Gate Entegrasyonu

Şimdi GitHub Actions veya GitLab CI pipeline’ımızda her preview environment için dinamik bir anahtar üreteceğiz. Her PR için varsayılan olarak 2.50 USD tavan bütçe tanımlıyoruz. Testler bu bütçeyi aşarsa, faturaya sürpriz yansımadan pipeline derhal kesilecek.

# .github/workflows/ephemeral-env.yml (Özet Adım)
- name: Provision Ephemeral LLM Token Gate Key
  id: token_gate
  env:
    PROXY_MASTER_KEY: ${{ secrets.LLM_PROXY_MASTER_KEY }}
    PROXY_HOST: "https://llm-gateway.internal.kertenkerem.net"
  run: |
    PR_ID="pr-${{ github.event.pull_request.number }}"
    
    # 2.50$ bütçe ve 2 saatlik TTL ile dinamik key oluştur
    RESPONSE=$(curl -s -X POST "$PROXY_HOST/key/generate" \
      -H "Authorization: Bearer $PROXY_MASTER_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "duration": "2h",
        "max_budget": 2.50,
        "metadata": {
          "environment": "'"$PR_ID"'",
          "actor": "${{ github.actor }}",
          "repo": "${{ github.repository }}"
        }
      }')

    EPHEMERAL_KEY=$(echo $RESPONSE | jq -r '.key')
    
    if [ "$EPHEMERAL_KEY" == "null" ] || [ -z "$EPHEMERAL_KEY" ]; then
      echo "::error::Token Gate anahtarı oluşturulamadı!"
      exit 1
    fi

    # Maskele ve env'ye aktar
    echo "::add-mask::$EPHEMERAL_KEY"
    echo "EPHEMERAL_LLM_KEY=$EPHEMERAL_KEY" >> $GITHUB_ENV
    echo "LLM_BASE_URL=$PROXY_HOST" >> $GITHUB_ENV

Bu adımdan sonra ayağa kalkan ephemeral deployment pod’larına ve otomasyon agent’larına sadece bu iki parametre enjekte edilir:

  • OPENAI_BASE_URL: https://llm-gateway.internal.kertenkerem.net
  • OPENAI_API_KEY: ${{ env.EPHEMERAL_LLM_KEY }}

Adım 3: Degraded Mode ve Circuit Breaker Mantığı

Token bütçesi tamamen tükendiğinde pipeline’ın anında kırılması her zaman arzu edilen bir durum değildir. Özellikle kritik entegrasyon testlerinde, ana agent maliyetli bir modelden (örn. Claude 3.5 Sonnet) daha ucuz bir modele (örn. GPT-4o-mini) “fallback” yapabilmelidir.

Proxy seviyesinde bütçe tükenmeden hemen önce devreye giren bir model alias stratejisi kullanabilirsiniz. Ancak agent kodunuz bu hatayı ele alacak esneklikte değilse, test framework’ünüzün curl/HTTP wrapper’ına basit bir circuit breaker mantığı eklemek en güvenli yoldur:

#!/usr/bin/env bash
# run-agent-eval.sh
set -eo pipefail

echo "Starting evaluation agent in ephemeral namespace..."

# Agent'ı çalıştır ve HTTP status kodlarını kontrol et
if ! python3 -m agents.evaluator --target-env http://frontend.pr-${PR_ID}.svc.local; then
  EXIT_CODE=$?
  
  # Proxy'nin budget aşım loglarını sorgula
  CURRENT_SPEND=$(curl -s -X GET "$LLM_BASE_URL/key/info?key=$EPHEMERAL_LLM_KEY" \
    -H "Authorization: Bearer $PROXY_MASTER_KEY" | jq -r '.info.spend')
    
  MAX_BUDGET=$(curl -s -X GET "$LLM_BASE_URL/key/info?key=$EPHEMERAL_LLM_KEY" \
    -H "Authorization: Bearer $PROXY_MASTER_KEY" | jq -r '.info.max_budget')

  echo "Execution failed with code $EXIT_CODE."
  echo "Current Token Spend: \$$CURRENT_SPEND / Max: \$$MAX_BUDGET"

  if (( $(echo "$CURRENT_SPEND >= $MAX_BUDGET" | bc -l) )); then
    echo "CRITICAL: Agent bütçe limitine çarptı. Olası recursive prompt döngüsü tespit edildi."
    echo "PR yazarına bildirim gönderiliyor..."
    exit 42 # FinOps gate violation exit code
  fi

  exit $EXIT_CODE
fi

Adım 4: Ephemeral Environment Teardown ve Muhasebe

Preview ortamları yok edilirken açılan virtual key’lerin revoke edilmesi ve tüketim verisinin kalıcı metrik sunucusuna yazılması gerekir. Çoğu mühendis bu kısmı atlar; oysa harcamanın hangi PR’da, hangi geliştirici tarafından ve hangi prompt şablonuyla yapıldığını bilmek FinOps optimizasyonunun temelidir.

# PR Close workflow adımında çalıştırılır:
- name: Teardown Token Budget & Export Metrics
  if: always()
  run: |
    # Key kullanım detaylarını topla
    USAGE_DATA=$(curl -s -X GET "$LLM_BASE_URL/key/info?key=$EPHEMERAL_LLM_KEY" \
      -H "Authorization: Bearer $PROXY_MASTER_KEY")
      
    TOTAL_TOKENS=$(echo $USAGE_DATA | jq -r '.info.total_tokens // 0')
    TOTAL_SPEND=$(echo $USAGE_DATA | jq -r '.info.spend // 0')
    
    echo "PR-$PR_ID LLM Kullanım Özeti: $TOTAL_TOKENS token (\$$TOTAL_SPEND)"

    # Prometheus Pushgateway'e metrikleri ilet
    cat <<EOF | curl --data-binary @- http://pushgateway.infra.svc:9091/metrics/job/ephemeral_ci/instance/pr-${{ github.event.pull_request.number }}
    ephemeral_llm_tokens_total{repo="${{ github.repository }}",actor="${{ github.actor }}"} $TOTAL_TOKENS
    ephemeral_llm_cost_usd{repo="${{ github.repository }}",actor="${{ github.actor }}"} $TOTAL_SPEND
    EOF

    # Virtual key'i kalıcı olarak iptal et
    curl -s -X POST "$LLM_BASE_URL/key/delete" \
      -H "Authorization: Bearer $PROXY_MASTER_KEY" \
      -H "Content-Type: application/json" \
      -d '{"keys": ["'"$EPHEMERAL_LLM_KEY"'"]}'

Neden Bu Mimari?

Bu yaklaşım size üç temel avantaj sağlar:

  1. Blast Radius Kısıtlaması: Geliştiricinin yazdığı deneysel bir agent kodu infinite loop’a girse bile, maksimum zararı 2.50 USD ile sınırlıdır. Production key’lerini riske atmazsınız.
  2. Zero-Trust Credential Isolation: Ephemeral pod’lara hiçbir zaman master API anahtarları enjekte edilmez. Pipeline bittiğinde anahtar anında çöpe gider.
  3. Granüler Görünürlük: Fatura ay sonunda geldiğinde, hangi feature branch’in ne kadar LLM maliyeti yarattığını Prometheus üzerinden nokta atışı görebilirsiniz.

AI destekli CI/CD akışları bir lüks değil, hız kazandıran bir zorunluluk haline geliyor. Ancak kontrolsüz otomasyon hız kazandırmaz; sadece AWS ve OpenAI faturalarınızı katlar. Ephemeral mimarilerinize token budget kapılarını hemen bugün ekleyin.

Category: Genel | LEAVE A COMMENT
Ekim 24 2026

Teknoloji Minimalizmi: 18 Litrelik Bir Sırt Çantasıyla Dünyayı Gezmek ve Çalışmak

Havalimanında bagaj bandının başında yarım saat beklemek yerine, pasaport kontrolünden geçip doğrudan şehre karışmanın verdiği o tarifsiz hafiflik hissini bir kez tadınca geri dönmek imkansızlaşıyor. Bir dijital göçebe olarak yola çıkarken en büyük korkumuz genelde bağlantımızın kopması ya da donanımsız kalmaktır; bu yüzden de çoğu zaman gereksiz adaptörler, kalın kablolar ve “ne olur ne olmaz” yedekleriyle çantayı doldururuz. Oysa minimalist seyahat, hiçbir şeyden mahrum kalmak demek değil; sadece hareket alanını genişletmek ve sırtındaki yükü hafifletmektir. Doğru bir sırt çantası ve akılcı bir teknoloji kurulumu ile hem işlerinizi aksatmadan sürdürebilir hem de tek bir kabin boy çantayla aylarca dünyayı turlayabilirsiniz. Bu yazıda, bizzat deneyimlediğim pratik seyahat ipuçları eşliğinde, 15-20 litrelik bir hacimle yüksek verimlilikte yaşamanın matematiğini anlatıyorum.

Bagaj Sırasına Veda: Neden 18-20 Litre?

Hemen her düşük bütçeli hava yolu şirketi artık kabin boy valizlere bile ek ücret talep ediyor. Avrupa içinde Ryanair ya da Wizz Air ile uçarken sadece koltuk altına sığan küçük bir sırt çantasına izin verildiğini, standart kabin valizi içinse bilet fiyatı kadar, yani uçuş başına yaklaşık 25 ile 45 Euro arasında ek ücret istendiğini görürsünüz. Asya’da AirAsia ya da VietJet gibi şirketlerde de 7 kilogram kuralı oldukça sıkı denetleniyor. İşte tam bu noktada 18 litrelik bir çanta, sizi hem gereksiz masraflardan kurtarıyor hem de indiğiniz anda metroya ya da otobüse koşabilmenizi sağlıyor.

Ağırlığı 5-6 kilogram bandında tuttuğunuzda, hostele veya kiraladığınız odaya gitmeden önce çantayla bütün gün şehirde yürüyebilirsiniz. Sırtınız ağrımaz, metro turnikesine takılmazsınız ve en önemlisi “eşyalarım güvende mi?” stresinden kurtulursunuz. Çantanız her zaman yanınızda, gözünüzün önünde ve otobüsün üzerindeki bagaj rafında değil, kucağınızdadır.

18 litrelik bir çantayı havayolu kurallarına uygun tutmanın altın kuralı, çantanın dış ceplerini aşırı doldurmamaktır. Çantayı alırken sert kalıplı modeller yerine sıkıştırma perlonları olan hafif kumaşlı teknik çantaları (örneğin Decathlon’un 20L NH Escape serisi veya Osprey Daylite Plus) tercih edin; bu modeller 40-70 Euro bandında bulunabilir ve boş ağırlıkları 800 gramı geçmez.

Tek Şarj Aleti, Tek Kablo: Donanım Konsolidasyonu

Minimalist teknolojinin temel felsefesi “hepsi bir arada” cihazlara yatırım yapmaktır. Çantanızda laptop adaptörü, telefon şarjı, kulaklık kablosu ve powerbank için ayrı ayrı adaptörler taşımak hem hacim hem ağırlık israfıdır. Bunun çözümü, yeni nesil GaN (Galyum Nitrür) teknolojili şarj cihazlarıdır. Yaklaşık 35-50 Dolar aralığında bulabileceğiniz, kibrit kutusundan hallice 65W veya 100W gücündeki tek bir GaN adaptör, Type-C üzerinden hem bilgisayarınızı hem de telefonunuzu aynı anda şarj edebilir.

Bilgisayar tercihi de bu denklemde kilit bir rol oynuyor. Şarjı 15-18 saat dayanabilen bir MacBook Air ya da benzeri hafif bir ultrabook (yaklaşık 1.2 kg), kafelerde priz arama stresini tamamen ortadan kaldırır. Çantanıza ekleyeceğiniz iki adet kaliteli, örgülü Type-C kablo ve küçük bir Type-C to Lightning ya da micro-USB dönüştürücü başlık ile tüm donanım ekosisteminizi yaklaşık 250 gramda toparlayabilirsiniz. Powerbank tarafında ise 10.000 mAh kapasiteli, yine Type-C çıkışlı ince bir model (yaklaşık 180 gram, 20-30 Dolar) uzun otobüs yolculuklarında fazlasıyla yeterli olacaktır.

Kafeler ve İnternet: Verimli Çalışma Alanı Yaratmak

Seyahatte çalışırken yapılan en büyük hata, ilk görülen zincir kahveciye oturup vasat bir internete mahkum olmaktır. Turistik bölgelerdeki popüler kafelerin Wi-Fi ağları genelde aşırı yüklüdür ve arka plan gürültüsü toplantı yapmayı imkansız hale getirir. Bunun yerine yerel kütüphaneleri, üniversite çevrelerindeki küçük üçüncü nesil kahvecileri ya da saatlik ücretle çalışan yerel ortak çalışma alanlarını (coworking space) tercih etmek bütçenizi korur.

Gittiğiniz ülkede havalimanı çıkışındaki pahalı turist SIM kartlarına 30-40 Euro vermek yerine, şehre indikten sonra yerel operatör bayilerinden (örneğin Güneydoğu Asya’da Viettel veya AIS, Balkanlar’da A1) pasaportunuzla faturasız hat almak maliyeti 8-12 Dolar seviyesine düşürür. Eğer telefonunuz destekliyorsa Airalo gibi platformlardan 5-10 Dolara bölgesel e-SIM paketleri tanımlamak, indiğiniz anda bağlantıda kalmanızı sağlar ve zamandan tasarruf ettirir. Toplantı yapacaksanız aktif gürültü engelleyici (ANC) özellikli hafif bir kulak içi kulaklık, gürültülü bir tren istasyonunu bile sessiz bir ofise dönüştürebilir.

Yurt dışındaki kafelerde çalışırken internet hızını test etmek için garsona şifreyi sormadan önce Speedtest uygulamasını telefonunuzun mobil verisiyle değil, kafanın dışarıdan çeken açık Wi-Fi sinyaliyle kontrol edin. Eğer indirme hızı 20 Mbps, yükleme hızı ise en az 5 Mbps değilse kahve siparişi vermeden bir sonraki mekana geçin.

Çamaşırhane Gerçeği: Kıyafetleri Yarıya İndirmek

Küçük bir çantayla seyahat etmenin sırrı az kıyafetle yola çıkmak değil, sık yıkamaktır. Çantaya iki haftalık kıyafet tıkıştırmak yerine üç günlük bir döngü kurmak hayat kurtarır. Üzerinizdekiler hariç çantanıza alacağınız iki adet merinos yünü ya da teknik sentetik tişört, bir yedek hafif şort veya pantolon ve üç çift çorap-iç çamaşırı tüm seyahati çıkarmanıza yeter.

Avrupa’da sokak arası self-servis çamaşırhanelerde bir makine çamaşırı yıkamak ve kurutmak ortalama 5-7 Euro tutar ve sadece 45 dakikanızı alır. Balkanlar’da ya da Asya’da ise çamaşırınızı kilosu 1-2 Dolara sabah bırakıp akşam mis gibi katlanmış olarak geri alabilirsiniz. Bu rutin, haftalık yaklaşık 5-10 Dolarlık bir maliyet demektir; ancak size 20 litrelik bir sırt çantasıyla kuş gibi hafif seyahat etme özgürlüğü kazandırır.

Gereksiz yükleri arkada bıraktığınızda, seyahatin sadece yeni yerler görmek değil, zihinsel bir ferahlama olduğunu çok daha net anlıyorsunuz. Az eşya, az sorumluluk ve daha fazla keşif anlamına gelir. İhtiyacınız olan tek şey iyi organize edilmiş bir sırt çantası, hafif bir bilgisayar ve merak duygunuz.

Category: Genel | LEAVE A COMMENT
Ekim 23 2026

Bütçe Dostu Lüks: Avrupa’da Trenle ‘Slow Travel’ Deneyimi

Havalimanlarının ruhsuz metal detektörleri, sıvı kısıtlamaları ve kapıda saatler süren bekleyişler seni de yorduysa, yalnız değilsin. Son dönemde popülerliği artan slow travel akımı, aslında sadece bir tatil tercihi değil; modern dünyanın telaşına zarif bir itiraz. İşte tam bu noktada, iyi planlanmış bir Avrupa seyahati için en asil araç sahneye çıkıyor: Tren. Doğru stratejiyle yaklaştığında bu yolculuk biçimi, hem bütçe dostu kalmayı başarıyor hem de karbon ayak izini dramatik şekilde düşürerek sürdürülebilir seyahat hayalini gerçeğe dönüştürüyor.

Uçuş Çilesinden Rayların Dinginliğine: Neden Slow Travel?

Modern turizm endüstrisi bizi A noktasından B noktasına fırlatıp atmak üzerine kurulu. Oysa uçağa bindiğinde coğrafyanın değişimini hissedemezsin; sadece kalkış ve iniş vardır. Tren yolculuğu ise sana yolu hediye eder. Alplerin eteklerinden geçerken değişen mimariyi, tarlaların renk tonlarını ve sınırların harita üzerindeki çizgilerden ibaret olduğunu cam kenarında oturup kahveni yudumlarken anlarsın.

Slow travel, bir haftada beş başkent tüketmek yerine bir coğrafyayı sindirerek yaşamayı önerir. İstasyona kalkıştan sadece on beş dakika önce gelmek, valizini tarttırmamak ve sıvılarını şeffaf poşetlere tıkıştırmamak başlı başına bir lükstür. Üstelik bu lüks, sanılanın aksine servet ödemeni gerektirmez.

Bütçe tüyosu: Avrupa’da tren biletleri genellikle uçuştan çok daha dinamik bir fiyatlandırmaya sahiptir. Deutsche Bahn (DB) veya Fransız SNCF gibi ulusal işletmeler biletleri 90 ila 180 gün önceden satışa çıkarır. Frankfurt-Paris arasını son dakika 120 Euro yerine, üç ay önceden ‘Super Sparpreis’ tarifesiyle 29 Euro’ya kapatabilirsin.

Gece Trenleri: Otel Masrafını Sıfırlayan Konfor

Bütçe bilincine sahip bir gezginin Avrupa raylarındaki en büyük müttefiki gece trenleridir. Avrupa Birliği’nin yeşil dönüşüm fonlarıyla birlikte Avusturya Demiryolları (ÖBB) Nightjet markası altında muazzam bir gece treni ağı ördü. Viyana’dan biniyorsun, kompartımanında kitabını okuyup uyuyorsun ve sabahın yedisinde Venedik Santa Lucia İstasyonu’nda, doğrudan lagünün kıyısında uyanıyorsun.

Bu deneyimin matematiksel mantığı çok net. Venedik’te vasat bir otel odasına gecelik en az 100-150 Euro verecekken, 6 kişilik bir kuşetli vagonda (couchette) yatak biletini yaklaşık 49 ila 69 Euro arasında bir fiyata alabiliyorsun. Hem bir günlük konaklama maliyetin siliniyor hem de gündüzden en ufak bir vakit kaybetmeden 11 saatlik yolu uyuyarak aşıyorsun. Sabah görevlinin getirdiği sıcak kruvasan ve kahve ise cabası.

Klişelerden Uzak, Manzarasıyla Büyüleyen Bir Rota: Münih’ten Verona’ya

Turistik hız trenleri bazen tünellerin içinden geçerken manzarayı kaçırmana neden olabilir. Ancak EuroCity trenleriyle Münih’ten hareket edip Avusturya Alpleri ve efsanevi Brenner Geçidi üzerinden İtalya’nın Verona kentine inen rota bambaşka bir hikayedir. Yaklaşık 5 saat 30 dakika süren bu yolculukta biletler, erken rezervasyonla 28 ila 39 Euro arasında değişir.

İnnsbruck vadisini geride bırakırken karlı zirvelerin yerini yavaş yavaş Güney Tirol’ün üzüm bağlarına bırakışını izlemek, hiçbir uçak penceresinin sunamayacağı bir görsel şölendir. Yanına yerel bir fırından aldığın pretzel’i ve termosundaki çayı koyduğunda, dünyanın en pahalı restoranından daha keyifli bir masaya sahip olursun.

Orta Avrupa’nın Gizli Kahramanı: RegioJet

Pek çok gezgin sadece devlet demiryollarına odaklanır, oysa Çek menşeili özel operatör RegioJet, bütçe dostu lüksün zirvesidir. Prag, Viyana, Budapeşte ve Bratislava arasında çalışan bu sarı trenlerde ‘Relax’ veya ‘Business’ sınıfı biletler bile çoğu zaman devlet trenlerinin standart sınıfından daha ucuzdur.

Prag’dan Budapeşte’ye yaklaşık 7 saat süren bir yolculuk için standart biletler 16 ila 22 Euro bandındadır. Üstelik vagon içi serviste kaliteli bir İtalyan kahvesi ücretsiz verilir, taze dilimlenmiş kekler 1-2 Euro, yerel Çek biraları ise sudan ucuzdur. Deri koltuğunda bacaklarını uzatıp laptopunda çalışırken veya dışarıdaki Bohemya kırsalını izlerken aldığın bu hizmet, düşük bütçeyle de kendinizi ayrıcalıklı hissettirebileceğinin kanıtıdır.

Rezervasyon sırrı: Çoğu gezgin direkt Eurail veya Interrail kartı almanın her zaman daha karlı olduğunu düşünür. Eğer sadece 2-3 uzun mesafe şehir değiştireceksen pass bileti almak yerine, seyahatinden 60 gün önce nokta-atışı bilet almak neredeyse yarı yarıya daha ucuza gelecektir. Pass biletleri genellikle esneklik arayanlar için mantıklıdır.

Raylarda Akıllıca Hayatta Kalma Rehberi

Tren yolculuğunu kusursuz kılmak için bagaj yükünden kurtulmak şart. Büyük bir tekerlekli bavulu vagon dar koridorlarında sürüklemek slow travel ruhuna uymaz; 40 litrelik iyi bir sırt çantası seni özgürleştirir. Ayrıca çoğu Avrupa treninde elektrik prizi ve Wi-Fi standart olsa da, Alpler veya nehir vadileri gibi ıssız noktalarda sinyalin kesileceğini hesaba katıp çevrimdışı müzik veya kitaplarını önceden indirmelisin.

Yemek vagonları harika bir sosyalleşme alanıdır ancak kısıtlı bütçeyle geziyorsan, istasyon marketleri yerine kentin içindeki yerel süpermarketlerden yapacağın sandviç, peynir ve meyve alışverişi bütçeni korur. Kendi ziyafetini trende hazırlamak, yolculuğun en tatlı ritüellerinden biridir.

Sonuçta slow travel, hızın kutsandığı bir çağda bilinçli bir yavaşlama tercihidir. Bir şehre varmaktan çok, oraya doğru akmanın tadını çıkardığında yolculuk gerçek anlamına kavuşur. Sıradaki rotanı planlarken uçak biletlerine değil, Avrupa’nın birbirine ilmek ilmek bağlı o büyüleyici ray haritasına bak; pişman olmayacaksın.

Category: Genel | LEAVE A COMMENT
Ekim 22 2026

Gemini mi, ChatGPT mi, Claude mu? 2026 AI Marketing ve Üretkenlik Analizi

2026 yılına geldik ama kafalar hâlâ karışık: Hangi araca aylık 20 dolar bayılacağız? Piyasada yüzlerce irili ufaklı araç türedi fakat günün sonunda dönüp dolaşıp üç büyük deve bakıyoruz: Google Gemini, OpenAI ChatGPT ve Anthropic Claude. Bu yazıda lafı dolandırmadan, pazarlama broşürlerindeki süslü rakamları bir kenara bırakıp kapsamlı bir yapay zeka karşılaştırma testi yapıyoruz. Masamızdaki AI modelleri; metin yazarlığı, marketing stratejisi ve günlük ofis angaryalarında gerçekten ne kadar işe yarıyor? Bizzat denedik, notlarımızı aldık.

Test Senaryomuz: Tipik Bir Pazarlama Günü

Modelleri zorlamak için sentetik benchmark testlerine girmedik. Gerçek bir pazarlamacının veya içerik üreticisinin sıradan bir gününü simüle ettik:

  • Görev 1: B2B SaaS ürünü için bülten (newsletter) metni yazımı ve “soğuk yapay zeka tonundan” kaçınma.
  • Görev 2: 50 sayfalık bir kullanıcı araştırma PDF’ini özetleyip ana içgörüleri tabloya dökme.
  • Görev 3: Sosyal medya reklam verilerini analiz edip Python ile hızlı bir görselleştirme kodu üretme.

[Görsel: Üç AI modeline aynı prompt girildiğinde üretilen yanıtların yan yana ekran görüntüsü karşılaştırması]

1. Metin Yazarlığı ve Üslup: Claude Hâlâ Kral mı?

Yapay zekaya metin yazdırırken en büyük dert malum: “Sonuç olarak…”, “Günümüzün hızla değişen dünyasında…” gibi klişeler. 2026 sürümlerinde bile bu dertten tamamen kurtulmuş değiliz.

Claude (Claude 3.5 Sonnet / Opus): Edebi derinlik, nüans yakalama ve marka tonunu taklit etme konusunda Claude hâlâ rakipsiz. Verdiğimiz SaaS bülten prompt’unda ekstradan “robot gibi yazma” dememize gerek kalmadan, samimi ve akıcı bir Türkçe metin üretti. Kelime tercihleri şaşırtıcı derecede doğal.

ChatGPT (GPT-4o ve o1 varyantları): ChatGPT her zamanki gibi İsviçre çakısı. İstediğinizi veriyor ama metin biraz “kurumsal LinkedIn postu” kokuyor. Yine de yönlendirmelere (prompt steering) inanılmaz hızlı adapte oluyor. İkinci revizyonda tonu oturttuk.

Gemini (Gemini 1.5 Pro / Ultra): Hızlı, modern bir dili var ancak bazen gereğinden fazla özetleme eğiliminde. Pazarlama metinlerinde Claude kadar cesur metaforlar kuramıyor ama Google Workspace entegrasyonu sayesinde Docs içine tek tıkla taslak atması büyük konfor.

2. Veri Analizi ve PDF Okuma: Bağlam Penceresi (Context Window) Savaşları

LLM dünyasında “context window” dediğimiz şey, modelin aynı anda aklında tutabildiği metin miktarıdır. Bir kitabı belleğe alıp içinden cımbızla bilgi çekmek gibi düşünün.

50 sayfalık karmaşık bir PDF dosyasını her üç modele de yükledik. Gemini, devasa bağlam penceresi sayesinde belgeyi neredeyse sıfır kayıpla taradı. Hatta dipnotlardaki çelişkili bir veriyi bile yakaladı. Claude analitik içgörüleri bağlama oturtmada çok başarılıydı; sadece veri listelemekle kalmadı, “Bu veri şu anlama gelebilir” diyerek stratejik yorum kattı. ChatGPT ise Code Interpreter (Advanced Data Analysis) motorunu çalıştırarak doğrudan dosyayı Python ile inceledi ve en temiz sayısal doğrulamayı sundu.

[Görsel: PDF analizinde çıkarılan içgörülerin doğruluk oranlarını gösteren karşılaştırma grafiği]

3. Kodlama ve Otomasyon: Pazarlamacının Küçük Script İhtiyacı

Her dijital pazarlamacı az çok SQL, HTML veya basit Python script’lerine ihtiyaç duyar. Meta Ads API’sinden veri çeken basit bir otomasyon istedik:

# Test edilen örnek prompt çıktısı
python fetch_campaign_metrics.py --start-date 2026-01-01 --platform meta

Burada Claude Artifacts arayüzü sayesinde kodu sağ panelde doğrudan çalıştırılabilir ve incelenebilir kıldı. ChatGPT ise olası API hata kodlarını da hesaba katarak en dayanıklı (robust) kodu yazdı. Gemini bu aşamada çalışan bir kod verdi ancak hata yakalama (try-except) bloklarını biraz zayıf bıraktı.

Büyük Karşılaştırma: Kim Nerede Güçlü?

Model Artıları (Pros) Eksileri (Cons) En Uygun Profil
Claude Muazzam Türkçe ton, edebi akıcılık, Artifacts arayüzü Görsel üretimi yok, web tarama kabiliyeti rakiplerinden zayıf Copywriter’lar, İçerik Stratejistleri, Prompt Mühendisleri
ChatGPT Kusursuz veri analizi, gelişmiş ses modu, devasa plugin/GPT ekosistemi Metinleri bazen mekanik hissettirebiliyor, kotalar can sıkıcı Growth Marketing uzmanları, Genel Yöneticiler, Kod yazanlar
Gemini Google Workspace entegrasyonu, devasa context, güncel web bilgisi Bazen aşırı sansürlü/temkinli, yaratıcı yazarlıkta ortalama Google altyapısını kullanan ekipler, Büyük belge tarayanlar

Fiyatlar ve Ücretsiz Alternatifler

Üç platformun da Pro abonelikleri standartlaşmış durumda: Aylık 20$ civarında seyrediyor. Peki cebinden bu parayı çıkarmak istemeyenler ne yapacak?

  • Ücretsiz Katmanlar: ChatGPT (GPT-4o kısıtlı erişim), Claude (günlük mesaj limitli Sonnet) ve Gemini (standart web sürümü) ücretsiz kullanılabiliyor. Günlük işler için Claude’un ücretsiz kotası yetmeyebilir; Gemini bu konuda en cömert olanı.
  • Açık Kaynak & Ücretsiz Alternatifler: Bilgisayarınız güçlüyse Ollama kullanarak yerelinizde Llama 3 veya DeepSeek modellerini kurabilirsiniz. API tarafında ise Groq gibi ultra hızlı servisler üzerinden bu açık modelleri cüzi ücretlerle ya da ücretsiz kotalarla çalıştırmak 2026’da inanılmaz bir maliyet avantajı sağlıyor.

Son Karar: Cüzdanı Kime Açmalı?

Mucizevi bir “tek kazanan” yok. İhtiyacınıza göre reçete çok net:

Metinle yaşayan, blog yazan, bülten hazırlayan ve marka dili kurgulayan biriyseniz Claude verdiğiniz her kuruşu hak ediyor. “Ben verimi tablolardan alırım, reklam metriklerimi analiz ettirir, arada bir de sesli asistanla beyin fırtınası yaparım” diyorsanız ChatGPT hâlâ en olgun paket. Şirketiniz tamamen Google Drive, Docs ve Gmail üzerinde dönüyorsa ve sayfalarca sözleşmeyi tek seferde özetletmek istiyorsanız adresiniz Gemini.

Benim kişisel tercihim mi? Yazı masasında Claude, veri ekranında ChatGPT. Gemini ise Google Docs içinde sessiz sedasız işini yapan güvenilir bir ofis stajyeri gibi köşede bekliyor.

Category: Genel | LEAVE A COMMENT