Takip et

#100DaysOfCode Gün 54: Kapsamlı Bir Blog Uygulaması Geliştirme Rehberi

#100DaysOfCode serüveninizde 54. güne ulaştığınızda, artık öğrendiklerinizi somut bir projeye dönüştürmenin heyecanını yaşıyor olmalısınız.

#100DaysOfCode Gün 54: Kapsamlı Bir Blog Uygulaması Geliştirme Rehberi

#100DaysOfCode serüveninizde 54. güne ulaştığınızda, artık öğrendiklerinizi somut bir projeye dönüştürmenin heyecanını yaşıyor olmalısınız. Bu günün konusu, birçok geliştiricinin yolculuğunda önemli bir kilometre taşı olan bir blog uygulaması oluşturmak. Bu makale, temel bir blog uygulamasını adım adım nasıl geliştirebileceğinizi, hangi teknolojileri kullanabileceğinizi ve bu süreçte karşılaşabileceğiniz zorlukları ele alarak size kapsamlı bir rehber sunacak. Hazırsanız, kod yazmaya başlayalım!

1. Blog Uygulaması Neden Geliştirilmeli?

Bir blog uygulaması geliştirmek, sadece bir proje tamamlamakla kalmaz, aynı zamanda birçok açıdan kişisel ve profesyonel gelişiminize katkıda bulunur. Bu bölüm, neden böyle bir projeye girişmeniz gerektiğine dair motivasyon kaynaklarını inceleyecektir.

1.1. Öğrenme ve Uygulama Fırsatları

Blog uygulamaları, genellikle tam yığın (full-stack) geliştirme becerilerini test etmek ve pekiştirmek için mükemmel bir platform sunar. Veritabanı etkileşiminden kullanıcı arayüzüne, kimlik doğrulamasından API geliştirmeye kadar birçok farklı alanda pratik yapma imkanı bulursunuz. Bu süreçte, yeni teknolojileri öğrenme ve mevcut bilgilerinizi derinleştirme şansına sahip olursunuz.

1.2. Portfolyo Değeri

İş arayışında olan bir geliştirici için sağlam bir portfolyo olmazsa olmazdır. Kendi geliştirdiğiniz, çalışan bir blog uygulaması, potansiyel işverenlere yeteneklerinizi ve problem çözme becerilerinizi göstermenin harika bir yoludur. Kullanıcı yönetimi, CRUD işlemleri (Oluşturma, Okuma, Güncelleme, Silme) ve veritabanı entegrasyonu gibi temel özellikleri barındıran bir proje, teknik yeterliliğinizin kanıtı niteliğindedir.

1.3. İçerik Yönetimi ve Kişisel Marka

Kendi blog uygulamanız, kişisel markanızı oluşturmak ve bilginizi paylaşmak için size bağımsız bir platform sağlar. Öğrendiklerinizi, deneyimlerinizi veya ilgi alanlarınızı dünyaya duyurabilir, böylece hem kendinizi geliştirir hem de başkalarına ilham verebilirsiniz. Bu, aynı zamanda içerik yönetim sistemlerinin (CMS) nasıl çalıştığını anlamak için de harika bir fırsattır.

2. Proje Planlaması ve Teknoloji Seçimi

Her başarılı projenin arkasında iyi bir planlama yatar. Blog uygulamanız için doğru teknolojileri seçmek ve temel özellikleri belirlemek, geliştirme sürecinizi çok daha verimli hale getirecektir.

2.1. Temel Özellikler

Bir blog uygulamasının olmazsa olmaz bazı özellikleri vardır. İşte başlangıç için düşünebileceğiniz temel özellikler:

  • Kullanıcı Yönetimi: Kayıt olma, giriş yapma, profil güncelleme.
  • Makale Yönetimi: Makale oluşturma, okuma, düzenleme, silme (CRUD işlemleri).
  • Yorum Sistemi: Makalelere yorum yapma, yorumları görüntüleme.
  • Kategoriler/Etiketler: Makaleleri sınıflandırma ve filtreleme.
  • Ana Sayfa: Son makaleleri veya popüler makaleleri listeleme.
  • Tek Makale Sayfası: Seçilen makalenin detaylarını ve yorumlarını gösterme.

2.2. Frontend Teknolojileri

Kullanıcıların etkileşimde bulunacağı arayüzü oluşturmak için çeşitli frontend teknolojileri kullanabilirsiniz:

  • HTML5 & CSS3: Uygulamanızın temel yapısını ve stilini oluşturmak için vazgeçilmezdir.
  • JavaScript (Vanilla JS): Dinamik içerik ve etkileşim sağlamak için.
  • JavaScript Frameworkleri (Opsiyonel): React, Vue.js veya Angular gibi modern frameworkler, daha karmaşık ve ölçeklenebilir uygulamalar için tercih edilebilir. Ancak #100DaysOfCode kapsamında, vanilla JS ile başlamak temel prensipleri anlamanıza yardımcı olabilir.

2.3. Backend Teknolojileri

Uygulamanızın sunucu tarafı, veritabanı ile iletişim kuracak, API’leri yönetecek ve iş mantığını işleyecektir. Popüler seçenekler şunlardır:

  • Python (Flask/Django): Python’ın basitliği ve geniş kütüphane desteği sayesinde web geliştirmede oldukça popülerdir. Flask hafif bir mikro-framework iken, Django daha kapsamlı ve “pil dahil” bir frameworktür.
  • Node.js (Express): JavaScript bilginizi hem frontend hem de backend’de kullanmak isterseniz idealdir. Express.js, Node.js için minimalist ve esnek bir web uygulama frameworküdür.
  • Ruby (Ruby on Rails): Hızlı geliştirme ve “convention over configuration” prensibiyle bilinir.

