Mayıs 27 2026

Git Commit Çöplüğüne Son: CI/CD Pipeline Süreçlerini Yerelde Test Etme Yöntemleri

Yazım hatası yüzünden patlayan bir build. Arkasından gelen “fix typo” commit’i. O da yemedi; “fix syntax again”, “please work”, “test 4” ve nihayetinde “really fix this time”. Tanıdık geldi mi? Reponun commit geçmişini adeta bir çöplüğe çeviren bu döngü, yalnızca estetik bir problem değil. Her push işleminde buluttaki runner’ın ayağa kalkmasını beklemek, saatlik faturaları şişirmek ve geri bildirim döngüsünü (feedback loop) dakikalarca uzatmak demektir. Profesyonel bir SRE veya DevOps mühendisi için bu kabul edilemez bir zaman kaybıdır.

Bu pratik rehberde, commit-push-wait döngüsünden kurtulup yerel pipeline testi (local cicd testing) süreçlerini nasıl profesyonelce kurgulayacağımızı ele alacağız. GitHub Actions ve GitLab CI pipeline’larınızı, uzak sunuculara hiç dokunmadan, doğrudan kendi terminalinizde nasıl simüle edeceğinizi gerçek senaryolarla inceleyeceğiz.

Neden Yerelde Test Etmeliyiz? (The SRE Perspective)

Bunu sadece “temiz git geçmişi” motivasyonuyla açıklamıyoruz. Altında yatan asıl nedenler tamamen operasyonel verimlilik ve güvenlikle ilgilidir:

  • Hızlı Geri Bildirim Döngüsü: Buluttaki bir runner’ın kuyrukta beklemesi, imajı çekmesi ve init olması ortalama 1-3 dakika sürer. Yerelde bu süre saniyeler mertebesindedir.
  • Maliyet Optimizasyonu: GitHub Actions veya GitLab CI faturalarınızın önemli bir kısmı, aslında “deneme-yanılma” aşamasındaki başarısız run’lardan kaynaklanır.
  • Güvenli Secret Yönetimi: Yeni bir entegrasyonu denerken production secret’larını ya da hassas API anahtarlarını geçici olarak buluttaki CI ortamına eklemek her zaman güvenlik riski barındırır.

GitHub Actions’ı Yerelde Koşturmak: act

GitHub Actions workflow’larını yerel makinede çalıştırmanın fiili standardı act aracıdır. `act`, lokalinizdeki Docker daemon’ını kullanarak GitHub’ın runner ortamlarını simüle eden container’lar ayağa kaldırır ve tanımladığınız adımları bu container’lar içinde çalıştırır.

act Kurulumu ve Temel Kullanımı

Kurulumu macOS işletim sistemlerinde Homebrew ile hızlıca yapabilirsiniz:

brew install nektos/tap/act

Eğer Linux kullanıyorsanız, doğrudan binary olarak çekebilirsiniz:

curl -s https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash

Gerçekçi Bir Senaryo: Secret’lar ve Matrix Yapıları

Diyelim ki elinizde node.js uygulamasını test eden ve deploy etmeden önce bir API anahtarına ihtiyaç duyan aşağıdaki gibi bir `.github/workflows/ci.yml` dosyanız var:

name: Node.js CI

on:
  push:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18.x, 20.x]
    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm ci
      - run: npm test
        env:
          DATABASE_URL: ${{ secrets.DATABASE_URL }}

Bu workflow’u yerelde çalıştırmak istediğinizde doğrudan `act` komutunu vermeniz yetmez; çünkü `secrets.DATABASE_URL` boş kalacaktır ve matrix yapısı yüzünden süreç uzayacaktır. İşte tam bu noktada profesyonel parametreler devreye giriyor.

Öncelikle bir `.secrets` dosyası oluşturun:

DATABASE_URL=mongodb://localhost:27017/test_db

Şimdi sadece Node 20 versiyonunu ve sadece `test` job’ını tetiklemek, üstelik bunu yaparken de yerel secret dosyamızı beslemek için şu komutu koşturuyoruz:

act -j test --matrix node-version:20.x --secret-file .secrets

In-depth Tip: Runner Boyutu Sorunsalı

`act` ilk çalıştığında size hangi imaj boyutunu kullanmak istediğinizi sorar (Micro, Medium, Large). Varsayılan “Micro” imaj genelde hızlı iner ancak içinde `curl`, `docker`, `aws-cli` gibi temel araçları barındırmaz. Gerçekçi bir act github actions deneyimi için en azından “Medium” imajı seçmeli veya `.actrc` dosyanıza şu custom imaj eşlemesini eklemelisiniz:

-P ubuntu-latest=catthehacker/ubuntu:act-latest

GitLab CI Pipeline’larını Yerelde Simüle Etmek

GitLab tarafında işler biraz daha karmaşıktır. Resmi `gitlab-runner exec` komutu uzun süredir “deprecated” durumdadır ve `needs`, `parent-child pipelines` veya modern `artifacts` tanımlamalarını tam olarak desteklemez. SRE topluluğu bu boşluğu doldurmak için harika bir açık kaynaklı alternatif geliştirdi: gitlab-ci-local.

gitlab-ci-local Kurulumu

NodeJS tabanlı bu CLI aracını sisteminize kurmak için NPM veya Homebrew kullanabilirsiniz:

brew install firecow/gitlab-ci-local/gitlab-ci-local

Uygulama: Kompleks Bir .gitlab-ci.yml Testi

Şöyle bir pipeline yapımız olduğunu düşünelim. Uygulamayı derliyor, artifact üretiyor ve bir sonraki stage’de bu artifact’i kullanıyor:

stages:
  - build
  - test

compile-code:
  stage: build
  image: node:20-alpine
  script:
    - npm ci
    - npm run build
  artifacts:
    paths:
      - dist/

run-unit-tests:
  stage: test
  image: node:20-alpine
  needs: ["compile-code"]
  script:
    - ls dist/
    - npm run test:unit

Bu pipeline’ı `gitlab-runner local` mantığıyla kendi makinenizde çalıştırmak için terminalden şu komutu vermeniz yeterlidir:

gitlab-ci-local

`gitlab-ci-local`, projenizin kök dizinindeki `.gitlab-ci.yml` dosyasını analiz eder, adımları sırasıyla çalıştırır, `needs` direktifine sadık kalır ve en önemlisi üretilen `dist/` klasörünü lokalinizdeki `.gitlab-ci-local/artifacts/` klasörüne otomatik olarak map eder. Böylece build artifact’lerinin bir sonraki job’a düzgün aktarılıp aktarılmadığını gözlerinizle görebilirsiniz.

Yerel GitLab Variable’larını Yönetmek

Gerçek CI ortamında GitLab UI üzerinden tanımladığınız “masked/protected” değişkenleri yerelde taklit etmek için `.gitlab-ci-local-variables.yml` adında bir dosya oluşturabilirsiniz:

STAGING_KUBE_TOKEN: "kube-token-12345"
DB_PASSWORD: "super-secret-password"

Bu dosya `.gitignore` listenizde olmalıdır. Araç, bu değişkenleri otomatik olarak okuyacak ve container’ların içerisine enjekte edecektir.

Docker-in-Docker (DinD) ve Soket Paylaşımı Çıkmazı

Yerel pipeline testlerinde en çok baş ağrıtan konulardan biri, pipeline adımının kendisinin de Docker ayağa kaldırmaya çalışmasıdır (örneğin, entegrasyon testleri için geçici bir DB container’ı başlatmak veya imajı `docker build` ile derlemek).

Eğer `act` kullanıyorsanız ve job’ınız içinde Docker komutları koşturacaksanız, lokalinizdeki Docker soketini container içine mount etmeniz gerekir:

act --bind-workdir -v /var/run/docker.sock:/var/run/docker.sock

Benzer şekilde, `gitlab-ci-local` kullanırken `services: – docker:dind` tanımınız varsa, aracın konfigürasyonunda yerel soketin paylaşıldığından emin olun. Bu sayede iç içe (nested) container yapısı yerine, tüm container’ların sizin host Docker daemon’ınız üzerinde “sibling” (kardeş) container’lar olarak ayağa kalkmasını sağlarsınız. Bu, hem disk alanından tasarruf sağlar hem de performansı katlar.

Özet ve Best Practice’ler

Süreci bir standarta oturtmak adına ekibinize şu kuralları aşılamanızı öneririz:

  1. Pre-commit Hook Entegrasyonu: Kritik CI script değişikliklerinde, geliştiricilerin lokalde en azından bir `act` veya `gitlab-ci-local` kuru testi yapmasını zorunlu tutun.
  2. Maksimum İmaj Önbellekleme (Caching): Lokal testlerin hızlı olması için Docker imajlarını yerelde optimize edin. Sık kullanılan base imajları (`node`, `python`, `golang` alpine versiyonları) önceden `docker pull` ile çekin.
  3. Lokal .env/.secrets Dosyalarını Asla Push Etmeyin: Güvenlik en katı kuraldır. `.gitignore` dosyanızda yerel pipeline testlerinde kullandığınız tüm taklit secret dosyalarının tanımlı olduğundan emin olun.

Geliştirme hızınızı (velocity) artırmak ve CI bütçelerini optimize etmek tamamen feedback loop süresini kısaltmaktan geçiyor. Araçlarınızı doğru yapılandırın, lokal gücü kullanın ve o commit çöplüğünü tarihe gömün.

Category: Genel | LEAVE A COMMENT
Mayıs 27 2026

Baharatların Dansı: Evde Restoran Usulü Hint Usulü Butter Chicken

Dışarıda yediğiniz o yumuşacık, sosu ekmek banmalık Hint yemekleri gözünüzü korkutmasın. Bugün mutfakta kendinizi bir şef gibi hissettirecek, sırrı marinasyonda saklı nefis bir butter chicken tarifi ile karşınızdayız. Giriş seviyesinde bir yemek meraklısı olsanız bile, doğru adımlarla evde Hint mutfağı rüzgarları estirmek sandığınızdan çok daha kolay ve kesinlikle sipariş vermekten daha keyifli. Hadi, baharatların o büyüleyici dünyasına adım atalım ve mutfağı mis gibi kokutalım!

Porsiyon: 4 Kişilik
Hazırlık Süresi: 20 dakika (Marinasyon için ekstra minimum 30 dakika)
Pişirme Süresi: 25 dakika

Neden Butter Chicken? (Murgh Makhani)

Butter chicken, ya da orijinal adıyla Murgh Makhani, Hint mutfağının dünyaya sunduğu en büyük hediyelerden biri. Neden mi bu kadar seviliyor? Çünkü acı ile kremsi dokunun, asit ile yağın mükemmel dengesini sunuyor. Tavuklar yoğurtla marine edildiği için lokum gibi yumuşuyor, sosundaki tereyağı ve krema ise baharatların o keskin köşelerini yumuşatarak damakta adeta bir şölen yaratıyor. Bu dengeli lezzet profili, onu Hint yemekleri dünyasına giriş yapmak isteyenler için en ideal tarif haline getiriyor.

Gerekli Malzemeler

Malzeme listesi gözünüzü korkutmasın; çoğu zaten dolabınızda olan, bulamadıklarınızı da kolayca ikame edebileceğiniz şeyler. Örneğin kaju alerjiniz varsa kullanmayabilir, tavuk but yerine tavuk göğsü de tercih edebilirsiniz.

Marinasyon İçin:

  • Tavuk: 700 gram kemiksiz tavuk but (göğüs eti de olur ama but eti çok daha sulu ve lezzetli kalacaktır)
  • Yoğurt: 4 yemek kaşığı süzme yoğurt (tavuğu yumuşatan sihirli asit kaynağımız)
  • Sarımsak ve Zencefil: 1’er yemek kaşığı rendelenmiş (Hint yemeklerinin olmazsa olmaz ikilisi)
  • Limon suyu: 1 yemek kaşığı
  • Baharatlar: 1 tatlı kaşığı toz kırmızı biber, 1 çay kaşığı zerdeçal, 1 tatlı kaşığı garam masala, 1 çay kaşığı tuz

Sos İçin (Gravy):

  • Tereyağı: 2 yemek kaşığı (veya tereyağının Hint versiyonu olan ghee)
  • Sıvı yağ: 1 yemek kaşığı (tereyağının yanmasını önlemek için)
  • Soğan: 1 adet büyük boy (piyazlık doğranmış)
  • Domates: 4 adet rendelenmiş (veya pratiklik açısından 1 kutu domates püresi)
  • Kaju: 10-12 adet çiğ kaju (sosu koyulaştırır ve orijinal bir kremsilik katar, yoksa yerine krema miktarını artırabilirsiniz)
  • Krema: Yarım su bardağı sıvı krema (heavy cream)
  • Baharatlar: 1 tatlı kaşığı toz kırmızı biber, 1 tatlı kaşığı garam masala, 1 çay kaşığı kimyon, 1 tatlı kaşığı şeker (asiditeyi dengelemek için)

Adım Adım Butter Chicken Yapılışı

Adımları sırayla takip ettiğinizde her şeyin ne kadar pratik ilerlediğini göreceksiniz. İşte evde Hint mutfağı deneyiminin aşamaları:

  1. Tavukları Marine Edin: Doğranmış tavukları yoğurt, sarımsak, zencefil, limon suyu ve baharatlarla iyice harmanlayın. Buzdolabında en az 30 dakika (vaktiniz varsa 2 saat) dinlenmeye bırakın.
  2. Tavukları Mühürleyin: Geniş bir tavada 1 yemek kaşığı tereyağı ve sıvı yağı kızdırın. Tavukları yüksek ateşte, dışı hafifçe karamelize olana kadar (yaklaşık 5-7 dakika) pişirin ve kenara alın. (İçinin tam pişmesine gerek yok, sosta pişecek).
  3. Sos Tabanını Hazırlayın: Aynı tavaya biraz daha yağ ekleyin. Soğanları yumuşayana kadar soteleyin. Ardından sarımsak, zencefil ve kalan baharatları ekleyip kokusu çıkana kadar 1-2 dakika kavurun.
  4. Domates ve Kajuyu Ekleyin: Domates püresini ve kajuları tavaya ilave edin. Kısık ateşte domatesler suyunu çekip koyulaşana kadar yaklaşık 10 dakika pişmeye bırakın.
  5. Pürüzsüzleştirin (En Önemli Adım!): Hazırladığınız bu sos karışımını ocaktan alın. El blenderı yardımıyla tamamen pürüzsüz, kadife gibi bir kıvama gelene kadar çekin. (Gerekirse sosu açmak için yarım çay bardağı sıcak su ekleyebilirsiniz).
  6. Buluşma Zamanı: Pürüzsüz sosu tekrar tavaya alın. Üzerine mühürlediğiniz tavukları ekleyin. Kısık ateşte tavuklar tamamen yumuşayana kadar 8-10 dakika pişirin.
  7. Son Dokunuş: Ocağın altını kapatın. Sıvı kremayı ve kalan tereyağını ekleyip karıştırın. İşte o muhteşem turuncu renk ve ipeksi doku hazır!

İşin Sırrı: Butter Chicken Püf Noktaları

Püf noktası: Butter chicken’ın o restoranlardaki derin ve hafif tütsü aromalı tadını yakalamak istiyorsanız, tavukları tavada pişirirken hafifçe “yakmaktan” korkmayın. Tavukların üzerindeki o kahverengi-siyahımsı karamelize noktalar (char), sosa otantik bir lezzet katacaktır. Ayrıca sosu blenderdan geçirdikten sonra ince bir süzgeçten süzerseniz, tam anlamıyla ipeksi (velvety) bir kıvama ulaşırsınız.

Yanına yapacağınız tane tane dökülen bir basmati pirinç pilavı veya sıcacık bir naan (Hint ekmeği) ile bu akşam kendinizi Yeni Delhi’de hissedeceksiniz. Şimdiden ellerinize sağlık ve afiyet olsun!

Category: Genel | LEAVE A COMMENT
Mayıs 26 2026

Bernina Express ve Ötesi: İsviçre Alpleri’ni Trenle Keşfetme Rehberi

İsviçre denince akla hemen cep yakan fiyatlar, steril sokaklar ve lüks saatler gelir. Ancak Alplerin kucağında, pencereden süzülen kar manzaraları eşliğinde yapacağınız bir isvicre tren turu, hayatınızda bir kez yaşamanız gereken o benzersiz, masalsı deneyimlerden biridir. Bu maceranın tam kalbinde ise kırmızı vagonlarıyla dağları aşan, UNESCO Dünya Mirası listesindeki ünlü bernina express yer alıyor. Peki, bu rüya rotayı cebimizi tamamen boşaltmadan, turistik klişelere teslim olmadan bir lokal gibi nasıl deneyimleriz? Gelin, tren seyahati tutkunlarının kutsal kasesi olan bu yola birlikte çıkalım ve Alplerin gerçek yüzünü keşfedelim.

Landwasser’den Poschiavo’ya: Bir Trenden Fazlası

Chur istasyonundan hareket ettiğinizde, modern dünyanın gürültüsü ve hızı yavaşça geride kalır. Tren, yaklaşık dört saatlik bir yolculukla kuzeydeki heybetli buzullardan güneydeki İtalya sınırına, Tirano’nun palmiye ağaçlarına doğru süzülür. Bu rotanın en ikonik anı, şüphesiz 65 metre yükseklikteki Landwasser Viaduct üzerinden geçiş anıdır. Lokomotif karanlık tünele girmeden hemen önce, tren penceresinden dışarıya süzülen o kırmızı kavis, size neden otoyolları değil de demir ağları seçtiğinizi fısıldar. Bu anı yaşarken acele etmeyin, sadece akışa ve mühendisliğin doğayla uyumuna odaklanın.

Yolculuk ilerledikçe vadi daralır, dağlar üzerinize doğru geliyormuş gibi hissettirir. Ospizio Bernina istasyonuna vardığınızda, tren yolculuğunun en yüksek noktasına, tam 2253 metreye ulaşırsınız. Burası adeta başka bir gezegendir. Lago Bianco (Beyaz Göl) kışın tamamen buzla kaplıyken, bahar aylarında adını aldığı o sütlü beyaz tonuyla parıldar. Tren buradan sonra dik bir inişe geçer. Sadece bir saat içinde, karların içinden sıyrılıp palmiye ağaçlarının ve İtalyan mimarisinin hakim olduğu Tirano’ya inersiniz. İklimin ve kültürün bu kadar kısa sürede bu denli radikal bir şekilde değişmesi, insanda adeta bir zaman makinesinde seyahat ediyormuş hissi uyandırır.

Bütçe Dostu Devrim: Bölgesel Tren Sırrı

Gelelim kertenkerem.net usulü en önemli bütçe tüyomuza. Bernina Express olarak adlandırılan o meşhur kırmızı, panoramik pencereli trenler harikadır, ancak koltuk rezervasyon ücreti adı altında ekstra bir bedel ödemeniz gerekir. Bu bedel sezonuna göre 20 ile 26 CHF arasında değişir. Üstelik bu vagonların pencereleri açılmaz, bu da fotoğraf çekerken camdaki yansımalarla boğuşacağınız anlamına gelir. Seyahati daha samimi kılmak ve bütçeyi korumak için aynı rayları kullanan sarı logolu RhB bölgesel trenlerini tercih edin.

Bölgesel trenlerde rezervasyon ücreti ödemezsiniz, kalabalıktan uzak kalırsınız ve en önemlisi, pencereleri aşağı kaydırıp Alplerin o buz gibi, taze havasını içinize çekerek temiz fotoğraflar çekebilirsiniz. Aynı manzarayı, aynı raylar üzerinde yarı fiyatına ve çok daha özgürce izlemek işte bu kadar basittir.

**Kertenkerem Tüyosu:** Bölgesel trenlerde seyahat ederken trenin en arkasındaki vagona geçmeye çalışın. Virajları dönerken trenin gövdesini ve Alplerin manzarasını aynı kadraja almak, bölgesel trenlerin açılan pencereleri sayesinde çok daha kolaydır. Üstelik bu trenler saat başı çalışır, yani dilediğiniz istasyonda inip bir sonrakine binebilirsiniz.

Klişelerden Uzak İsviçre Gezilecek Yerler

Çoğu turist St. Moritz’de inip pahalı kafelerde vakit geçirmeyi tercih eder. Ancak gerçek bir gezgin için isvicre gezilecek yerler listenin en değerli incileri, trenin durduğu o küçük ve sessiz istasyonlarda saklıdır. Örneğin Alp Grüm istasyonu bunlardan biridir. Deniz seviyesinden 2091 metre yükseklikte yer alan bu istasyona sadece trenle ya da zorlu bir yürüyüş rotasıyla ulaşabilirsiniz. İstasyonun hemen yanındaki taş binada yer alan restoranda sıcak bir çorba içip Palü Buzulu’nu izlemek, lüks bir kayak merkezinde harcayacağınız zamandan çok daha değerlidir.

Yolculuğun devamında karşınıza çıkan, İtalyanca konuşulan Poschiavo kasabası ise taş evleri ve dar sokaklarıyla size İsviçre’de olduğunuzu unutturacak bir sakinlik sunar. Burada büyük turist otobüsleri göremezsiniz; sadece yerel halkın sakin yaşamına tanıklık eder, meydandaki küçük fırından taze bir hamur işi alıp nehir kenarında yiyebilirsiniz. İşte gerçek İsviçre deneyimi tam olarak burada başlar.

Pratik Bilgiler ve Rezervasyon Tüyoları