Bu makalede, Python ve Flask kombinasyonuna odaklanacağız, zira #100DaysOfCode katılımcıları arasında oldukça yaygındır ve hızlı prototipleme için uygundur.

2.4. Veritabanı Seçimi

Verilerinizi depolamak için bir veritabanına ihtiyacınız olacak. Seçenekler şunlardır:

  • SQL Veritabanları: PostgreSQL, MySQL, SQLite. İlişkisel veritabanlarıdır ve yapılandırılmış veriler için uygundur. Başlangıç seviyesi projeler için SQLite, kurulumu kolay olduğu için harika bir seçenektir.
  • NoSQL Veritabanları: MongoDB, Cassandra. Yapılandırılmamış veya yarı yapılandırılmış veriler için esneklik sunar.

SQLite, geliştirme ortamında hızlıca başlamak için mükemmeldir. SQLAlchemy gibi ORM (Object-Relational Mapper) kütüphaneleri, veritabanı işlemlerini daha kolay hale getirir.

3. Backend Geliştirme: API ve Veritabanı İlişkisi

Uygulamanızın beyni olan backend, verileri yönetir, iş mantığını yürütür ve frontend ile iletişim kurar. Bu bölümde, backend’in temel bileşenlerini ve Flask ile nasıl uygulanabileceğini inceleyeceğiz.

3.1. Model Tasarımı

Veritabanınızdaki tabloları ve aralarındaki ilişkileri tanımlamak, model tasarımı ile başlar. Bir blog uygulaması için temel modeller şunlar olabilir:

  • User (Kullanıcı): Kullanıcı adı, e-posta, parola (hashlenmiş).
  • Post (Makale): Başlık, içerik, yazar (User ile ilişki), oluşturulma tarihi.
  • Comment (Yorum): İçerik, yazar (User ile ilişki), makale (Post ile ilişki), oluşturulma tarihi.

Örnek bir Post tablosu yapısı (SQLAlchemy ile):


from datetime import datetime
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password_hash = db.Column(db.String(128))
    posts = db.relationship('Post', backref='author', lazy=True)
    comments = db.relationship('Comment', backref='comment_author', lazy=True)

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    content = db.Column(db.Text, nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    comments = db.relationship('Comment', backref='post', lazy=True)

class Comment(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.Text, nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    post_id = db.Column(db.Integer, db.ForeignKey('post.id'), nullable=False)

3.2. API Uç Noktaları (Endpoints)

Frontend'in backend ile iletişim kurabilmesi için API uç noktaları (route'lar) tanımlamanız gerekir. İşte bazı örnekler:

  • GET /api/posts: Tüm makaleleri listeler.
  • GET /api/posts/: Belirli bir makalenin detaylarını getirir.
  • POST /api/posts: Yeni bir makale oluşturur.
  • PUT /api/posts/: Mevcut bir makaleyi günceller.
  • DELETE /api/posts/: Bir makaleyi siler.
  • POST /api/register: Yeni kullanıcı kaydı.
  • POST /api/login: Kullanıcı girişi.

Flask ile basit bir makale listeleme ve oluşturma rotası örneği:


from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

# Model tanımları (yukarıdaki gibi)

@app.route('/api/posts', methods=['GET'])
def get_posts():
    posts = Post.query.all()
    output = []
    for post in posts:
        post_data = {
            'id': post.id,
            'title': post.title,
            'content': post.content,
            'author': post.author.username,
            'date_posted': post.date_posted.isoformat()
        }
        output.append(post_data)
    return jsonify({'posts': output})

@app.route('/api/posts', methods=['POST'])
def create_post():
    data = request.get_json()
    new_post = Post(title=data['title'], content=data['content'], user_id=data['user_id'])
    db.session.add(new_post)
    db.session.commit()
    return jsonify({'message': 'Makale başarıyla oluşturuldu!'}), 201

if __name__ == '__main__':
    with app.app_context():
        db.create_all() # Veritabanı tablolarını oluştur
    app.run(debug=True)

3.3. Kimlik Doğrulama ve Yetkilendirme

Kullanıcıların kayıt olmasını, giriş yapmasını ve belirli işlemleri (örneğin, kendi makalelerini düzenleme) yapabilmesini sağlamak için kimlik doğrulama ve yetkilendirme mekanizmaları gereklidir. JWT (JSON Web Tokens) veya oturum (session) tabanlı kimlik doğrulama yöntemleri kullanılabilir. Parolaları asla düz metin olarak saklamayın; bunun yerine Bcrypt gibi kütüphanelerle hashleyin.

4. Frontend Geliştirme: Kullanıcı Arayüzü

Kullanıcı arayüzü (UI), uygulamanızın görünen yüzüdür. Frontend, backend'den aldığı verileri kullanıcıya sunar ve kullanıcının etkileşimlerini backend'e iletir.

4.1. Sayfa Yapıları

Blog uygulamanız için temel sayfa yapıları şunları içerebilir:

  • index.html (Ana Sayfa): Tüm makalelerin özetini listeleyen sayfa.
  • post-detail.html: Tek bir makalenin başlığını, içeriğini ve yorumlarını gösteren sayfa.
  • create-post.html: Yeni bir makale oluşturmak için form içeren sayfa.
  • login.html / register.html: Kullanıcı girişi ve kayıt formları.

4.2. Veri Çekme ve Gösterme

Frontend, JavaScript'in Fetch API'si veya Axios gibi kütüphaneler aracılığıyla backend API'lerinden veri çeker. Çekilen veriler, HTML DOM'u manipüle edilerek dinamik olarak sayfada gösterilir.


// Tüm makaleleri çekme ve gösterme (Vanilla JS)
document.addEventListener('DOMContentLoaded', () => {
    fetch('/api/posts')
        .then(response => response.json())
        .then(data => {
            const postsContainer = document.getElementById('posts-container');
            data.posts.forEach(post => {
                const postElement = document.createElement('div');
                postElement.classList.add('post-card');
                postElement.innerHTML = 

${post.title}

Yazar: ${post.author} - Tarih: ${new Date(post.date_posted).toLocaleDateString()}

${post.content.substring(0, 150)}...

; postsContainer.appendChild(postElement); }); }) .catch(error => console.error('Makaleler çekilirken hata oluştu:', error)); });

4.3. Form Yönetimi

Yeni makale oluşturma, yorum ekleme veya kullanıcı girişi gibi işlemler için HTML formları kullanılır. JavaScript, bu formlardan gelen verileri alır, doğrular ve backend API'lerine HTTP POST istekleri ile gönderir.


// Yeni makale oluşturma formu gönderimi (Vanilla JS)
const createPostForm = document.getElementById('create-post-form');
if (createPostForm) {
    createPostForm.addEventListener('submit', (e) => {
        e.preventDefault();
        const title = document.getElementById('post-title').value;
        const content = document.getElementById('post-content').value;
        const userId = 1; // Geçici olarak sabit bir kullanıcı ID'si

        fetch('/api/posts', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({ title, content, user_id: userId }),
        })
        .then(response => response.json())
        .then(data => {
            alert(data.message);
            window.location.href = '/'; // Ana sayfaya yönlendir
        })
        .catch(error => console.error('Makale oluşturulurken hata oluştu:', error));
    });
}