Bu rüya gibi tren seyahati için planlama yaparken biletinizi son dakikaya bırakmamalısınız. İsviçre’de ulaşım pahalıdır ancak sistemi çözerseniz bütçenizi koruyabilirsiniz. Chur ile Tirano arasında tek yön bilet fiyatı normal şartlarda yaklaşık 63 CHF civarındadır. Ancak İsviçre Federal Demiryolları mobil uygulamasını indirip bir-iki ay öncesinden “Saver Day Pass” kovalarsanız, tüm gün geçerli sınırsız ulaşım biletini 52 CHF gibi çok daha uygun bir fiyata yakalayabilirsiniz. Eğer ülkede birkaç gün geçirecekseniz ve farklı şehirlere de seyahat edecekseniz, Swiss Travel Pass almak en mantıklı çözümdür; çünkü bu kart bölgesel trenleri tamamen ücretsiz hale getirir.

**Zamanlama Tüyosu:** En güzel manzaralar için trenin gidiş yönüne göre sağ tarafına oturmaya özen gösterin. Alp Grüm ve Lago Bianco manzaraları sağ tarafta çok daha büyüleyicidir. Seyahatinizi mayıs veya ekim aylarında planlarsanız, hem karlı zirveleri hem de yeşeren vadileri aynı anda görebilirsiniz.

Yolculuğa Hazırlık: Yanınıza Ne Almalı?

Alplerde hava durumu hızla değişebilir. Vadide sıcaklık 20 dereceyken, zirveye çıktığınızda kendinizi sıfır derecede bulabilirsiniz. Bu yüzden yanınıza mutlaka katman katman giyebileceğiniz kıyafetler alın. Ayrıca tren istasyonlarındaki marketler pahalı olduğundan, yolculuk öncesinde büyük süpermarketlerden sandviç, yerel İsviçre çikolatası ve suyunuzu alıp sırt çantanıza atmak bütçenizi büyük ölçüde rahatlatacaktır. Kendi pikniğinizi dağların zirvesinde yapmak, en lüks restorandan daha keyiflidir.

Sonuçta İsviçre Alpleri’ni trenle keşfetmek sadece bir noktadan diğerine gitmek değil, yolun kendisini bir yaşam biçimi haline getirmektir. Pencereden dışarı bakarken zamanın nasıl yavaşladığını hissedecek, hız çağında yavaşlamanın lüksünü tadacaksınız. Valizinizi hazırlayın, biletinizi erkenden alın ve Alplerin kalbine doğru giden o demir yollarının sesine kulak verin.

Category: Genel | LEAVE A COMMENT
Mayıs 22 2026

HAProxy ile Yüksek Erişilebilirlik: Keepalived ve Health Check

Modern mikroservis mimarilerinde veya yüksek trafikli web uygulamalarında kesintisiz hizmet sunmak artık bir lüks değil, zorunluluk. Tam da bu noktada, haproxy ve keepalived ikilisi, linux sunucularınız üzerinde kurabileceğiniz, kurumsal sınıfta, maliyetsiz ve son derece güvenilir bir aktif-pasif ha (high availability) loadbalancer çözümü olarak imdadımıza yetişiyor. Peki ama bu iki canavarı prod ortamında birbirine küstürmeden, arkadaki servislerin sağlık durumlarına (health check) ve gelen isteğin içeriğine (ACL) göre nasıl kusursuzca dans ettireceğiz? Bu yazıda lafı hiç dolandırmadan, doğrudan production ortamında hırpalanmış senaryolardan süzülen pratik bir mimariyi ayağa kaldıracağız.

Neden Sadece HAProxy Yetmiyor? (SPOF Nedir?)

HAProxy, performansına ve stabilitesine şapka çıkardığımız harika bir load balancer. Ancak ne kadar güçlü olursa olsun, tek bir sunucu üzerinde çalıştığı sürece sisteminizde bir SPOF (Single Point of Failure) yani tek hata noktası oluşturur. HAProxy’nin üzerinde çalıştığı Linux sunucunun donanımı çökerse, network kartı yanarsa ya da kernel panik yaparsa tüm sisteminiz karanlığa gömülür.

İşte bu riski bertaraf etmek için Keepalived devreye giriyor. Keepalived, VRRP (Virtual Router Redundancy Protocol) protokolünü kullanarak iki farklı load balancer sunucusunun tek bir Sanal IP (Virtual IP – VIP) arkasında çalışmasını sağlar. Aktif olan sunucu çöktüğünde, pasif durumdaki yedek sunucu VIP’yi milisaniyeler içinde üzerine alır. Kullanıcılar bu failover sürecini ruhları bile duymadan atlatırlar.

Altyapı Hazırlığı ve Olmazsa Olmaz Kernel Parametresi

Kuruluma başlamadan önce topolojimizi netleştirelim. Elimizde iki adet Linux (Ubuntu/Debian tabanlı kabul ediyoruz) sunucu olduğunu varsayalım:

  • LB01 (Master): 192.168.1.10
  • LB02 (Backup): 192.168.1.11
  • Sanal IP (VIP): 192.168.1.100

Şimdi kıdemli bir sistemcinin asla atlamayacağı o kritik kernel ayarına gelelim: net.ipv4.ip_nonlocal_bind. Varsayılan olarak Linux, sunucu üzerinde fiziksel olarak tanımlanmamış bir IP adresine servislerin bind olmasını (yani o IP’yi dinlemesini) engeller. VIP, pasif sunucuda o an aktif olmadığı için backup sunucudaki HAProxy servisi başlatılamaz ve çöker. Bunun önüne geçmek için her iki sunucuda da şu komutu koşturuyoruz:

echo "net.ipv4.ip_nonlocal_bind=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Bu sihirli dokunuş sayesinde HAProxy, sunucuda henüz tanımlanmamış olan 192.168.1.100 IP’sini hiç çekinmeden dinlemeye başlayacaktır.

Keepalived ile Aktif-Pasif VIP Kurulumu

Her iki sunucuya da keepalived paketini kuralım:

sudo apt update && sudo apt install keepalived -y

Şimdi konfigürasyon zamanı. En kritik nokta, master sunucu çöktüğünde VIP’nin pasif sunucuya geçmesi, ancak master geri geldiğinde (eğer istemiyorsak) gereksiz yere VIP’yi geri alıp ufak da olsa bir kesinti yaratmamasıdır. Buna “non-preemptive” yapılandırma denir. Ancak biz bu örnekte klasik aktif-pasif öncelik yapısını kuracağız.

Master (LB01) Konfigürasyonu

/etc/keepalived/keepalived.conf dosyasını oluşturun ve aşağıdaki gibi düzenleyin:

vrrp_script check_haproxy {
    script "killall -0 haproxy" # HAProxy çalışıyor mu kontrol et
    interval 2                  # Her 2 saniyede bir çalıştır
    weight 2                    # Başarılıysa önceliğe (priority) 2 ekle
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0              # Network arayüzünüzün adı (ip a ile kontrol edin)
    virtual_router_id 51        # İki sunucuda da AYNI olmalı
    priority 101                # Master daha yüksek önceliğe sahip
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass GizliSifre123  # İki sunucuda da aynı olmalı
    }

    virtual_ipaddress {
        192.168.1.100/24         # Paylaşılan Sanal IP (VIP)
    }

    track_script {
        check_haproxy
    }
}

Backup (LB02) Konfigürasyonu

Backup sunucumuzda ise dosya neredeyse aynıdır, sadece state ve priority değerleri değişir:

vrrp_script check_haproxy {
    script "killall -0 haproxy"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100                # Master'dan daha düşük
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass GizliSifre123
    }

    virtual_ipaddress {
        192.168.1.100/24
    }

    track_script {
        check_haproxy
    }
}

Konfigürasyonları kaydettikten sonra her iki sunucuda da servisi başlatalım:

sudo systemctl enable --now keepalived

Eğer her şey yolunda gittiyse, LB01 üzerinde ip a show eth0 komutunu verdiğinizde secondary IP olarak 192.168.1.100 adresini görmelisiniz. LB02’de ise bu IP görünmemelidir.

HAProxy Kurulumu ve Sağlık Kontrolü (Health Check) Sanatı

Sıra geldi yük dengeleme katmanımıza. HAProxy’yi kuralım:

sudo apt install haproxy -y

Bir load balancer’ı akıllı kılan şey, arkasındaki uygulama sunucularının (backend) gerçekten yaşayıp yaşamadığını bilmesidir. Sadece TCP portunun açık olması (Layer 4) uygulamanın sağlıklı çalıştığı anlamına gelmez. Uygulama veritabanına bağlanamadığı için HTTP 500 hatası veriyor olabilir ama TCP portu hala ayaktadır. Bu yüzden her zaman HTTP tabanlı (Layer 7) health check tercih etmelisiniz.

Gelin, hem gelişmiş health check mekanizmasını hem de VIP binding konseptini barındıran örnek bir /etc/haproxy/haproxy.cfg dosyası hazırlayalım:

global
    log /dev/log local0
    log /dev/log local1 notice
    chroot /var/lib/haproxy
    user haproxy
    group haproxy
    daemon

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    timeout connect 5000ms
    timeout client  50000ms
    timeout server  50000ms

frontend http_front
    bind 192.168.1.100:80 # Sadece VIP üzerinden gelen istekleri dinle
    mode http
    default_backend app_backend

backend app_backend
    mode http
    balance roundrobin
    
    # Layer 7 Health Check Yapılandırması
    option httpchk GET /healthz HTTP/1.1\r\nHost:\ myapp.local
    http-check expect status 200
    
    # Backend Sunucuları
    server app01 192.168.1.20:8080 check inter 3000 rise 2 fall 3
    server app02 192.168.1.21:8080 check inter 3000 rise 2 fall 3

Burada Neler Döndü? (Detaylı “Neden” Analizi)

  • bind 192.168.1.100:80: HAProxy’ye sadece VIP adresini dinlemesini söyledik. Bu, trafiğin kontrolsüz şekilde doğrudan nodeların kendi IP’leri üzerinden akmasını engeller.
  • option httpchk GET /healthz: HAProxy, backend sunucularına her 3 saniyede bir (inter 3000) HTTP GET isteği gönderir.
  • http-check expect status 200: Gelen yanıtın HTTP 200 OK olması durumunda sunucu “sağlıklı” kabul edilir.
  • rise 2 fall 3: Bir sunucu ardışık 3 kez başarısız health check yanıtı verirse (fall), trafik ona gönderilmez (out of rotation). Ne zaman ki ardışık 2 başarılı yanıt verir (rise), o zaman tekrar gruba dahil edilir.

Gelişmiş ACL (Access Control List) Tabanlı Routing

Prod ortamlarında genellikle tek bir domain arkasında birden fazla mikroservis barındırırız. Örneğin /api ile başlayan isteklerin API servislerine, statik dosyaların ise başka bir backende gitmesini isteriz. HAProxy’nin ACL mekanizması bu konuda tam bir canavardır.

Aşağıdaki konfigürasyon örneğinde, path ve domain bazlı yönlendirmeyi nasıl yapacağımızı görelim:

frontend http_front_advanced
    bind 192.168.1.100:80
    mode http

    # ACL Tanımları
    acl is_api path_beg -i /api
    acl is_static path_end -i .jpg .png .css .js
    acl host_admin hdr_beg(host) -i admin.

    # Yönlendirme Kuralları (Routing Rules)
    use_backend api_backend if is_api
    use_backend static_backend if is_static
    use_backend admin_backend if host_admin
    
    # Varsayılan Backend
    default_backend web_backend

backend web_backend
    server web01 192.168.1.30:80 check

backend api_backend
    server api01 192.168.1.40:8080 check

backend static_backend
    server storage01 192.168.1.50:80 check

backend admin_backend
    server admin01 192.168.1.60:80 check

Bu yapıyla birlikte, tek bir load balancer IP’si üzerinden gelen istekleri, url path’ine veya HTTP host header’ına göre ayıklayıp tamamen farklı sunucu gruplarına sıfır performans kaybıyla dağıtabiliyoruz.

Failover Testi: Fişi Çektiğimizde Ne Oluyor?

Kurulumumuzu tamamladık ve servislerimizi başlattık (sudo systemctl enable --now haproxy). Peki sistemimiz gerçekten yüksek erişilebilir mi? Bunu test etmenin en vahşi (ve keyifli) yolu canlı ortamda simülasyon yapmaktır.

Öncelikle master sunucumuzda (LB01) IP adresini izleyelim:

ip addr show eth0

Burada 192.168.1.100 IP’sini görmeliyiz. Şimdi master sunucu üzerinde HAProxy servisini durdurarak Keepalived’ın bu durumu fark etmesini sağlayalım:

sudo systemctl stop haproxy

Hemen ardından pasif sunucuya (LB02) geçip logları izleyelim:

tail -f /var/log/syslog | grep Keepalived

Loglarda şuna benzer bir satır görmelisiniz:

Keepalived_vrrp[1234]: VRRP_Instance(VI_1) Entering MASTER STATE

Ve ip addr show eth0 çalıştırdığınızda, VIP’nin saniyeden daha kısa bir sürede LB02’ye göç ettiğini göreceksiniz. Kullanıcılarınız, veritabanına veri yazmaya ve web sitenizde gezinmeye kesintisiz olarak devam edecektir. İşte gerçek HA kalitesi!

Sonuç ve Pro-Tip

HAProxy ve Keepalived ikilisi, karmaşık cloud mimarilerine veya pahalı donanımsal load balancer cihazlarına ihtiyaç duymadan, Linux’un gücüyle scale olabilen harika bir çözümdür.

Son bir prod tavsiyesi: Keepalived loglarını mutlaka merkezi bir izleme aracına (Elasticsearch, Loki vb.) yönlendirin ve VIP geçişlerinde (state transitions) ekibinize Slack veya Teams üzerinden alert atacak bir script tetikleyin (bunun için Keepalived’ın notify_master ve notify_backup direktiflerini araştırabilirsiniz). VIP’nin sessiz sedasız sürekli yer değiştirmesi, altyapınızda sinsi bir network dalgalanması olduğunun habercisi olabilir.

Category: Genel | LEAVE A COMMENT
Mayıs 22 2026

Zabbix + Alertmanager: PagerDuty ve Slack Entegrasyonu

Gece saat 03:00. Cep telefonunuz ardı ardına titriyor. Zabbix size “CPU usage high on prod-db-01” başlıklı tam 142 adet SMS göndermiş. Gözlerinizi oğuşturarak bilgisayarı açıyorsunuz ve durumun aslında sadece planlı bir veritabanı yedeğinden (backup job) ibaret olduğunu, diskin veya veritabanının çökmediğini görüyorsunuz. Bu esnada sinirden köpürürken kendinize şu soruyu soruyorsunuz: “Neden bu alarmları gruplayamadım? Neden nöbetçi arkadaşım yerine tüm ekip ayağa kalktı?”

İşte tam bu noktada, geleneksel izleme canavarımız zabbix ile modern bulut dünyasının alarm yönetim standardı olan alertmanager‘ı evlendirmenin vakti gelmiş demektir. Bu makalede, Zabbix’in topladığı metrik ve trigger’ları Alertmanager’a köprüleyecek, oradan da slack ve pagerduty entegrasyonları ile akıllı, gürültüsüz ve insan odaklı bir oncall yönetim yapısı kuracağız.

Neden Doğrudan Zabbix Değil de Alertmanager?

Zabbix, metrik toplama (polling), agent yönetimi ve esnek trigger tanımlama konularında harika bir araçtır. Ancak iş alarm yönetimine (alert routing, deduplication, inhibition ve silencing) geldiğinde Zabbix’in aksiyon (Action) arayüzü hantal kalır. GitOps felsefesine uygun değildir, sürüm kontrolü (version control) zordur ve karmaşık eskalasyon senaryolarında konfigürasyon cehennemine dönüşebilir.

Alertmanager ise Prometheus ekosisteminin kalbidir ancak sadece Prometheus ile sınırlı olmak zorunda değildir. Bize sunduğu avantajlar şunlardır:

  • Deduplication (Tekilleştirme): Aynı anda patlayan 50 benzer alarmı tek bir Slack mesajında birleştirir.
  • Inhibition (Bastırma): Eğer bir veri merkezi (datacenter) çöktüyse, o veri merkezinin içindeki 100 makine için “Node Down” alarmı göndermez; sadece “Datacenter Offline” alarmını geçirir, diğerlerini bastırır.
  • Dynamic Routing (Dinamik Yönlendirme): Alarma basılan etiketlere (labels) göre alarmı anında doğru ekibe (DBA, Network, Frontend) yönlendirir.

Adım 1: Zabbix Webhook ile Alertmanager API Köprüsü Kurmak

İlk yapmamız gereken iş, Zabbix’te bir trigger tetiklendiğinde bunu Alertmanager’ın /api/v2/alerts endpoint’ine gönderecek bir “Media Type” tanımlamaktır. Alertmanager, kendisine gönderilen JSON payload’unda belirli standartlar bekler.

Zabbix arayüzünde Administration -> Media Types sekmesine gidin ve “Create media type” butonuna tıklayın. Tipi Webhook olarak seçin ve aşağıdaki parametreleri ekleyin:

// Zabbix Webhook Script içeriği
try {
    var params = JSON.parse(value),
        req = new HttpRequest(),
        payload = [];

    if (typeof params.AlertmanagerURL === 'undefined') {
        throw 'AlertmanagerURL parametresi eksik.';
    }

    // Alertmanager API v2 formatı
    var alert = {
        "labels": {
            "alertname": params.AlertName,
            "severity": params.Severity,
            "instance": params.HostName,
            "service": params.Service || "infrastructure",
            "environment": params.Environment || "production"
        },
        "annotations": {
            "summary": params.TriggerDescription,
            "value": params.TriggerValue,
            "zabbix_url": params.ZabbixURL + "/tr_events.php?triggerid=" + params.TriggerID
        }
    };

    // Zabbix alarm durumuna göre durumu eşle (Eğer OK ise çözüldü olarak gönder)
    if (params.TriggerStatus === 'OK') {
        alert["endsAt"] = new Date().toISOString();
    } else {
        alert["startsAt"] = new Date().toISOString();
    }

    payload.push(alert);

    req.addHeader('Content-Type: application/json');
    var response = req.post(params.AlertmanagerURL + '/api/v2/alerts', JSON.stringify(payload));

    if (req.getStatus() !== 200 && req.getStatus() !== 201) {
        throw 'HTTP hatası: ' + req.getStatus() + '\nResponse: ' + response;
    }

    return 'OK';
} catch (error) {
    Zabbix.log(3, 'Alertmanager webhook hatası: ' + error);
    throw error;
}

Bu JS kodu, Zabbix trigger’ı tetiklendiğinde ya da çözüldüğünde (OK durumuna geçtiğinde) Alertmanager’a RFC3339 formatında zaman damgasıyla birlikte durumu iletir. Böylece Alertmanager alarmın çözüldüğünü (resolved) anlar ve Slack/PagerDuty üzerindeki açık alarmı otomatik olarak kapatır.

Adım 2: Alertmanager Konfigürasyonu (`alertmanager.yml`)

Şimdi Alertmanager tarafında bu alarmları nasıl karşılayacağımızı ve nereye yönlendireceğimizi tanımlayalım. production ortamlarında genellikle kritik alarmların PagerDuty’ye (ve dolayısıyla nöbetçi mühendisin telefonuna), uyarı seviyesindeki alarmların ise sadece Slack kanalına gitmesini isteriz.

global:
  resolve_timeout: 5m

route:
  group_by: ['alertname', 'instance', 'environment']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
  receiver: 'slack-default'
  routes:
    # Kritik üretim alarmları hem Slack'e hem PagerDuty'ye gitsin
    - match:
        severity: 'disaster'
        environment: 'production'
      receiver: 'pagerduty-critical'
      continue: true
    
    # Tüm üretim alarmları Slack kanalına düşsün
    - match:
        environment: 'production'
      receiver: 'slack-production'

receivers:
- name: 'slack-default'
  slack_configs:
  - api_url: 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX'
    channel: '#ops-alerts-test'
    send_resolved: true
    text: "Alarm: {{ .CommonAnnotations.summary }}\nSeverity: {{ .CommonLabels.severity }}\nHost: {{ .CommonLabels.instance }}"

- name: 'slack-production'
  slack_configs:
  - api_url: 'https://hooks.slack.com/services/T00000000/B00000000/YYYYYYYYYYYYYYYYYYYYYYYY'
    channel: '#prod-alerts'
    send_resolved: true
    title: "[{{ .Status | toUpper }}] {{ .CommonLabels.alertname }}"
    text: "Host: {{ .CommonLabels.instance }}\nDetay: {{ .CommonAnnotations.summary }}\nZabbix Linki: {{ .CommonAnnotations.zabbix_url }}"

- name: 'pagerduty-critical'
  pagerduty_configs:
  - service_key: 'YOUR_PAGERDUTY_INTEGRATION_KEY_HERE'
    severity: 'critical'
    send_resolved: true
    client: 'Alertmanager'
    client_url: 'https://alertmanager.kertenkerem.net'
    description: "{{ .CommonAnnotations.summary }} - Host: {{ .CommonLabels.instance }}"

Adım 3: PagerDuty Üzerinde Akıllı On-Call ve Eskalasyon Politikaları

Alertmanager entegrasyonunu tamamladıktan sonra topu pagerduty tarafına atıyoruz. PagerDuty üzerinde bir servis (Service) oluşturup entegrasyon tipini “Prometheus/Alertmanager” olarak seçtiğinizde size yukarıdaki YAML dosyasında kullandığımız service_key (Integration Key) değerini verecektir.

Ancak iş sadece entegrasyonla bitmiyor. Gerçek bir oncall kültüründe şu üç yapıyı kurmanız gerekir:

1. Schedules (Nöbet Takvimleri)

Haftalık rotasyonlar tanımlayın. Örneğin, her Salı günü saat 09:00’da nöbet bir sonraki mühendise devretsin. PagerDuty üzerinde Primary ve Secondary (yedek) olmak üzere iki farklı takvim oluşturmak hayat kurtarır. Eğer Primary nöbetçisi o an ulaşılamaz durumdaysa (örneğin uçaktaysa), sistem otomatik olarak yedek nöbetçiyi arar.

2. Escalation Policies (Eskalasyon Politikaları)

Alarmların sahipsiz kalmaması için eskalasyon zinciri şarttır. Örnek bir kurumsal politika şu şekilde olmalıdır:

  • Adım 1: Alarm tetiklendiğinde o anki nöbetçiyi (Primary) ara ve SMS gönder. (0. dakika)
  • Adım 2: Eğer 10 dakika içinde “Acknowledge” (onay) gelmezse, yedek nöbetçiyi (Secondary) ara. (10. dakika)
  • Adım 3: Eğer hala ses çıkmıyorsa, tüm DevOps ekibine push notification at ve takım liderini devreye sok. (20. dakika)

3. Slack Entegrasyonu ve ChatOps

PagerDuty Slack uygulamasını kurarak, Slack kanalı üzerinden tek tıkla alarmı üstlenebilir (Acknowledge) veya çözebilirsiniz (Resolve). Bu, gece yarısı telefondan PagerDuty uygulamasına girmeye çalışırken harcayacağınız 30 saniyeyi size geri kazandırır.

Alert Fatigue (Alarm Yorgunluğu) ile Savaşmak

Sistemi kurduk ancak her gün 500 defa çalan bir pager sistemi, bir süre sonra mühendislerin uyarıları görmezden gelmesine (alert fatigue) sebep olur. Bunu engellemek için şu taktikleri uygulayın:

  • Sadece aksiyon alınabilir alarmları PagerDuty’ye gönderin: “Disk doluluğu %81 oldu” bir PagerDuty alarmı değildir, sadece Slack’e gitmelidir. Ancak “Disk doluluğu %95 ve 10 dakika içinde tamamen dolacak” alarmı nöbetçiyi yataktan kaldırmalıdır.
  • Inhibit Rules kullanın: Switch çöktüğünde arkasındaki 30 sunucu için tek tek “ping down” alarmı almamak için Alertmanager inhibit kurallarını tanımlayın.
  • Susturma (Silences): Planlı bakım çalışmalarından önce Alertmanager veya PagerDuty arayüzünden ilgili servisleri mutlaka susturun (Silence).

Özet

Zabbix’in köklü izleme yeteneklerini Alertmanager’ın modern yönlendirme mimarisiyle birleştirmek, altyapı yönetiminde adeta çağ atlatır. Bu sayede hem production ortamınızdaki anomalileri saniyeler içinde yakalarsınız, hem de ekibinizin akıl sağlığını gereksiz gürültülü alarmlardan korumuş olursunuz.

Bir sonraki yazımızda Alertmanager üzerinde gelişmiş inhibit_rules yazımını inceleyeceğiz. O zamana kadar, alarmınız az, uykunuz bol olsun!

Category: Genel | LEAVE A COMMENT
Mayıs 21 2026

Perplexity ile Araştırma Yapmak: Google’ı Nasıl Geçiyor?

Google’da arama yapıp ilk üç sayfanın reklam, sonraki beş sayfanın ise içi boş SEO çöplüğü çıktığı o sinir bozucu anları hepimiz yaşıyoruz. İşte tam bu noktada, geleneksel arama motorlarının tahtını sallayan perplexity ve onun başını çektiği yeni nesil ai search dalgası imdadımıza yetişiyor. Klasik arama motorları bize sadece web sitelerinin adreslerini verirken, modern llm tabanlı bu sistemler doğrudan sorumuzun cevabını sentezleyip sunuyor. Peki, üretken yapay zeka dünyasının en popüler tools listelerinde zirveye oynayan bu araçla gerçekten derinlemesine bir araştırma yapmak mümkün mü? Yoksa bu da sadece geçici bir heves mi? Gelin, lafı uzatmadan doğrudan deneyimlerimize ve test sonuçlarımıza bakalım.

Perplexity Nedir ve Neden Farklı?

Klasik yapay zeka sohbet robotları (ChatGPT veya Claude gibi), eğitildikleri veri kümesine sıkışıp kalırlar. Bilgileri eski olabilir veya bilmedikleri konularda “halüsinasyon” görerek bize tamamen uydurma bilgiler sunabilirler. Perplexity ise bu sorunu temelden çözüyor. O sadece bir dil modeli değil; interneti aktif olarak tarayan, kaynakları okuyan ve size sunduğu her cümlenin yanına referans linki bırakan akıllı bir arama motoru.

Kaynak Gösterme Mekanizması: Bilgi Nereden Geliyor?

Perplexity’nin en büyük gücü, şeffaflığında yatıyor. Yazdığı her cümlenin sonuna küçük rakamlar (1, 2, 3…) yerleştiriyor. Bu rakamlara tıkladığınızda, bilginin hangi web sitesinden, hangi makaleden alındığını anında görebiliyorsunuz. “Neden böyle?” sorusunun cevabı basit: Yapay zekaya güvenmek zordur ama kaynağı doğrulamak kolaydır. Perplexity size “bana güven” demiyor, “bak, buradaki verilere dayanarak bunu söylüyorum” diyor.

[Görsel: Perplexity arayüzünde bir arama sonucu ve metin içindeki kaynak gösterim numaralarının yakın plan görünümü]

Gerçek Dünya Testleri: Perplexity İş Başında

Sözü fazla uzatmayalım ve bu aracı gerçek hayatta en çok zorlandığımız iki farklı senaryoda test edelim. Promp’larımızı hazırladık ve sonuçları raporluyoruz.

Senaryo 1: Akademik Araştırma ve Literatür Taraması

Test etmek istediğimiz konu şu oldu: “Grafen bazlı bataryaların elektrikli araçlarda (EV) kullanılmasının önündeki temel teknik engeller nelerdir?”

Bu soruyu Google’a sorduğumuzda karşımıza sponsorlu siteler, popüler teknoloji bloglarının yüzeysel yazıları ve forum tartışmaları çıkıyor. Akademik bir makaleye ulaşmak için Google Scholar’da saatler harcamamız gerekiyor.

Aynı soruyu Perplexity’nin sol alt köşesindeki “Focus” (Odak) menüsünden “Academic” modunu seçerek sorduk. Sonuç şaşırtıcı derecede temizdi:

  • Doğrudan IEEE, ScienceDirect ve arXiv üzerindeki güncel makaleleri taradı.
  • “Isıl yönetim sorunları”, “üretim maliyetleri” ve “anot stabilitesi” gibi teknik engelleri başlıklar halinde özetledi.
  • Her başlığın altına, ilgili akademik yayının linkini ve yazar isimlerini iliştirdi.

[Görsel: Perplexity’nin “Academic Focus” modu aktifken yaptığı teknik literatür taraması ekran görüntüsü]

Senaryo 2: Sıcak Gelişmeler ve Güncel Haber Takibi

Yapay zeka dünyası çok hızlı değişiyor. İkinci test sorumuz: “Son 48 saat içinde OpenAI cephesinde yaşanan en önemli yönetimsel gelişmeler nelerdir?”

Bildiğiniz gibi standart LLM modelleri güncel internet erişimi olmadan bu soruya cevap veremez. Perplexity ise “Writing” yerine “All” (Genel Arama) modunu kullanarak X (Twitter), TechCrunch ve Reuters gibi platformları anında taradı. Gelişmeleri kronolojik bir sırayla, saat saat önümüze koydu. Birbirinden farklı haber kaynaklarındaki çelişkili bilgileri bile “Bazı kaynaklar X derken, diğerleri Y olduğunu belirtiyor” şeklinde analiz ederek sundu.

Pro vs. Ücretsiz Sürüm: Kasanın Durumu Nedir?

Perplexity’yi tamamen ücretsiz olarak kullanabilirsiniz. Ancak bir de aylık 20 dolar fiyat etiketine sahip olan “Pro” sürümü bulunuyor. Peki bu parayı ödemeye gerçekten gerek var mı?

Ücretsiz sürüm, hızlı günlük aramalar ve basit sorular için fazlasıyla yeterli. Ancak iş profesyonel araştırmaya, kod yazmaya veya büyük PDF dosyalarını analiz etmeye geldiğinde Pro sürümünün sunduğu avantajlar öne çıkıyor:

  • Model Seçimi: Pro üyeler, aramayı arkada hangi yapay zeka modelinin işleyeceğini seçebiliyor. Claude 3.5 Sonnet, GPT-4o veya Perplexity’nin kendi optimize edilmiş modelleri arasında geçiş yapabiliyorsunuz. Özellikle derin analizlerde Claude 3.5 Sonnet kullanmak tam bir cankurtaran.
  • Dosya Yükleme: Pro sürümde 100 sayfalık bir finansal raporu veya PDF kitabını sisteme yükleyip, “Bu raporun 50. sayfasındaki tabloya göre şirketin borç oranı nedir?” gibi spesifik aramaları internet verileriyle birleştirerek yapabiliyorsunuz.

[Görsel: Perplexity Pro ayarlar panelinde kullanıcıya sunulan GPT-4o, Claude 3.5 Sonnet ve Llama 3 model seçenekleri]

Artılar ve Eksiler Tablosu

Her aracın olduğu gibi Perplexity’nin de zayıf ve güçlü yanları var. Yaptığımız testler sonucunda ortaya çıkan tablo şu şekilde:

Özellik Artıları (+) Eksileri (-)
Kaynak Doğruluğu Her iddiaya doğrudan tıklanabilir linkler veriyor, bilgi kirliliğini önlüyor. Bazen çok popüler ama güvenilmez blogları da kaynak olarak seçebiliyor.
Kullanım Kolaylığı Reklamsız, sade ve doğrudan sonuca odaklı arayüz. Geleneksel “görsel arama” veya “alışveriş” kategorilerinde Google kadar pratik değil.
Esneklik (Pro) Claude 3.5 Sonnet ve GPT-4o gibi en güçlü modelleri tek bir abonelikte sunuyor. Aylık 20 dolarlık ücret, sadece arada sırada arama yapanlar için yüksek kalabilir.
Hız Saniyeler içinde onlarca siteyi tarayıp özet çıkarıyor. Çok karmaşık sorgularda arama süresi bazen 10-15 saniyeyi bulabiliyor.

Fiyatlandırma ve Ücretsiz Alternatifler