5. Temel Blog Uygulaması Kod Örnekleri ve Yapılandırma

Uygulamanızı geliştirirken kullanabileceğiniz bazı temel kod yapıları ve yapılandırma ipuçları aşağıdadır.

5.1. Proje Yapısı

Tipik bir Flask projesi için önerilen dizin yapısı:


blog_app/
├── app.py              # Ana Flask uygulaması
├── config.py           # Yapılandırma ayarları
├── models.py           # Veritabanı modelleri
├── routes.py           # API uç noktaları
├── static/             # CSS, JS, resimler
│   ├── css/
│   │   └── style.css
│   ├── js/
│   │   └── main.js
├── templates/          # HTML şablonları
│   ├── index.html
│   ├── post_detail.html
│   └── base.html
└── venv/               # Sanal ortam

5.2. Flask Uygulaması Başlangıcı

app.py dosyanızın temel yapısı:


from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import Config # config.py dosyasından yapılandırmayı çek

app = Flask(__name__)
app.config.from_object(Config) # Config sınıfını uygula
db = SQLAlchemy(app)

# Modelleri ve rotaları burada import edin
# from models import User, Post, Comment
# from routes import *

if __name__ == '__main__':
    with app.app_context():
        db.create_all() # Tüm tabloları oluştur
    app.run(debug=True)

5.3. Sanal Ortam ve Bağımlılıklar

Projenizi izole etmek için bir sanal ortam kullanmak önemlidir. Gerekli kütüphaneleri requirements.txt dosyasına ekleyin.


# Sanal ortam oluşturma
python3 -m venv venv

# Sanal ortamı etkinleştirme
source venv/bin/activate  # Linux/macOS
.\venv\Scripts\activate   # Windows

# Gerekli kütüphaneleri yükleme
pip install Flask Flask-SQLAlchemy Flask-WTF Flask-Login python-dotenv

# Yüklü kütüphaneleri requirements.txt dosyasına kaydetme
pip freeze > requirements.txt

requirements.txt dosya içeriği örneği:


Flask==2.3.3
Flask-SQLAlchemy==3.1.1
Flask-WTF==1.2.1
Werkzeug==2.3.8
# Diğer bağımlılıklar...

Sonuç

#100DaysOfCode serüveninizin 54. gününde bir blog uygulaması geliştirmek, öğrendiğiniz teorik bilgileri pratiğe dökmenin ve tam yığın geliştirme becerilerinizi pekiştirmenin harika bir yoludur. Bu süreçte, veritabanı tasarımı, API geliştirme, kullanıcı arayüzü oluşturma ve kimlik doğrulama gibi birçok temel kavramı deneyimleyeceksiniz. Unutmayın, bu sadece bir başlangıç. Uygulamanızı sürekli geliştirerek, yeni özellikler ekleyerek ve kodunuzu optimize ederek kendinizi daha da ileriye taşıyabilirsiniz. Bu yolculukta başarılar dileriz!

SSS (Sık Sorulan Sorular)

S1: Hangi veritabanını kullanmalıyım?

Başlangıç seviyesi bir proje için SQLite idealdir, çünkü kurulumu kolaydır ve ek bir veritabanı sunucusu gerektirmez. Ancak üretim ortamı için PostgreSQL veya MySQL gibi daha güçlü ilişkisel veritabanları tercih edilebilir.

S2: Frontend ve Backend'i nasıl birleştireceğim?

Frontend (HTML, CSS, JavaScript) ve Backend (Flask/Node.js) arasındaki iletişim HTTP istekleri (GET, POST, PUT, DELETE) aracılığıyla gerçekleşir. Frontend, backend'in sunduğu API uç noktalarına istek gönderir ve aldığı JSON verilerini kullanarak kullanıcı arayüzünü günceller. Flask gibi frameworkler, hem API uç noktalarını sunabilir hem de HTML şablonlarını doğrudan render edebilir.

S3: Bu proje ne kadar sürer?