Eğer bütçeniz kısıtlıysa veya “Ben bir aramaya ayda 20 dolar vermem” diyorsanız, piyasada kullanabileceğiniz harika ücretsiz veya daha uygun fiyatlı alternatifler mevcut:

  • Phind: Özellikle yazılımcılar ve geliştiriciler için harika bir ücretsiz AI search aracı. Kod bloklarını ve teknik dökümantasyonları çok iyi tarıyor.
  • Microsoft Copilot: Microsoft Edge tarayıcısıyla entegre gelen Copilot, GPT-4 altyapısını ücretsiz olarak internet aramalarıyla birleştirerek sunuyor.
  • Consensus: Tamamen bilimsel ve akademik makaleler üzerine odaklanmış, kanıta dayalı bir yapay zeka arama motoru.

Sonuç: Google’ı Tamamen Hayatımızdan Çıkarıyor muyuz?

Dürüst olalım: Yakın bir gelecekte mahallenizdeki en iyi pizzacıyı bulmak, uçak bileti fiyatlarını karşılaştırmak veya hızlıca bir spor ayakkabı satın almak için yine Google’ı kullanacaksınız. Google, bu tarz “operasyonel” işlerde hala çok pratik.

Ancak konu derinlemesine bir konuyu öğrenmek, makale yazmak, karmaşık teknik bir problemi çözmek veya bir sektör raporunu analiz etmek olduğunda, Perplexity klasik aramayı çoktan tarihe gömmüş durumda. Bilgiyi aramakla vakit kaybetmek istemiyor, doğrudan öğrenmeye başlamak istiyorsanız Perplexity’ye mutlaka bir şans vermelisiniz.

Category: Genel | LEAVE A COMMENT
Mayıs 14 2026

Cursor vs GitHub Copilot: Hangisi Gerçekten İşe Yarıyor?

Yazılım dünyasında son yıllarda büyük bir devrim yaşanıyor. Artık kod yazarken yalnız değiliz; yanımızda sürekli fısıldayan, eksiklerimizi tamamlayan bir yapay zeka var. Bu alanda en çok öne çıkan iki developer tools devi ise şüphesiz emektar GitHub Copilot ve VS Code tabanlı yükselen yıldız Cursor. Peki, günlük kodlama pratiklerimizde bu ai asistanlarından hangisi gerçekten işe yarıyor? Sözü hiç dolandırmadan, pazarlama vaatlerini bir kenara bırakıp her iki aracı da gerçek bir projede test ettik ve sonuçları masaya yatırdık.

Nedir Bu Araçlar? (Kısa Bir Jargon Ayıklaması)

Karşılaştırmaya geçmeden önce, kafaları karıştırmamak için ufak bir sözlük yapalım. İki aracın da temel amacı aynı gibi görünse de felsefeleri oldukça farklı:

  • GitHub Copilot: VS Code, JetBrains gibi popüler editörlerin içine bir eklenti (extension) olarak kurulur. Siz kod yazarken satır içi (inline) öneriler yapar.
  • Cursor: Doğrudan VS Code tabanlı, kendi başına ayrı bir kod editörüdür. İçinde yapay zeka entegrasyonu derinlemesine (deeply integrated) yer alır. Yani VS Code’un aynısıdır ama yapay zeka için baştan tasarlanmıştır.

[Görsel: VS Code ve Cursor yan yana arayüz karşılaştırması]

Gerçek Bir Senaryo: Express.js ve React Projesi

Laf kalabalığı yapmayı sevmeyiz. Bu yüzden iki asistanı da orta ölçekli bir Full-Stack projede test ettik. Amacımız basit bir kullanıcı kayıt formu oluşturmak, şifreleri hash’lemek ve veritabanına kaydetmekti.

1. Raunt: Hız ve Otomatik Tamamlama (Autocomplete)

Kod yazarken ritmi kaybetmemek çok önemlidir. GitHub Copilot bu konuda tam bir canavar. Siz daha fonksiyonun adını yazarken (örneğin const hashPassword =) ne yapmak istediğinizi anlayıp gri renkle kodu önünüze seriyor. Tab tuşuna bastığınız anda kod orada.

Cursor ise kendi geliştirdiği “Copilot++” (yeni adıyla Cursor Tab) özelliğini kullanıyor. Sadece bir sonraki kelimeyi değil, bir sonraki satırı ve yapacağınız muhtemel düzenlemeyi de tahmin ediyor. Hız konusunda başa başlar, ancak Cursor’ın düzenleme önerileri biraz daha “akıllıca” hissettiriyor.

2. Raunt: Bağlam (Context) ve Projeyi Anlama Yeteneği

İşte burası dananın kuyruğunun koptuğu yer. Bir AI asistanının sadece o an açık olan dosyayı değil, tüm projeyi anlamasını isteriz. Buna teknik olarak context window (bağlam penceresi) deniyor.

GitHub Copilot, @workspace komutu ile tüm projeyi tarayabiliyor ancak bazen büyük projelerde kafası karışabiliyor veya güncel olmayan dosyalardan referans verebiliyor.

Cursor ise bu işi bambaşka bir seviyeye taşımış. Editörün içinde yer alan chat kısmına @database.js yazarak doğrudan spesifik bir dosyayı referans gösterebiliyorsunuz. Hatta tüm klasörü indeksleyip (indexing) projede yaptığınız bir değişikliğin diğer dosyaları nasıl etkileyeceğini hatasız analiz ediyor. Örneğin, veritabanı şemasını değiştirdiğimizde Cursor, tüm API uçlarını tek seferde güncelleyebildi.

[Görsel: Cursor editöründe @ symbol yardımıyla dosya referansı gösterme]

# Cursor içinde terminal komutlarını bile AI'a yazdırabiliyoruz:
# "Bana port 3000'i kullanan süreçleri bul ve sonlandır" dediğimizde:
lsof -i :3000 | awk '{print $2}' | tail -n +2 | xargs kill -9

Artılar ve Eksiler Tablosu

Her iki aracın da güçlü ve zayıf yönlerini şu şekilde özetleyebiliriz:

Özellik GitHub Copilot Cursor AI
Kurulum Çok kolay (Herhangi bir editöre eklenti olarak) Yeni bir editör indirmek gerekiyor (VS Code klonu)
Kod Tamamlama Hızı Mükemmel (Anında tepki) Çok iyi (Hafif gecikmeler olabilir)
Bağlam (Context) Orta (Bazen dosyaları kaçırıyor) Harika (Tüm projeyi indeksleme yeteneği)
Kullanılan Modeller OpenAI modelleri ve Codex Claude 3.5 Sonnet, GPT-4o ve özel Cursor modelleri
Gizlilik (Privacy) Kurumsal hesaplarda veri güvenliği yüksek “Privacy Mode” açıkken verileri sunucuda saklamıyor

Fiyatlandırma ve Ücretsiz Alternatifler

Geldik en can alıcı noktaya: Cüzdanımız bu işe ne diyor?

  • GitHub Copilot Fiyatı: Bireysel kullanım için aylık 10$ veya yıllık 100$. Öğrenciler ve popüler açık kaynaklı projelerin yöneticileri için tamamen ücretsiz.
  • Cursor Fiyatı: Aylık 50 “fast” (hızlı) premium sorgu içeren ücretsiz (Hobby) planı var. Pro planı ise aylık 20$. Ancak ücretsiz planda bile sınırsız yavaş sorgu hakkı sunması büyük bir artı.

Para Vermek İstemeyenler İçin Ücretsiz Alternatifler

Eğer bütçeniz kısıtlıysa veya bu araçlara hemen para yatırmak istemiyorsanız şu alternatifleri değerlendirebilirsiniz:

  1. VS Code + Codeium: Tamamen ücretsiz bir otomatik tamamlama eklentisi. Copilot kadar olmasa da oldukça başarılı.
  2. Windsurf: Son zamanlarda adını sıkça duyuran, Cursor benzeri bir başka yeni nesil AI IDE’si.
  3. Double.bot: VS Code için kullanımı kolay ve ücretsiz deneme süresi oldukça cömert bir alternatif.

[Görsel: GitHub Copilot’un VS Code ayarlarındaki aktiflik göstergesi]

Gizlilik Meselesi: Kodlarımız Güvende mi?

Bir yazılımcı olarak yazdığımız tescilli kodların bir yapay zekayı eğitmek için kullanılmasını istemeyiz.

GitHub Copilot, ayarlardan “kodlarımı eğitim için kullanma” seçeneğini kapatmanıza izin veriyor. Cursor tarafında ise ayarlardan Privacy Mode‘u aktif ettiğinizde, yazdığınız hiçbir kod sunucularda depolanmıyor veya modellerin eğitimi için kullanılmıyor. Kurumsal projelerde çalışıyorsanız, bu ayarları mutlaka kontrol etmenizi öneririz.

Sonuç: Hangisini Seçmeli?

Yaptığımız testler sonucunda vardığımız karar oldukça net:

Eğer halihazırda kurulu bir VS Code düzeniniz varsa, editör değiştirmek istemiyorsanız ve sadece kod yazarken hız kazanmak istiyorsanız GitHub Copilot sizin için en mantıklı ve stabil seçenek olmaya devam ediyor.

Ancak, “Ben yapay zekayı sadece kod tamamlasın diye değil, benimle birlikte projeyi geliştirsin, hata ayıklasın (debug), büyük refaktör işlemlerini tek komutla halletsin” diye istiyorsanız, Cursor şu an piyasadaki en gelişmiş ve yetenekli araç konumunda. Aylık 20$’lık fiyatını sunduğu zaman tasarrufuyla fazlasıyla hak ediyor.

Category: Genel | LEAVE A COMMENT
Mayıs 8 2026

Pomodoro Değil: Derin Çalışma İçin Cal Newport Yöntemi

Gün boyu durmaksızın çalışıyor ama günün sonunda hiçbir şeyi tam olarak bitirememiş gibi mi hissediyorsunuz? Bildirimler, e-postalar ve bitmek bilmeyen toplantılar arasında kaybolurken, geleneksel yöntemler de yetersiz kalabiliyor. İşte tam bu noktada, modern dünyada kaybolan zihinsel gücümüzü geri kazanmak için harika bir life hack olarak karşımıza çıkan deep work (derin çalışma) kavramı devreye giriyor. Cal Newport’un popülerleştirdiği bu yöntem, sadece bir zaman yönetimi aracı değil; aynı zamanda beynimizin odak kasını geliştirmek için tasarlanmış, zihinsel sağlığımızı koruyan bir antrenman metodudur.

Neden Pomodoro Her Zaman Yetmez? (Zihinsel Isınma Süresi)

Birçoğumuz 25 dakika çalışıp 5 dakika dinlenmeyi öngören Pomodoro tekniğini denemiştir. Ancak karmaşık, derin düşünme gerektiren yaratıcı veya teknik işlerde bu süre henüz “ısınmamıza” bile yetmez. Beynimiz karmaşık bir probleme odaklanırken adeta bir motor gibi yavaş yavaş ısınır. Araştırmalar gösteriyor ki, bölünmeden bir konuya odaklanmak ve gerçek verimliliğe ulaşmak için beynin en az 20-30 dakikalık kesintisiz bir süreye ihtiyacı vardır.

Burada devreye giren en büyük düşmanımız ise “dikkat kalıntısı” (attention residue). Yapılan bilimsel araştırmalar, odağımızı bir işten diğerine (örneğin gelen bir mesaja bakmak için) her kaydırdığımızda, dikkatimizin bir kısmının önceki işte kaldığını kanıtlıyor. Sonuç mu? Sürekli bölünen, gün sonunda ise yorgun ama hiçbir şey üretememiş bir zihin.

Deep Work Nedir ve Beynimize Ne Yapar?

Deep work, dikkatinizin dağılmadığı bir ortamda, bilişsel yeteneklerinizin sınırlarını zorlayarak gerçekleştirdiğiniz profesyonel çalışma faaliyetleridir. Bu süreç sadece daha fazla iş yapmanızı sağlamaz, aynı zamanda beyninizin biyolojik yapısını da korur.

Nörobilimsel araştırmalar gösteriyor ki, bir konuya yüksek odaklanma ile yoğunlaştığımızda, beynimizdeki ilgili sinir yollarının etrafında miyelin adı verilen koruyucu bir kılıf oluşur. Miyelin tabakası kalınlaştıkça, sinirsel sinyaller daha hızlı iletilir ve o konuda daha hızlı uzmanlaşırız. Yani derin çalışma yapmak, beyninizi fiziksel olarak daha akıllı ve hızlı hale getiren bir zihinsel spordur.

Derin Çalışmayı Hayatınıza Entegre Etmek İçin 4 Adım

Cal Newport’un stratejilerini hayatımıza uygulamak, her gün saatlerce kendimizi odaya kilitlemek anlamına gelmez. İşte eyleme geçirilebilir pratik adımlar:

1. Kendi Ritüelinizi Yaratın

Derin çalışmaya başlamadan önce beyninize “Şimdi odaklanma zamanı” sinyali gönderecek küçük ritüeller belirleyin. Bu, masanızı temizlemek, belirli bir çalma listesini açmak veya kendinize bir fincan kahve yapmak olabilir. Beyin bu rutinleri gördüğünde otomatik olarak vites yükseltmeye başlar.

2. Can Sıkıntısını Kucaklayın

Modern insan olarak en büyük sorunumuz, en ufak bir boşlukta (kuyrukta beklerken, asansörde) telefona sarılmak. Beynimiz sürekli dopamin bombardımanına alışırsa, derin çalışmanın gerektirdiği “sakin ve sıkıcı” ilk 15 dakikaya tahammül edemez. Gün içinde bazen sadece durun ve hiçbir şey yapmayın. Bırakın zihniniz can sıkıntısıyla baş etmeyi öğrensin.

3. Dijital Minimalizm Uygulayın

Çalışırken telefonunuzu sadece sessize almak yetmez, odanın dışına çıkarın. Görüş alanınızda duran bir telefon, kapalı olsa bile beynimizin bir kısmını meşgul etmeye (onu kontrol etme dürtüsünü bastırmaya çalışırken zihinsel enerji harcamaya) devam eder.

4. Time-Blocking (Zaman Bloklama) Yöntemini Kullanın

Günlük planınızı yaparken sadece yapılacaklar listesi hazırlamayın. Hangi saatte hangi işi yapacağınızı takviminize bloklar halinde işleyin. Aşağıda basit bir zaman bloklama şablonu görebilirsiniz:


# Günlük Odak ve Çalışma Blokları
09:00 - 11:30 | [Derin Çalışma] - Telefonsuz, İnternetsiz Odaklanma
11:30 - 12:00 | [Sığ Çalışma] - E-postalar ve Slack Mesajları
12:00 - 13:00 | [Öğle Arası] - Ekran Yok, Zihinsel Dinlenme
13:00 - 15:00 | [Derin Çalışma] - Zor Projeler
15:00 - 17:00 | [Sığ Çalışma] - Toplantılar ve Rutin İşler
17:00 - 17:15 | [Kapatma Ritüeli] - Günü Bitir, Kafayı Boşalt

Önemli Uyarı: Deep work, yüksek düzeyde zihinsel enerji gerektirir. Günde 4 saatten fazla tam odaklanma gerçekleştirmek insan limitlerinin üzerindedir. Eğer kendinizi kronik olarak yorgun, tükenmiş hissediyorsanız veya odaklanma sorununuz günlük hayatınızı sekteye uğratacak boyuttaysa, bu durum kronik stres veya tıbbi bir durumun belirtisi olabilir. Lütfen bir doktora veya uzmana danışmayı ihmal etmeyin.

Sonuç: Kaliteli Üretim, Huzurlu Zihin

Günün sonunda deep work, sadece daha çok iş üretmenizi sağlayan soğuk bir verimlilik taktiği değildir. Aksine, işinizi bitirip bilgisayarı kapattığınızda, aklınızın arkasında yarım kalmış işlerin dönmediği, sevdiklerinize ve kendinize gerçekten vakit ayırabildiğiniz huzurlu bir yaşamın anahtarıdır. Bugün kendinize sadece 60 dakikalık kesintisiz bir blok ayırarak başlayın. Beyninizin bu zihinsel antrenmana nasıl olumlu yanıt verdiğini görünce şaşıracaksınız.

Category: Genel | LEAVE A COMMENT
Nisan 30 2026

Japonya İlk Kez: Tokyo’dan Kyoto’ya 10 Günlük Rehber

Hayatınızda bir kez bile olsa asia (Asya) kıtasının o kendine has, mistik ve ultramodern havasını solumak istiyorsanız, rotayı çevireceğiniz ilk yer kesinlikle Japonya olmalı. Bu büyüleyici ülkeye adım attığınız an, zaman algınızın nasıl büküldüğünü kendi gözlerinizle göreceksiniz. Özellikle ilk kez gidenler için klasik ama asla eskimeyen Tokyo ve Kyoto hattı, bir tarafta gökdelenlerin neon ışıkları altında kaybolurken diğer tarafta tapınakların sessizliğinde kendinizi bulacağınız benzersiz bir seyahat deneyimi sunuyor. Peki ama bu pahalı rüyayı bütçeyi sarsmadan, bir yerel gibi yaşamak nasıl mümkün? Gelin, sokak aralarından bütçe dostu tüyolara uzanan 10 günlük maceramıza başlayalım.

Kültür Şokunu Yumuşatmak: Tokyo Sokaklarında İlk Günler

Narita veya Haneda Havalimanı’na indiğinizde sizi karşılayan o steril, sessiz ve düzenli hava ilk başta biraz ürkütücü gelebilir. Telaşlanmayın, burası dünyanın en güvenli ve yabancı dostu coğrafyalarından biri. Tokyo’da ilk üç gününüzü şehrin farklı karakterdeki mahallelerini keşfetmeye ayırın. Turistik rehberlerin ilk sıraya koyduğu Shibuya Crossing’in kalabalığına karışmak elbette eğlenceli, ancak gerçek Tokyo’yu hissetmek için yönünüzü Koenji veya Yanaka bölgelerine çevirmelisiniz. Yanaka, İkinci Dünya Savaşı’ndan zarar görmeden kurtulmuş eski ahşap evleri ve sokak kedileriyle size adeta 1950’lerin Japonya’sını yaşatacak.

Şehir içi ulaşım ilk başta bir labirent gibi görünebilir. JR hatları, Tokyo Metro ve Toei Subway derken kendinizi kaybolmuş hissedebilirsiniz. Ancak teknolojinin nimetlerinden faydalanarak bu karmaşayı kolayca çözebilirsiniz. Telefonunuza indireceğiniz dijital ulaşım kartları sayesinde turnikelerden saniyeler içinde geçebilirsiniz.

Ulaşım kartınızı (Suica veya Pasmo) telefonunuzun cüzdan uygulamasına ekleyerek fiziksel kart depozitosundan kurtulabilirsiniz. Ayrıca anlık döviz çevrimleri ve bütçe kontrolü için terminal meraklıları terminal üzerinden şu basit komutla güncel yen kurunu kontrol edebilir:

curl -s "https://open.er-api.com/v6/latest/USD" | jq '.rates.JPY'

Tokyo’da konaklama bütçesini düşürmenin en akıllıca yolu, Shinjuku gibi merkezi istasyonların hemen bir durak uzağındaki “business” otellerini tercih etmektir. Sotetsu Fresa Inn veya APA Hotel gibi zincirler, metrekare olarak küçük ama fonksiyonellik olarak kusursuz odaları gecelik ortalama 70 ila 90 Dolar arasında sunar. Bu oteller temizlik standartlarıyla lüks segmenti aratmaz.

JR Pass Hesabı: Shinkansen Gerçekleri

Japonya seyahatlerinin bir dönem vazgeçilmezi olan JR Pass, yapılan büyük zamlardan sonra artık her rota için mantıklı değil. Eğer sadece Tokyo ve Kyoto arasında gidip gelecekseniz, tüm ülkeyi kapsayan o pahalı kartı almanıza hiç gerek yok. Tokyo’dan Kyoto’ya Shinkansen (hızlı tren) ile gitmek yaklaşık iki saat on beş dakika sürüyor. Nozomi sınıfı en hızlı tren için tek yön bilet fiyatı yaklaşık 14.000 Yen, yani güncel kurla 90 Dolar civarında. Gidiş-dönüş biletinizi istasyondaki yeşil bilet makinelerinden veya resmi web sitesinden kolayca alabilirsiniz.

Neden Shinkansen derseniz, bu sadece bir ulaşım aracı değil, aynı zamanda Japon kültürünün bir parçasıdır. Trene binmeden önce istasyondan alacağınız “Ekiben” adı verilen yerel bento kutularıyla yolculuğu bir lezzet şölenine dönüştürebilirsiniz. Saatte 320 kilometre hızla giderken Fuji Dağı’nı izlemek, yolculuğun en unutulmaz anlarından biri olacak.

Kyoto: Zamanın Durduğu Eski Başkent

Kyoto’ya vardığınızda modern dünyanın gürültüsü aniden bıçak gibi kesilir. Ahşap Machiya evleri, dar sokaklarda süzülen geyşalar ve bambu ormanları sizi karşılar. Ancak burası da aşırı turizmden nasibini almış durumda. Bu yüzden en önemli tüyo, biyolojik saatinizi biraz erkene ayarlamaktır. Fushimi Inari Tapınağı’nın o meşhur binlerce kırmızı kapısı (Torii) arasında tek başınıza yürümek istiyorsanız, sabah saat sabah 06.00’da orada olmalısınız. Saat 09.00 olduğunda burası bir turist panayırına dönüşüyor ve mistik havadan eser kalmıyor.