Projenin süresi, eklemek istediğiniz özelliklerin karmaşıklığına ve kendi öğrenme hızınıza bağlıdır. Temel bir CRUD işlevselliğine sahip blog uygulamasını birkaç gün içinde tamamlayabilirsiniz. Ancak kullanıcı profilleri, yorumlar, etiketler, arama gibi ek özellikler ekledikçe süre uzayacaktır. #100DaysOfCode kapsamında her gün küçük adımlar atmak önemlidir.

S4: Hangi Flask kütüphanelerini kullanmalıyım?

Bir blog uygulaması için temel Flask kütüphaneleri şunlardır:

  • Flask-SQLAlchemy: ORM ile veritabanı etkileşimi için.
  • Flask-WTF: Form oluşturma ve doğrulama için.
  • Flask-Login: Kullanıcı oturumlarını yönetmek için.
  • Werkzeug (Flask ile gelir): Parola hashleme için (generate_password_hash ve check_password_hash).

S5: SEO uyumlu bir blog uygulaması nasıl yapılır?

SEO (Arama Motoru Optimizasyonu) için şunlara dikkat edebilirsiniz:

  • Anlamlı URL'ler: Makale başlıklarını içeren URL'ler (örn. /posts/makale-basligi).
  • Meta Etiketleri: Her sayfa için uygun </code> ve <code><meta description></code> etiketleri.</li> <li><b>Semantik HTML:</b> Doğru HTML5 etiketlerini (<code><br /> <header></code>, <code></p> <nav></code>, <code></p> <article></code>, <code></p> <footer></code> vb.) kullanmak.</li> <li><b>Hızlı Yükleme Süresi:</b> Resimleri optimize etmek, CSS ve JS dosyalarını sıkıştırmak.</li> <li><b>Mobil Uyumluluk:</b> Duyarlı (responsive) tasarım kullanmak.</li> </ul> </div> <div class="cs-entry__footer"> <div class="cs-entry__footer-left"> <div class="cs-entry__post-meta" ><div class="cs-meta-author"><a class="cs-meta-author-link url fn n" href="https://fatihsoysal.com/blog/author/fatihsoysal/"><span class="cs-meta-author-by">by</span><span class="cs-meta-author-name">Fatih Soysal</span></a></div><div class="cs-meta-comments"><a href="https://fatihsoysal.com/blog/100daysofcode-gun-54-kapsamli-bir-blog-uygulamasi-gelistirme-rehberi/#respond" class="comments-link" >0</a></div></div> </div> <div class="cs-entry__footer-right"> <div class="cs-share"> <a class="cs-share__link" target="_blank" href="https://www.facebook.com/sharer.php?text=%23100DaysOfCode%20G%C3%BCn%2054%3A%20Kapsaml%C4%B1%20Bir%20Blog%20Uygulamas%C4%B1%20Geli%C5%9Ftirme%20Rehberi&u=https://fatihsoysal.com/blog/100daysofcode-gun-54-kapsamli-bir-blog-uygulamasi-gelistirme-rehberi/"> <i class="cs-icon cs-icon-facebook"></i> </a> <a class="cs-share__link" target="_blank" href="https://twitter.com/share?t=%23100DaysOfCode%20G%C3%BCn%2054%3A%20Kapsaml%C4%B1%20Bir%20Blog%20Uygulamas%C4%B1%20Geli%C5%9Ftirme%20Rehberi&url=https://fatihsoysal.com/blog/100daysofcode-gun-54-kapsamli-bir-blog-uygulamasi-gelistirme-rehberi/"> <i class="cs-icon cs-icon-twitter-x"></i> </a> <a class="cs-share__link" target="_blank" href="https://t.me/share/url?url=%5BURL%5D&text=https://fatihsoysal.com/blog/100daysofcode-gun-54-kapsamli-bir-blog-uygulamasi-gelistirme-rehberi/"> <i class="cs-icon cs-icon-telegram"></i> </a> <a class="cs-share__link cs-share__copy-link" target="_blank" href="https://fatihsoysal.com/blog/100daysofcode-gun-54-kapsamli-bir-blog-uygulamasi-gelistirme-rehberi/"> <i class="cs-icon cs-icon-link"></i> </a> </div> </div> </div> <div class="cs-entry__comments" id="comments"> <div class="cs-entry__comments-header"> <div class="cs-entry__comments-left"> <div class="cs-entry__comments-heading">Yorumlar</div> <div class="cs-entry__comments-description h2">İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.</div> </div> <div class="cs-entry__comments-right"> <div class="cs-entry__comments-toggle"> <span class="cs-button" role="button" aria-label="Yorumlar"> <span>Yorum Yaz</span> </span> </div> </div> </div> <div class="cs-entry__comments-inner"> <div id="respond" class="comment-respond"> <h2 id="reply-title" class="comment-reply-title">Bir yanıt yazın <small><a rel="nofollow" id="cancel-comment-reply-link" href="/blog/100daysofcode-gun-54-kapsamli-bir-blog-uygulamasi-gelistirme-rehberi/#respond" style="display:none;">Yanıtı iptal et</a></small></h2><form action="https://fatihsoysal.com/blog/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate><p class="comment-notes"><span id="email-notes">E-posta adresiniz yayınlanmayacak.</span> <span class="required-field-message">Gerekli alanlar <span class="required">*</span> ile işaretlenmişlerdir</span></p><p class="comment-form-comment"><textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required="required" aria-required="true" placeholder="Your Comment *"></textarea></p><p class="comment-form-author"><input id="author" name="author" type="text" value="" size="30" aria-required='true' placeholder="Your Name *" /></p> <p class="comment-form-email"><input id="email" name="email" type="email" value="" size="30" aria-required='true' placeholder="Your E-mail *" /></p> <p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes"><label for="wp-comment-cookies-consent">Save my name and email in this browser for the next time I comment.</label></p> <p class="form-submit"><button name="submit" type="submit" id="submit" class="submit" value="Yorum gönder" />Gönder </button> <input type='hidden' name='comment_post_ID' value='41301' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="6feaa5c354" /></p><p style="display: none !important;" class="akismet-fields-container" data-prefix="ak_"><label>Δ<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="ak_js" value="214"/><script> document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() ); </script> </p></form> </div><!-- #respond --> </div> </div> </div> </div> </div> </div> </div> <section class="cs-read-next"> <h2 class="cs-read-next__heading"> Aşağıdaki içerikler de ilgilinizi çekebilir: </h2> <div class="cs-read-next__list cs-posts-area__archive"> <article class="cs-read-next__item post-41302 post type-post status-publish format-standard category-genel cs-entry cs-video-wrap"> <div class="cs-entry__outer"> <div class="cs-entry__inner cs-entry__content"> <div class="cs-entry__info"> <h2 class="cs-entry__title"><a href="https://fatihsoysal.com/blog/2026nin-en-iyi-yapay-zeka-destekli-test-uretim-araclari-kapsamli-rehber/">2026’nın En İyi Yapay Zeka Destekli Test Üretim Araçları: Kapsamlı Rehber<div class="cs-entry__post-meta" ><div class="cs-meta-date">29 Mart 2026</div></div></a></h2> </div> </div> </div> </article> <article class="cs-read-next__item post-41311 post type-post status-publish format-standard category-genel cs-entry cs-video-wrap"> <div class="cs-entry__outer"> <div class="cs-entry__inner cs-entry__content"> <div class="cs-entry__info"> <h2 class="cs-entry__title"><a href="https://fatihsoysal.com/blog/buyuk-dil-modelleri-llm-icin-beyin-esintili-hafiza-sistemleri-sinirliliklari-asmak/">Büyük Dil Modelleri (LLM) İçin Beyin Esintili Hafıza Sistemleri: Sınırlılıkları Aşmak<div class="cs-entry__post-meta" ><div class="cs-meta-date">31 Mart 2026</div></div></a></h2> </div> </div> </div> </article> <article class="cs-read-next__item post-41313 post type-post status-publish format-standard category-genel cs-entry cs-video-wrap"> <div class="cs-entry__outer"> <div class="cs-entry__inner cs-entry__content"> <div class="cs-entry__info"> <h2 class="cs-entry__title"><a href="https://fatihsoysal.com/blog/bifrost-ile-gpt-maliyetlerini-ve-yanit-surelerini-semantik-onbellekleme-ile-nasil-azaltirsiniz/">Bifrost ile GPT Maliyetlerini ve Yanıt Sürelerini Semantik Önbellekleme ile Nasıl Azaltırsınız?<div class="cs-entry__post-meta" ><div class="cs-meta-date">1 Nisan 2026</div></div></a></h2> </div> </div> </div> </article> <article class="cs-read-next__item post-41314 post type-post status-publish format-standard category-genel cs-entry cs-video-wrap"> <div class="cs-entry__outer"> <div class="cs-entry__inner cs-entry__content"> <div class="cs-entry__info"> <h2 class="cs-entry__title"><a href="https://fatihsoysal.com/blog/go-modulleri-nedir-ve-neden-go-gelistiricileri-icin-vazgecilmezdir/">Go Modülleri Nedir ve Neden Go Geliştiricileri İçin Vazgeçilmezdir?<div class="cs-entry__post-meta" ><div class="cs-meta-date">1 Nisan 2026</div></div></a></h2> </div> </div> </div> </article> </div> </section> <div class="cs-subscribe"> <div class="cs-subscribe__content"> <div class="cs-subscribe__header"> <div class="cs-subscribe__heading h2"> E-posta Bülteni </div> <div class="cs-subscribe__subheading h2"> Yazılım Topluluğuna Katılın </div> <div class="cs-subscribe__description"> En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim. </div> </div> <form class="cs-subscribe__form" action="https://codesupply.us13.list-manage.com/subscribe/post?u=41845cb8908fb4302a4df512f&id=b5a5e9c757" method="post" target="_blank" novalidate> <div class="cs-form-group cs-subscribe__form-group"> <input type="email" placeholder="Your E-mail" name="EMAIL" required> <button type="submit" value="Abone Ol" aria-label="Abone Ol" name="subscribe"> <span>Abone Ol</span> </button> </div> </form> </div> </div> </div> </div> </main> </div> </div> <footer class="cs-footer" data-scheme="auto" data-l="light" data-d="dark"> <div class="cs-footer__item cs-footer__item-top-bar"> <div class="cs-container"> <div class="cs-footer__item-inner"> <div class="cs-footer__col cs-col-left"> <div class="cs-footer-columns__nav-menu"> <ul id="menu-menu-5" class="cs-footer-columns__nav "><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-19194 csco-menu-item-style-none"><a href="https://fatihsoysal.com/"><span>Anasayfa</span></a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-11 csco-menu-item-style-none"><a href="https://fatihsoysal.com/blog/hakkimda/"><span>Hakkımda</span></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-25363 csco-menu-item-style-none"><a href="#"><span>Eğitimler</span></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-30019 csco-menu-item-style-none"><a href="#"><span>Makaleler</span></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-69 csco-menu-item-style-none"><a href="https://fatihsoysal.com/blog"><span>Blog</span></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-35075 csco-menu-item-style-none"><a href="#"><span>Kategoriler</span></a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-257 csco-menu-item-style-none"><a href="https://fatihsoysal.com/blog/iletisim/"><span>Bana Ulaşın</span></a></li> </ul> </div> </div> <div class="cs-footer__col cs-col-right"> <div class="cs-social"> <a class="cs-social__link" href="https://www.linkedin.com/in/fatihsoysal/" target="_blank" title="Linkedin"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M16.8169 2.00011H3.1831C3.02984 1.998 2.87767 2.02591 2.73526 2.08226C2.59286 2.13861 2.46302 2.22229 2.35316 2.32852C2.24329 2.43475 2.15556 2.56145 2.09496 2.70139C2.03437 2.84133 2.0021 2.99176 2 3.1441V16.8559C2.0021 17.0082 2.03437 17.1587 2.09496 17.2986C2.15556 17.4385 2.24329 17.5653 2.35316 17.6715C2.46302 17.7777 2.59286 17.8614 2.73526 17.9177C2.87767 17.9741 3.02984 18.002 3.1831 17.9999H16.8169C16.9702 18.002 17.1223 17.9741 17.2647 17.9177C17.4071 17.8614 17.537 17.7777 17.6468 17.6715C17.7567 17.5653 17.8444 17.4385 17.905 17.2986C17.9656 17.1587 17.9979 17.0082 18 16.8559V3.1441C17.9979 2.99176 17.9656 2.84133 17.905 2.70139C17.8444 2.56145 17.7567 2.43475 17.6468 2.32852C17.537 2.22229 17.4071 2.13861 17.2647 2.08226C17.1223 2.02591 16.9702 1.998 16.8169 2.00011ZM6.85312 15.3919H4.43863V8.19203H6.85312V15.3919ZM5.64588 7.18404C5.31289 7.18404 4.99354 7.05256 4.75808 6.81851C4.52262 6.58447 4.39034 6.26704 4.39034 5.93606C4.39034 5.60507 4.52262 5.28764 4.75808 5.0536C4.99354 4.81956 5.31289 4.68807 5.64588 4.68807C5.82269 4.66814 6.00175 4.68556 6.17133 4.73918C6.3409 4.7928 6.49717 4.88142 6.6299 4.99924C6.76264 5.11706 6.86883 5.26141 6.94155 5.42285C7.01426 5.58429 7.05185 5.75918 7.05185 5.93606C7.05185 6.11294 7.01426 6.28782 6.94155 6.44926C6.86883 6.6107 6.76264 6.75506 6.6299 6.87287C6.49717 6.99069 6.3409 7.07931 6.17133 7.13293C6.00175 7.18656 5.82269 7.20397 5.64588 7.18404ZM15.5614 15.3919H13.1469V11.528C13.1469 10.56 12.8008 9.928 11.9235 9.928C11.652 9.92998 11.3877 10.0146 11.1661 10.1705C10.9445 10.3264 10.7762 10.5461 10.6841 10.8C10.6211 10.988 10.5938 11.186 10.6036 11.384V15.3839H8.18913V8.18402H10.6036V9.20001C10.823 8.8217 11.142 8.51004 11.5263 8.29859C11.9106 8.08713 12.3457 7.98391 12.7847 8.00003C14.3944 8.00003 15.5614 9.03201 15.5614 11.248V15.3919Z"/></svg> </a> </div> </div> </div> </div> </div> <div class="cs-footer__item cs-footer__item-bottom-bar"> <div class="cs-container"> <div class="cs-footer__item-inner"> <div class="cs-footer__col cs-col-left"> <div class="cs-footer__nav-menu"> <ul id="menu-footer" class="cs-footer__nav "><li id="menu-item-39737" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39737"><a href="https://fatihsoysal.com/blog/category/ai/"><span>AI</span></a></li> <li id="menu-item-39739" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39739"><a href="https://fatihsoysal.com/blog/category/akademik-ve-bilimsel/"><span>Akademik ve Bilimsel</span></a></li> <li id="menu-item-39740" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39740"><a href="https://fatihsoysal.com/blog/category/angular/"><span>Angular</span></a></li> <li id="menu-item-39741" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39741"><a href="https://fatihsoysal.com/blog/category/aws/"><span>AWS</span></a></li> <li id="menu-item-39742" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39742"><a href="https://fatihsoysal.com/blog/category/azure/"><span>Azure</span></a></li> <li id="menu-item-39743" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39743"><a href="https://fatihsoysal.com/blog/category/bash/"><span>Bash</span></a></li> <li id="menu-item-39745" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39745"><a href="https://fatihsoysal.com/blog/category/c-2/"><span>C++</span></a></li> <li id="menu-item-39746" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39746"><a href="https://fatihsoysal.com/blog/category/cloud/"><span>Cloud</span></a></li> <li id="menu-item-39748" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39748"><a href="https://fatihsoysal.com/blog/category/devops/"><span>Devops</span></a></li> <li id="menu-item-39749" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39749"><a href="https://fatihsoysal.com/blog/category/docker/"><span>Docker</span></a></li> <li id="menu-item-39750" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39750"><a href="https://fatihsoysal.com/blog/category/dusunsel-ve-kisisel/"><span>Düşünsel ve Kişisel</span></a></li> <li id="menu-item-39751" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39751"><a href="https://fatihsoysal.com/blog/category/egitim/"><span>Eğitim</span></a></li> <li id="menu-item-39752" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39752"><a href="https://fatihsoysal.com/blog/category/flutter/"><span>Flutter</span></a></li> <li id="menu-item-39754" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-39754"><a href="https://fatihsoysal.com/blog/category/genel/"><span>Genel</span></a></li> <li id="menu-item-39755" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39755"><a href="https://fatihsoysal.com/blog/category/git/"><span>Git</span></a></li> <li id="menu-item-39758" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39758"><a href="https://fatihsoysal.com/blog/category/is-dunyasi/"><span>İş Dünyası</span></a></li> <li id="menu-item-39759" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39759"><a href="https://fatihsoysal.com/blog/category/java/"><span>Java</span></a></li> <li id="menu-item-39760" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39760"><a href="https://fatihsoysal.com/blog/category/kubernetes/"><span>Kubernetes</span></a></li> <li id="menu-item-39761" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39761"><a href="https://fatihsoysal.com/blog/category/mobile/"><span>Mobile</span></a></li> <li id="menu-item-39762" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39762"><a href="https://fatihsoysal.com/blog/category/mongodb/"><span>MongoDB</span></a></li> <li id="menu-item-39763" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39763"><a href="https://fatihsoysal.com/blog/category/mvc/"><span>MVC</span></a></li> <li id="menu-item-39764" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39764"><a href="https://fatihsoysal.com/blog/category/nextjs/"><span>NextJS</span></a></li> <li id="menu-item-39765" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39765"><a href="https://fatihsoysal.com/blog/category/nginx/"><span>Nginx</span></a></li> <li id="menu-item-39766" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39766"><a href="https://fatihsoysal.com/blog/category/powershell/"><span>PowerShell</span></a></li> <li id="menu-item-39767" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39767"><a href="https://fatihsoysal.com/blog/category/programming-patterns/"><span>Programming Patterns</span></a></li> <li id="menu-item-39768" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39768"><a href="https://fatihsoysal.com/blog/category/python/"><span>Python</span></a></li> <li id="menu-item-39769" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39769"><a href="https://fatihsoysal.com/blog/category/redis/"><span>Redis</span></a></li> <li id="menu-item-39770" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39770"><a href="https://fatihsoysal.com/blog/category/sed/"><span>Sed</span></a></li> <li id="menu-item-39771" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39771"><a href="https://fatihsoysal.com/blog/category/server/"><span>Server</span></a></li> <li id="menu-item-39772" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39772"><a href="https://fatihsoysal.com/blog/category/yazilim/net/"><span>.NET</span></a></li> <li id="menu-item-39773" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39773"><a href="https://fatihsoysal.com/blog/category/yazilim/ajax/"><span>AJAX</span></a></li> <li id="menu-item-39774" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39774"><a href="https://fatihsoysal.com/blog/category/yazilim/asp-net/"><span>ASP.NET</span></a></li> <li id="menu-item-39775" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39775"><a href="https://fatihsoysal.com/blog/category/yazilim/c/"><span>C#</span></a></li> <li id="menu-item-39776" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39776"><a href="https://fatihsoysal.com/blog/category/yazilim/css3-html5/"><span>CSS3 – HTML5</span></a></li> <li id="menu-item-39777" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39777"><a href="https://fatihsoysal.com/blog/category/yazilim/java-android-development/"><span>JAVA – Android</span></a></li> <li id="menu-item-39778" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39778"><a href="https://fatihsoysal.com/blog/category/yazilim/javascript/"><span>Javascript</span></a></li> <li id="menu-item-39779" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39779"><a href="https://fatihsoysal.com/blog/category/yazilim/linux/"><span>Linux</span></a></li> <li id="menu-item-39780" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39780"><a href="https://fatihsoysal.com/blog/category/yazilim/php/"><span>PHP</span></a></li> <li id="menu-item-39781" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39781"><a href="https://fatihsoysal.com/blog/category/yazilim/javascript/jquery/"><span>jQuery</span></a></li> <li id="menu-item-39782" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39782"><a href="https://fatihsoysal.com/blog/category/yazilim/javascript/node-js/"><span>Node.js</span></a></li> <li id="menu-item-39783" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39783"><a href="https://fatihsoysal.com/blog/category/yazilim/javascript/react/"><span>React</span></a></li> <li id="menu-item-39784" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39784"><a href="https://fatihsoysal.com/blog/category/yazilim/sql/ms-sql-server/"><span>MS SQL Server</span></a></li> <li id="menu-item-39785" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39785"><a href="https://fatihsoysal.com/blog/category/yazilim/sql/mysql/"><span>MySQL</span></a></li> <li id="menu-item-39786" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-39786"><a href="https://fatihsoysal.com/blog/category/yazilim/sql/postgresql/"><span>PostgreSQL</span></a></li> </ul> </div> </div> <div class="cs-footer__col cs-col-right"> <div class="cs-footer__copyright"> © 2026 Fatih Soysal 💻🚀 All rights reserved. Built with passion & caffeine ☕ </div> </div> </div> </div> </div> </footer> <button class="cs-scroll-top" role="button" aria-label="Scroll to top button"> <i class="cs-icon cs-icon-chevron-up"></i> <div class="cs-scroll-top-border"> <svg width="52" height="52" viewBox="0 0 52 52"> <path d="M26,2 a24,24 0 0,1 0,48 a24,24 0 0,1 0,-48" style="stroke-width: 2; fill: none;"></path> </svg> </div> <div class="cs-scroll-top-progress"> <svg width="52" height="52" viewBox="0 0 52 52"> <path d="M26,2 a24,24 0 0,1 0,48 a24,24 0 0,1 0,-48" style="stroke-width: 2; fill: none;"></path> </svg> </div> </button> <script type="text/javascript"> var CF7AppsLoadhCaptcha = function() { var hcaptcha = document.querySelectorAll( '.h-captcha' ); for (var i = 0; i < hcaptcha.length; i++) { hcaptcha[i].setAttribute( 'data-sitekey', '' ); hcaptcha[i].setAttribute( 'data-callback', 'cf7apps_hcaptcha_callback' ); } }; </script> <script src="https://js.hcaptcha.com/1/api.js?onload=CF7AppsLoadhCaptcha" async defer ></script> <script> const lazyloadRunObserver = () => { const lazyloadBackgrounds = document.querySelectorAll( `.e-con.e-parent:not(.e-lazyloaded)` ); const lazyloadBackgroundObserver = new IntersectionObserver( ( entries ) => { entries.forEach( ( entry ) => { if ( entry.isIntersecting ) { let lazyloadBackground = entry.target; if( lazyloadBackground ) { lazyloadBackground.classList.add( 'e-lazyloaded' ); } lazyloadBackgroundObserver.unobserve( entry.target ); } }); }, { rootMargin: '200px 0px 200px 0px' } ); lazyloadBackgrounds.forEach( ( lazyloadBackground ) => { lazyloadBackgroundObserver.observe( lazyloadBackground ); } ); }; const events = [ 'DOMContentLoaded', 'elementor/lazyload/observe', ]; events.forEach( ( event ) => { document.addEventListener( event, lazyloadRunObserver ); } ); </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/embed-any-document/js/pdfobject.min.js?ver=2.7.12" id="awsm-ead-pdf-object-js"></script> <script id="awsm-ead-public-js-extra"> var eadPublic = []; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/embed-any-document/js/embed-public.min.js?ver=2.7.12" id="awsm-ead-public-js"></script> <script src="https://fatihsoysal.com/blog/wp-includes/js/dist/hooks.min.js?ver=4d63a3d491d11ffd8ac6" id="wp-hooks-js"></script> <script src="https://fatihsoysal.com/blog/wp-includes/js/dist/i18n.min.js?ver=5e580eb46a90c2b997e6" id="wp-i18n-js"></script> <script id="wp-i18n-js-after"> wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=6.1.5" id="swv-js"></script> <script id="contact-form-7-js-translations"> ( function( domain, translations ) { var localeData = translations.locale_data[ domain ] || translations.locale_data.messages; localeData[""].domain = domain; wp.i18n.setLocaleData( localeData, domain ); } )( "contact-form-7", {"translation-revision-date":"2026-01-19 21:19:08+0000","generator":"GlotPress\/4.0.3","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"tr"},"This contact form is placed in the wrong place.":["Bu ileti\u015fim formu yanl\u0131\u015f yere yerle\u015ftirilmi\u015f."],"Error:":["Hata:"]}},"comment":{"reference":"includes\/js\/index.js"}} ); </script> <script id="contact-form-7-js-before"> var wpcf7 = { "api": { "root": "https:\/\/fatihsoysal.com\/blog\/wp-json\/", "namespace": "contact-form-7\/v1" } }; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/contact-form-7/includes/js/index.js?ver=6.1.5" id="contact-form-7-js"></script> <script src="https://fatihsoysal.com/blog/wp-includes/js/imagesloaded.min.js?ver=5.0.0" id="imagesloaded-js"></script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/sight/render/js/jquery.magnific-popup.min.js?ver=1777452259" id="magnific-popup-js"></script> <script id="sight-block-script-js-extra"> var sight_lightbox_localize = {"text_previous":"Previous","text_next":"Next","text_close":"Close","text_loading":"Loading","text_counter":"of"}; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/sight/render/js/sight.js?ver=1777452259" id="sight-block-script-js"></script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/easy-syntax-highlighter/assets/js/highlight.min.js?ver=11.9.0" id="esh-highlight-js-js"></script> <script id="esh-highlight-js-js-after"> document.addEventListener("DOMContentLoaded", () => { hljs.highlightAll(); }); </script> <script id="esh-frontend-js-extra"> var esh_i18n = {"copied":"\u5df2\u590d\u5236\uff01","copy_failed":"\u590d\u5236\u5931\u8d25"}; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/easy-syntax-highlighter/assets/js/frontend.js?ver=2.0.0" id="esh-frontend-js"></script> <script src="https://www.google.com/recaptcha/api.js?render=6Lfq6JMsAAAAAFwFocaWCzv-A3znzOaIyo9ACOYg&ver=3.0" id="google-recaptcha-js"></script> <script src="https://fatihsoysal.com/blog/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=3.15.0" id="wp-polyfill-js"></script> <script id="wpcf7-recaptcha-js-before"> var wpcf7_recaptcha = { "sitekey": "6Lfq6JMsAAAAAFwFocaWCzv-A3znzOaIyo9ACOYg", "actions": { "homepage": "homepage", "contactform": "contactform" } }; </script> <script src="https://fatihsoysal.com/blog/wp-content/plugins/contact-form-7/modules/recaptcha/index.js?ver=6.1.5" id="wpcf7-recaptcha-js"></script> <script id="csco-scripts-js-extra"> var csLocalize = {"siteSchemeMode":"system","siteSchemeToogle":"1","shareCopiedText":"URL copied","subscribeProcess":"Processing your subscription...","subscribeSuccess":"Thank you for subscribing!","subscribeError":"Form submission error"}; </script> <script src="https://fatihsoysal.com/blog/wp-content/themes/intro/assets/js/scripts.js?ver=6.7.11" id="csco-scripts-js"></script> <script src="https://fatihsoysal.com/blog/wp-content/themes/intro/assets/static/js/comment-reply.js?ver=6.7.11" id="csco-comment-reply-js"></script> <script defer src="https://fatihsoysal.com/blog/wp-content/plugins/akismet/_inc/akismet-frontend.js?ver=1777452205" id="akismet-frontend-js"></script> </div> </body> </html>