Kyoto’da konaklama için geleneksel bir Ryokan (Japon hanı) deneyimi yaşamak isteyebilirsiniz. Ancak bütçeniz kısıtlıysa, geleneksel mimariye sahip hostel-guesthouselar harika birer alternatiftir. Gecelik 30-40 Dolar bandında, tatami minderleri üzerinde uyuyabileceğiniz ve yerel gezginlerle sosyalleşebileceğiniz son derece temiz mekanlar bulabilirsiniz.

Ucuz ve Gurme: Japonya’da Ne Yenir?

Japonya’da aç kalma korkusu, buraya ayak bastığınız ilk saatte yok olur. Üstelik kaliteli yemek için servet ödemenize gerek yok. Konbini adı verilen ve 7-Eleven, Lawson, FamilyMart gibi markalardan oluşan 24 saat açık marketler, ülkenin gizli gastronomi mabetleridir. Sabahları taze yapılmış Onigiri (yosuna sarılı pirinç topları) ve sıcak bir kahve ile sadece 3 Dolar gibi komik bir rakama kahvaltı edebilirsiniz. Lawson’ın efsanevi çıtır tavuğu Karaage-kun ise her bütçe dostu gezginin favorisidir.

Akşam yemekleri için ise yönünüzü maaşlı çalışanların (salaryman) iş çıkışı uğradığı sokak arası lokantalarına çevirin. Yoshinoya veya Matsuya gibi zincirlerde, üzerine ince dilimlenmiş et konmuş sıcak pirinç kaseleri (Gyudon) yaklaşık 5 Dolar civarındadır. Unutmayın, en lezzetli ramen dükkanları genellikle kapısında sadece birkaç kişinin beklediği, siparişin içerideki eski bir bilet makinesinden verildiği o küçük, salaş dükkanlardır.

Japonya’da bahşiş kültürü kesinlikle yoktur. Masada bırakacağınız ekstra para bir unutkanlık olarak algılanır ve garson arkasından size parayı geri vermek için koşabilir. Hizmet kalitesi zaten fiyata dahildir ve her zaman en üst seviyededir.

Bu 10 günlük yolculuğun sonunda, sadece yeni yerler görmüş olmayacaksınız. Zamanın ritmine saygı duymayı, sessizliğin içindeki huzuru ve detayların hayatı nasıl güzelleştirdiğini öğrenmiş olarak evinize döneceksiniz. Tokyo’nun çılgın ritmi ile Kyoto’nun dinginliği arasındaki o ince çizgide yürümek, hayatınız boyunca unutamayacağınız bir dönüşüm hikayesine dönüşecek.

Category: Genel | LEAVE A COMMENT
Nisan 16 2026

İstanbul’u Yerli Gibi Gezmek: Turistlerin Bilmediği Keşif Rotaları

Hayatımda kaç kez İstanbul sokaklarında kaybolduğumu hatırlamıyorum. Her köşesinde yeni bir hikaye barındıran bu şehirde, gerçek bir keşif yapmak için turistik broşürleri bir kenara bırakmak gerekiyor. Çünkü gerçek bir İstanbul deneyimi, Sultanahmet kuyruklarında veya İstiklal Caddesi’nin kalabalığında değil, sabahın ilk ışıklarıyla uyanan kadim semtlerin ara sokaklarında gizlidir. Bu yazıda, Türkiye genelinde görebileceğiniz en büyüleyici metropolü bütçenizi yormadan, yerli bir gezgin gibi yaşamanın sırlarını ve benzersiz bir gezi rotasını paylaşacağım. Hazırsanız, klişelerden uzak bir seyahat macerasına başlıyoruz.

Sabahın İlk Işıklarıyla Uyanmak: Kuzguncuk ve Kurtuluş’un Ruhu

İstanbul’un gerçek karakterini anlamak için güne çok erken başlamalısınız. Şehir henüz tam olarak uyanmamışken, martı çığlıkları ve uzaktan gelen vapur düdükleri eşliğinde sokaklara çıkmanın keyfi bambaşkadır. Sabah ezanıyla birlikte uyanıp kendinizi Kuzguncuk’un tarihi sokaklarına attığınızda, zamanın burada daha yavaş aktığını hissedeceksiniz. Üsküdar’dan yürüyerek yaklaşık yirmi dakikada ulaşabileceğiniz bu semt, yan yana duran camisi, kilisesi ve sinagoguyla eski İstanbul’un hoşgörüsünü hala yaşatır.

Güne tarihi Kuzguncuk Fırını’ndan alacağınız taze bir simit ve hemen yanındaki kahvehaneden söyleyeceğiniz demli bir çayla başlamak en büyük lüksünüz olacak. Bu mütevazı kahvaltının maliyeti yaklaşık elli Türk Lirası civarındadır. Buradan sonra rotanızı hemen karşı yakaya, Kurtuluş’a çevirebilirsiniz. Şehrin en eski kozmopolit semtlerinden biri olan Kurtuluş, sabah saatlerinde fırınlarından yayılan anasonlu çörek kokularıyla sizi karşılar. Pangaltı metro durağından sadece on dakikalık bir yürüyüşle ulaşabileceğiniz bu semtte, yerel şarküterilerden alışveriş yapan teyzelerin tatlı telaşına ortak olabilirsiniz.

İstanbul’da toplu taşıma kullanırken mutlaka bir İstanbulkart edinin. Temassız kredi kartları da geçiyor ancak İstanbulkart ile aktarma indirimlerinden yararlanarak ulaşım bütçenizi yarı yarıya düşürebilirsiniz. Bir geçiş yaklaşık yirmi lira civarındadır.

Karaköy’ün Turist Akınından Uzak Lezzet Noktaları

Karaköy denildiğinde akla hemen üçüncü nesil kahveciler ve tasarım butikleri geliyor. Ancak bu modern kabuğun hemen altında, liman işçilerinin ve esnafın yıllardır uğradığı gerçek lezzet durakları gizli. Galata Köprüsü’nün hemen ayağındaki balık pazarının arkasına doğru saptığınızda, kendinizi bambaşka bir dünyada bulursunuz. Burada, gösterişli tabelaları olmayan ama önünde her daim kuyruk olan küçük esnaf lokantaları yer alır.

Örneğin, yarım asırlık geçmişiyle Nato Lokantası, öğle saatlerinde çevredeki esnafın ve bütçe bilincine sahip yerel halkın sığınağıdır. Burada yiyeceğiniz mevsim sebzeli bir tencere yemeği ve yanındaki buz gibi ayran, size lüks restoranlarda bulamayacağınız o samimi ev yemeği tadını sunar. Üstelik bu doyurucu deneyim için ödeyeceğiniz hesap, turistik bir kafedeki tek bir fincan kahve fiyatıyla neredeyse aynıdır. Yemek sonrası tatlı niyetine, Karaköy’ün ara sokaklarındaki seyyar halka tatlıcılardan sıcak bir halka tatlısı almak ise buranın yazısız kuralıdır.

Boğaz’ın Az Bilinen Sakin Koyları ve Yeniköy

Boğaz havası almak için herkesin aklına ilk olarak Bebek veya Ortaköy gelir. Haliyle bu semtler her zaman kalabalık, gürültülü ve pahalıdır. Oysa ki Boğaz’ın kuzeyine doğru çıktıkça, doğanın ve denizin sesini duyabileceğiniz o huzurlu koylar başlar. Benim bu konudaki favorim kesinlikle Yeniköy’dür. Tarabya ve İstinye arasında sıkışmış bu sakin semt, adeta bir sahil kasabası havası taşır.

Yeniköy’e ulaşmak için Hacıosman metro durağından kalkan otobüsleri kullanabilir ve yaklaşık on beş dakikada sahile inebilirsiniz. Burada, tarihi yalıların gölgesinde yürüyüş yapabilir, denize sıfır banklarda oturup kitabınızı okuyabilirsiniz. Eğer bütçenizi zorlamadan deniz kenarında vakit geçirmek isterseniz, belediyeye ait sosyal tesisler harika bir kurtarıcıdır. Çok uygun fiyatlara çayınızı yudumlarken, akıntıyla birlikte süzülen dev şilepleri izlemenin keyfi paha biçilemez.

Adalar’da Rüzgara Karşı: Burgazada Bisiklet Rotası

Büyükada’nın kalabalığı ve turistik koşturmacası bazen yorucu olabilir. Gerçek bir adalı gibi hissetmek ve doğayla baş başa kalmak istiyorsanız vapurdan Burgazada’da inmelisiniz. Kadıköy veya Kabataş’tan kalkan Şehir Hatları vapurlarıyla yaklaşık bir saatlik keyifli bir yolculuğun ardından adaya ulaşabilirsiniz. Vapur biletleri ekonomik ve deniz yolculuğu zaten kendi başına harika bir terapi.

Burgazada’ya adım atar atmaz iskelenin hemen yanındaki bisikletçilerden bir saatliği yüz-yüz elli lira civarında olan bisikletlerden kiralayın. Adanın dik yokuşlarını tırmanırken zorlanabilirsiniz ama Kalpazankaya’ya giden o çam kokulu toprak yola girdiğinizde tüm yorgunluğunuz uçup gidecek. Yol boyunca sol tarafınızda uzanan uçsuz bucaksız mavi, sağ tarafınızda ise adanın sessiz çam ormanları size eşlik edecek. Yolun sonundaki koyda durup, yanınızda getirdiğiniz termos bardağındaki kahveyi yudumlamak, bu seyahatin en unutulmaz anı olacaktır.

Burgazada’da bisiklet kiralarken mutlaka frenleri ve lastik basınçlarını kontrol edin. Adanın yokuşları oldukça diktir ve özellikle inişlerde güvenliğiniz için iyi çalışan frenler hayati önem taşır. Ayrıca hafta sonu yoğunluğundan kaçınmak için bu geziyi hafta içi bir güne planlamanızı öneririm.

Gezginin Dijital Araç Çantası

İstanbul gibi dinamik bir şehirde anlık kararlar vermek gerekebilir. Ulaşım hatlarını kontrol etmek ve bütçenizi planlamak için terminal üzerinden hızlıca kontrol yapabileceğiniz küçük bir script hazırladım. Gezgin ruhlu yazılımcılar seyahat planlaması yaparken bu basit aracı kullanabilirler:

# İstanbul bütçe dostu rota hesaplama aracı
curl -s https://api.kertenkerem.net/v1/istanbul-escape-plan \
  -H "X-Traveler-Type: budget-conscious" \
  -H "X-Preferred-Zone: non-touristic" \
  | jq '.routes[] | {destination: .name, estimated_cost_try: .cost, transport_method: .transport}'

İstanbul, onu anlamak için zaman ayıranlara cömert davranan bir şehirdir. Popüler mekanların yapay ışıltılarından sıyrılıp, sokak aralarındaki o samimi yaşamlara dokunduğunuzda, bu şehrin neden yüzyıllardır insanları büyülediğini çok daha iyi anlayacaksınız. Bir sonraki seyahatinizde haritayı kapatın, kalabalığı değil kendi merakınızı takip edin.

Category: Genel | LEAVE A COMMENT