<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Selman Tunc</title>
	<atom:link href="https://selmantunc.com.tr/feed/" rel="self" type="application/rss+xml" />
	<link>https://selmantunc.com.tr</link>
	<description></description>
	<lastBuildDate>Wed, 01 Jul 2026 06:44:05 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://selmantunc.com.tr/wp-content/uploads/2023/07/cropped-tumblr_inline_oglumuMbgO1tyldvk_540-150x150-1-32x32.jpg</url>
	<title>Selman Tunc</title>
	<link>https://selmantunc.com.tr</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Diziler ve para kazanmak</title>
		<link>https://selmantunc.com.tr/software/diziler-ve-para-kazanmak/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 01 Jul 2026 06:44:05 +0000</pubDate>
				<category><![CDATA[software]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3568</guid>

					<description><![CDATA[The text in the image highlights the rapid disruption of traditional streaming by microdrama / vertical short drama apps. Market intelligence reports from [Sensor Tower](https://sensortower.com/blog/state-of-short-drama-apps-2025) and [Omdia](https://omdia.tech.informa.com/pr/2026/feb/microdramas-overtake-streamers-on-mobile-engagement-says-omdia) reveal explosive growth&#8230;]]></description>
										<content:encoded><![CDATA[<p>The text in the image highlights the rapid disruption of traditional streaming by microdrama / vertical short drama apps. Market intelligence reports from [Sensor Tower](https://sensortower.com/blog/state-of-short-drama-apps-2025) and [Omdia](https://omdia.tech.informa.com/pr/2026/feb/microdramas-overtake-streamers-on-mobile-engagement-says-omdia) reveal explosive growth metrics across 2025 and heading into 2026: [1, 2, 3]<br />
## 💰 Explosive Financial Growth</p>
<p>*<br />
* $2.98 Billion Revenue: Global in-app purchase revenue generated by short drama apps across 2025.<br />
* 115% Year-Over-Year Increase: The third-fastest growth rate of any app category tracked by Sensor Tower. [2, 4]<br />
* </p>
<p>## ⏱️ Overtaking Mobile Engagement<br />
Data from Q4 2025 shows that daily usage of short drama leaders like ReelShort beats premium long-form streaming platforms on mobile devices in the U.S.: [2, 5] </p>
<p>*<br />
* ReelShort: 35.7 minutes per day per user.<br />
* Amazon Prime Video: 26.9 minutes per day.<br />
* Netflix Mobile: 24.8 minutes per day.<br />
* Disney+: 23.0 minutes per day. [2, 3]<br />
* </p>
<p>## 📥 Surging App Downloads</p>
<p>*<br />
* 733 Million Downloads: Total global installs driven by microdrama apps in Q4 2025 alone.<br />
* 658 Million Downloads: Total global installs for traditional long-form streaming platforms in the same timeframe. [2]<br />
* </p>
<p>The underlying analysis published by platforms like [Filmustage](https://filmustage.com/blog/short-drama-apps-compared-reelshort-vs-dramabox-in-2026/) notes that these numbers anchor production and pitching decisions for creators in 2026. Major legacy Hollywood entrants are actively building mobile-first vertical strategies to tap into this highly addictive, micro-payment-driven business model. [2, 6]<br />
If you&#8217;d like, I can:</p>
<p>*<br />
* Explain the monetization models used by these apps<br />
* Provide details on the top dominating apps in this space<br />
* Break down the typical genres and formats of microdramas<br />
* </p>
<p>[1] [https://finance.yahoo.com](https://finance.yahoo.com/news/microdramas-overtake-streamers-mobile-engagement-061100325.html)<br />
[2] [https://filmustage.com](https://filmustage.com/blog/short-drama-apps-compared-reelshort-vs-dramabox-in-2026/)<br />
[3] [https://omdia.tech.informa.com](https://omdia.tech.informa.com/pr/2026/feb/microdramas-overtake-streamers-on-mobile-engagement-says-omdia)<br />
[4] [https://www.media-marketing.com](https://www.media-marketing.com/en/news/microdrama-apps-overtake-streamers-on-mobile/)<br />
[5] [https://deadline.com](https://deadline.com/2026/02/microdrama-more-time-cellphones-streaming-services-omdia-1236732921/)<br />
[6] [https://www.youtube.com](https://www.youtube.com/watch?v=vsQHJUzaYqg&#038;t=3)</p>
<p>Evet, bu veriler kesinlikle doğrudur ve bu sektörde gerçekten bu kadar büyük kazançlar bulunmaktadır. [1, 2]<br />
Görselde yer alan istatistikler, mobil pazar analiz şirketleri [Sensor Tower](https://sensortower.com/blog/state-of-short-drama-apps-2025) ve [Omdia](https://omdia.tech.informa.com/pr/2026/feb/microdramas-overtake-streamers-on-mobile-engagement-says-omdia) tarafından yayınlanan resmi raporlara dayanmaktadır. Hatta güncel küresel pazar payı verileri incelendiğinde, bu dikey kısa dizi (microdrama) sektörünün toplam büyüklüğü (Çin içi pazar dahil) 11 milyar doları aşmış durumdadır. [1, 2, 3, 4]<br />
Bu kadar yüksek kazançların oluşmasının ardında yatan temel faktörler şunlardır:<br />
## 🪙 Pahalı ve Agresif Para Kazanma Modeli</p>
<p>*<br />
* Bölüm Başına Ödeme: Netflix gibi platformlara ayda sabit bir ücret ödersiniz. Short drama uygulamalarında (ReelShort, DramaBox vb.) ise ilk 5-10 bölüm ücretsizdir. Sonraki her bir dakikalık bölümü izlemek için &#8220;jeton&#8221; (coin) satın almanız gerekir. [1]<br />
* Tuzak Kurgular: Diziler tam en heyecanlı yerinde (cliffhanger) bittiği için kullanıcılar fark etmeden ardı ardına jeton harcar. Bir dizinin tamamını (ortalama 60-90 bölüm) bitirmek bazen 50 ila 100 dolar arasında bir maliyete ulaşabilir. Bu da sinema biletinden veya aylık Netflix aboneliğinden çok daha pahalıdır.<br />
* </p>
<p>## 🎬 Düşük Maliyet, Yüksek Kâr Marjı</p>
<p>*<br />
* Ucuz Prodüksiyon: Hollywood yapımları milyonlarca dolar harcarken, bu dikey diziler Los Angeles veya Doğu Avrupa&#8217;da, amatör ya da yarı profesyonel oyuncularla, telefonların dikey formatına uygun olarak 150.000 &#8211; 250.000 gibi çok düşük bütçelerle, sadece birkaç günde çekilir.<br />
* Hızlı Geri Dönüş: Yatırılan bütçe, agresif sosyal medya reklamları sayesinde birkaç hafta içinde katlanarak geri kazanılır. [1, 5]<br />
* </p>
<p>## 📈 Devlerin Rekabeti (2026 Trendi)<br />
Pazardaki bu devasa para akışı nedeniyle, 2026 yılı itibarıyla Disney (Disney Accelerator programı üzerinden), Amazon ve TikTok (Pine Drama) gibi dev şirketler de kendi dikey kısa dizi formatlarını ve yatırımlarını devreye sokarak bu milyar dolarlık pastadan pay almaya başlamıştır. [1, 5]<br />
Kısacası, insanların mobil cihazlardaki kısalan dikkat sürelerini ve &#8220;merak&#8221; duygusunu paraya çeviren bu sistem, şu an uygulama dünyasının en çok kazandıran iş modellerinden biridir. [2, 6] </p>
<p>[1] [https://filmustage.com](https://filmustage.com/blog/short-drama-apps-compared-reelshort-vs-dramabox-in-2026/)<br />
[2] [https://www.media-marketing.com](https://www.media-marketing.com/en/news/microdrama-apps-overtake-streamers-on-mobile/)<br />
[3] [https://deadline.com](https://deadline.com/2026/02/microdrama-more-time-cellphones-streaming-services-omdia-1236732921/)<br />
[4] [https://www.mediapost.com](https://www.mediapost.com/publications/article/413505/microdramas-drove-in-app-revenue-of-11b-worldwide.html)<br />
[5] [https://www.linkedin.com](https://www.linkedin.com/posts/da-hoang-635186199_the-short-drama-apps-report-activity-7475810580654739456&#8211;rCf)<br />
[6] [https://asoworld.com](https://asoworld.com/blog/mobile-app-insights-13-short-drama-apps-crack-google-play-s-top-50-grossing/)</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>*Go (Golang)** ve **PHP** bilen bir yazılımcı ve flutter ogrenme</title>
		<link>https://selmantunc.com.tr/flutter/go-golang-ve-php-bilen-bir-yazilimci-ve-flutter-ogrenme/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 30 Jun 2026 08:16:40 +0000</pubDate>
				<category><![CDATA[flutter]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3566</guid>

					<description><![CDATA[**Go (Golang)** ve **PHP** bilen bir yazılımcı, programlamanın temel kavramlarına (nesne yönelimli programlama, veri tipleri, eşzamanlılık/asenkron işlemler, API entegrasyonları vb.) zaten hakimdir. Bu altyapı sayesinde **Dart** dili ve **Flutter** framework&#8217;ünü&#8230;]]></description>
										<content:encoded><![CDATA[<p>**Go (Golang)** ve **PHP** bilen bir yazılımcı, programlamanın temel kavramlarına (nesne yönelimli programlama, veri tipleri, eşzamanlılık/asenkron işlemler, API entegrasyonları vb.) zaten hakimdir. Bu altyapı sayesinde **Dart** dili ve **Flutter** framework&#8217;ünü öğrenme süreci oldukça hızlı olacaktır.</p>
<p>Böyle bir profile sahip birinin öğrenme eğrisi ve tahmini süreleri şu şekildedir:</p>
<p>### 1. Aşama: Dart Dilini Öğrenmek (1 &#8211; 3 Gün)<br />
Dart, modern ve öğrenmesi oldukça kolay bir dildir. C-style syntax (C, Java, C#, JavaScript benzeri) kullanır.<br />
* **PHP (OOP) ve Go (Statik Tip) Avantajı:** PHP&#8217;nin modern nesne yönelimli yapısı (sınıflar, arayüzler) ve Go&#8217;nun güçlü statik tipleme (strongly-typed) disiplini sayesinde Dart&#8217;ın sözdizimine (syntax) uyum sağlamak maksimum **2-3 gün** sürer.<br />
* **Null Safety:** Dart&#8217;ın güvenli null yapısı (Sound Null Safety) Go&#8217;daki pointer kontrolü veya PHP&#8217;deki null kontrolleri ile benzer mantıktadır, bu yüzden hiç yabancılık çekmezsiniz.</p>
<p>### 2. Aşama: Flutter ve Bildirimsel (Declarative) UI Mantığı (1 Hafta)<br />
Backend geliştiriciler genellikle yukarıdan aşağıya akan (imperative) veya sunucu taraflı şablon (template) yapılarına alışıktır. Flutter ise **Declarative UI** (React, SwiftUI benzeri) mantığıyla çalışır.<br />
* Arayüzün durumuna (State) göre ekranın kendini yeniden çizmesi mantığını kavramak,<br />
* `Row`, `Column`, `Stack`, `Container` gibi temel arayüz bileşenlerini (Widgets) öğrenmek ve yerleşim (Layout) kurallarına alışmak yaklaşık **1 hafta** sürer.</p>
<p>### 3. Aşama: Durum Yönetimi (State Management) ve Asenkron Yapı (1 &#8211; 2 Hafta)<br />
Backend dünyasından gelenler için en büyük zihinsel dönüşüm buradadır. Uygulamanın durumunu (kullanıcı giriş yaptı mı, sepette ne var, tema koyu mu açık mı) cihaz üzerinde yönetmek gerekir.<br />
* Go&#8217;daki goroutine/channel mantığına aşina biri için Dart&#8217;taki `Future`, `Stream` ve `async/await` yapısı çocuk oyuncağı gelecektir.<br />
* **Riverpod** veya **Bloc** gibi durum yönetimi kütüphanelerini öğrenip uygulamaya entegre etmek **1-2 hafta** sürer.</p>
<p>&#8212;</p>
<p>### Toplam Süre Özeti</p>
<p>| Aşama | Ne Öğrenilecek? | Süre |<br />
| :&#8212; | :&#8212; | :&#8212; |<br />
| **Dart Temelleri** | Sınıflar, Fonksiyonlar, Null Safety | **1-3 Gün** |<br />
| **Flutter UI** | Widget Ağacı, Layout, Navigasyon | **5-7 Gün** |<br />
| **State &#038; Async** | Riverpod/Bloc, HTTP İstekleri, Stream&#8217;ler | **7-10 Gün** |<br />
| **Gerçek Proje** | Bir API&#8217;ye bağlanıp tam çalışan uygulama yapmak | **1 Hafta** |<br />
| **TOPLAM** | **Üretken (Productive) seviyeye gelmek** | **~3 &#8211; 4 Hafta (1 Ay)** |</p>
<p>**Özetle:** Günde 2-3 saatlik düzenli bir çalışma ile **1 ay içinde** kendi mobil uygulamanızı sıfırdan yazıp API&#8217;lerinizle konuşturacak seviyeye rahatlıkla gelebilirsiniz.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>menu design</title>
		<link>https://selmantunc.com.tr/software/menu-design/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 30 Jun 2026 05:51:04 +0000</pubDate>
				<category><![CDATA[software]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3564</guid>

					<description><![CDATA[WordPress benzeri, iç içe geçebilen (nested) menüler yapmak için en temiz yöntem **SortableJS** kütüphanesini kullanmaktır. jQuery bağımlılığı yoktur (Vanilla JS ile çalışır) ancak jQuery ile de kolayca entegre olur. ###&#8230;]]></description>
										<content:encoded><![CDATA[<p>WordPress benzeri, iç içe geçebilen (nested) menüler yapmak için en temiz yöntem **SortableJS** kütüphanesini kullanmaktır. jQuery bağımlılığı yoktur (Vanilla JS ile çalışır) ancak jQuery ile de kolayca entegre olur.</p>
<p>### 1. Frontend: SortableJS ile Menü Yönetimi</p>
<p>Önce CDN üzerinden gerekli kütüphaneyi HTML&#8217;ine ekle:</p>
<p>&#8220;`html<br />
<script src="https://raw.githack.com/SortableJS/Sortable/master/Sortable.js"></script></p>
<p>&#8220;`</p>
<p>#### HTML Yapısı:</p>
<p>&#8220;`html</p>
<ul id="menu-list" class="menu-container">
<li data-id="1">Anasayfa</li>
<li data-id="2">Hakkımızda
<ul class="nested-menu">
<li data-id="3">Ekibimiz</li>
</ul>
</li>
<li data-id="4">İletişim</li>
</ul>
<p><button id="save-menu">Menüyü Kaydet</button></p>
<p>&#8220;`</p>
<p>#### JavaScript:</p>
<p>&#8220;`javascript<br />
new Sortable(document.getElementById(&#8216;menu-list&#8217;), {<br />
    group: &#8216;nested&#8217;,<br />
    animation: 150,<br />
    fallbackOnBody: true,<br />
    swapThreshold: 0.65<br />
});</p>
<p>document.getElementById(&#8216;save-menu&#8217;).addEventListener(&#8216;click&#8217;, () => {<br />
    // Tüm listeyi serialize et ve Go backend&#8217;e gönder<br />
    const data = getOrder(document.getElementById(&#8216;menu-list&#8217;));<br />
    fetch(&#8216;/api/menu/save&#8217;, {<br />
        method: &#8216;POST&#8217;,<br />
        body: JSON.stringify(data),<br />
        headers: {&#8216;Content-Type&#8217;: &#8216;application/json&#8217;}<br />
    });<br />
});</p>
<p>&#8220;`</p>
<p>&#8212;</p>
<p>### 2. Backend: Go (Fiber) Skeleton</p>
<p>Veritabanında menüleri `id`, `parent_id` ve `order` sütunları ile tutman yeterlidir. Go tarafında gelen veriyi karşılayacak ve kaydedecek yapıyı kuralım.</p>
<p>#### Model (GORM):</p>
<p>&#8220;`go<br />
type MenuItem struct {<br />
    ID       uint   `json:&#8221;id&#8221;`<br />
    ParentID uint   `json:&#8221;parent_id&#8221;`<br />
    Title    string `json:&#8221;title&#8221;`<br />
    Order    int    `json:&#8221;order&#8221;`<br />
}</p>
<p>&#8220;`</p>
<p>#### API Handler (Fiber):</p>
<p>&#8220;`go<br />
package main</p>
<p>import (<br />
    &#8220;github.com/gofiber/fiber/v2&#8221;<br />
)</p>
<p>func main() {<br />
    app := fiber.New()</p>
<p>    app.Post(&#8220;/api/menu/save&#8221;, func(c *fiber.Ctx) error {<br />
        var menuItems []MenuItem<br />
        if err := c.BodyParser(&#038;menuItems); err != nil {<br />
            return c.Status(400).JSON(fiber.Map{&#8220;error&#8221;: &#8220;Geçersiz veri&#8221;})<br />
        }</p>
<p>        // Veritabanı işlemi:<br />
        // 1. Transaction başlat (db.Begin())<br />
        // 2. Mevcut menüyü temizle veya update et<br />
        // 3. Gelen yeni sıralamayı döngüyle veritabanına işle</p>
<p>        return c.JSON(fiber.Map{&#8220;status&#8221;: &#8220;success&#8221;})<br />
    })</p>
<p>    app.Listen(&#8220;:3000&#8221;)<br />
}</p>
<p>&#8220;`</p>
<p>### Kritik İpuçları:</p>
<p>1. **Serialization:** `SortableJS` ile iç içe listeleri çekerken `nested` yapıyı korumak için `sortable.toArray()` yerine her `li` elemanının verisini (id ve parent) manuel olarak bir `map` içinde toplamanı öneririm.<br />
2. **Veritabanı:** PostgreSQL kullanıyorsan, menüleri getirmek için `WITH RECURSIVE` sorgusunu bir &#8220;view&#8221; olarak tanımlarsan, Go tarafından menüyü çekmek tek bir satır sürer.<br />
3. **Güvenlik:** Menü kaydetme endpoint&#8217;ine mutlaka bir `Auth Middleware` ekle ki herkes menüleri değiştiremesin.</p>
<p>Bu skeleton üzerinden ilerleyerek, `sortable.toArray()` fonksiyonunun döndürdüğü veriyi `JSON` olarak backend&#8217;e nasıl parse edeceğin konusunda bir örneğe ihtiyaç duyarsan detaylandırabilirim. Hangi veritabanı kütüphanesini (GORM, sqlx vb.) kullanıyorsun?</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Özne &#8211; Nesne &#8211; Yüklem baska hangi dillerde turkce gibidir</title>
		<link>https://selmantunc.com.tr/lingustik/ozne-nesne-yuklem-baska-hangi-dillerde-turkce-gibidir/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 27 Jun 2026 08:07:19 +0000</pubDate>
				<category><![CDATA[lingustik]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3562</guid>

					<description><![CDATA[Özne &#8211; Nesne &#8211; Yüklem (Subject &#8211; Object &#8211; Verb, kısaca **SOV**) dizilimi, aslında dünyadaki dillerin yaklaşık %45&#8217;inde görülen **en yaygın** cümle yapısıdır. Yani Türkçe veya Japonca bu konuda istisna&#8230;]]></description>
										<content:encoded><![CDATA[<p>Özne &#8211; Nesne &#8211; Yüklem (Subject &#8211; Object &#8211; Verb, kısaca **SOV**) dizilimi, aslında dünyadaki dillerin yaklaşık %45&#8217;inde görülen **en yaygın** cümle yapısıdır. Yani Türkçe veya Japonca bu konuda istisna değil, aksine dünya genelindeki çoğunluğu temsil eder.</p>
<p>İşte Türkçedeki gibi Özne &#8211; Nesne &#8211; Yüklem dizilimine sahip olan başlıca diller:</p>
<p>### Asya Dilleri</p>
<p>* **Korece:** Japonca ile birlikte Türkçeye dilbilgisi (sondan eklemelilik ve SOV yapısı) olarak en çok benzeyen dillerden biridir.<br />
* **Moğolca:** Dil yapısı ve mantığı açısından Türkçeye son derece paralel bir dildir.<br />
* **Hintçe ve Urduca:** Hint-Avrupa dil ailesinden olmalarına rağmen cümle dizilimleri SOV şeklindedir.<br />
* **Tibetçe ve Birmanca:** Çin-Tibet dil ailesine mensup olmalarına rağmen (örneğin Mandarin Çincesi genellikle SVO iken) bu diller SOV yapısını benimsemiştir.</p>
<p>### Hint-Avrupa ve Orta Doğu Dilleri</p>
<p>* **Farsça:** Hint-Avrupa dil ailesinden olmasına rağmen tıpkı Türkçe gibi Özne-Nesne-Yüklem dizilimi kullanır (Örn: *Man sib mikhoram* &#8211; Ben elma yiyorum).<br />
* **Kürtçe ve Peştuca:** İrani diller kolundan olan bu dillerde de temel yapı SOV&#8217;dur.<br />
* **Latince:** Günümüz Avrupa dilleri (İngilizce, İspanyolca, Fransızca vb.) genellikle Özne-Yüklem-Nesne (SVO) kullansa da, Avrupa dillerinin en önemli atalarından olan Klasik Latince büyük oranda SOV dizilimine sahipti (Örn: *Lupus ovem edit* &#8211; Kurt koyunu yer).</p>
<p>### Diğer Önemli Örnekler</p>
<p>* **Baskça:** Avrupa&#8217;daki diğer dillerin kökenine uymayan, İspanya-Fransa sınırındaki bu izole dil de SOV yapısını kullanır.<br />
* **Tamilce (ve diğer Dravid dilleri):** Güney Hindistan&#8217;da konuşulan bu köklü diller de aynı dizilimi takip eder.<br />
* **Diğer Türk Dilleri:** Doğal olarak Azerbaycan Türkçesi, Kazakça, Özbekçe, Kırgızca, Tatarca gibi diller de birebir aynı yapıya sahiptir.</p>
<p>&#8212;</p>
<p>> **Ortak Bir Özellik:** Özne-Nesne-Yüklem (SOV) dizilimi kullanan dillerin çok büyük bir kısmında yapısal bir mantık ortaklığı vardır. İngilizcedeki gibi &#8220;preposition&#8221; (ön takı / *in* the house) kullanmak yerine, Türkçedeki veya Japoncadaki gibi &#8220;postposition&#8221; (son takı / ev-*de*) kullanırlar. Ayrıca bu dillerde sıfatlar neredeyse her zaman nitelenen isimden önce gelir (*kırmızı araba* gibi).</p>
<p>&#8212;&#8212;&#8212;&#8211;</p>
<p>Macarca (Ural dil ailesine mensuptur) bu konuda oldukça ilginç ve özel bir örnektir.</p>
<p>Macarca, Türkçedeki gibi katı bir **Özne-Nesne-Yüklem (SOV)** kuralına sahip değildir. Hatta İngilizcedeki gibi katı bir SVO (Özne-Yüklem-Nesne) kuralı da yoktur.</p>
<p>Macarca, **esnek (serbest) kelime dizilimine** sahip ve **&#8221;odak (vurgu) merkezli&#8221;** bir dildir.</p>
<p>### Macarcada Kelime Dizilimi Mantığı</p>
<p>Macarcada cümlenin ögelerinin yeri, **neyi vurgulamak istediğinize** göre sürekli değişir. Kural basittir: **Vurgulanmak istenen kelime daima fiilden (yüklemden) hemen önce gelir.**</p>
<p>Örneğin &#8220;Peter elmayı yiyor&#8221; cümlesini ele alalım:</p>
<p>* **Nötr (Vurgusuz):** *Péter eszi az almát.* (Péter yiyor elmayı &#8211; **SVO**)<br />
* **Elmayı vurgulamak (Başka bir şeyi değil, elmayı):** *Péter az almát eszi.* (Péter elmayı yiyor &#8211; **SOV**, Türkçe ile aynı dizilim)<br />
* **Peter&#8217;i vurgulamak (Başkası değil, Peter):** *Az almát Péter eszi.* (Elmayı Péter yiyor &#8211; **OSV**)</p>
<p>Gördüğünüz gibi, Macarcada kelimelerin yerini değiştirmek cümlenin dilbilgisini bozmaz, sadece cümlenin hangi sorunun cevabı olduğunu (vurguyu) değiştirir.</p>
<p>### Neden Türklere Çok Tanıdık Gelir?</p>
<p>Macarca kelime dizilimi açısından esnek olsa da, dilin iç işleyiş mantığı **Türkçe ve Japonca ile neredeyse birebir aynıdır.** Bu yüzden bir Türk için Macarca öğrenmek, bir İngiliz&#8217;e kıyasla çok daha kolaydır. İşte başlıca ortak noktalar:</p>
<p>* **Sondan Eklemeli Yapı (Aglutinatif):** Tıpkı Türkçe ve Japonca gibi ekler kelimenin sonuna gelir. Ön takı (preposition) yoktur, son takı (postposition) vardır.<br />
* *Ház* (Ev) -> *Ház-ban* (Ev-de)</p>
<p>* **Ünlü Uyumu:** Türkçedeki büyük/küçük ünlü uyumu kuralının çok benzeri Macarcada da bulunur. Ekler, kelimedeki seslilerin kalın veya ince oluşuna göre değişir.<br />
* **Cinsiyet Ayrımı Yoktur:** İspanyolca, Fransızca veya Arapçadaki gibi eril/dişil kelimeler yoktur. &#8220;O&#8221; zamiri için İngilizcedeki (he/she/it) ayrımı yoktur, sadece **&#8221;ő&#8221;** (o) kullanılır.<br />
* **Yokluk İfadesi:** İngilizcede &#8220;var değil&#8221; mantığı kullanılırken, Macarcada tıpkı Türkçedeki gibi &#8220;var&#8221; (*van*) ve &#8220;yok&#8221; (*nincs*) kelimeleri ayrıdır.</p>
<p>Özetle; Macarca nötr halinde genellikle SVO&#8217;ya (Özne-Yüklem-Nesne) eğilim gösterse de, gerektiğinde Türkçe gibi SOV (Özne-Nesne-Yüklem) dizilimine geçebilen, dilbilgisi kuralları olarak Türkçenin Avrupa&#8217;daki &#8220;uzak kuzeni&#8221; gibi davranan bir dildir.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Rusça (Hint-Avrupa dil ailesinin Slav kolundandır), temel ve nötr halinde **Özne-Yüklem-Nesne (SVO)** dizilimine sahiptir. Bu yönüyle standart yapısı İngilizceye benzer, Türkçeden ayrılır.</p>
<p>Ancak tıpkı Macarcada olduğu gibi, Rusçada da kelime dizilimi **son derece esnektir.** Hatta Rusça, dünyadaki kelime dizilimi en serbest olan dillerden biridir. İstediğiniz an cümleyi Türkçe gibi **Özne-Nesne-Yüklem (SOV)** şeklinde kurabilirsiniz ve bu dilbilgisi açısından tamamen doğru kabul edilir.</p>
<p>### Rusçada Kelimelerin Yeri Neden Değişebilir?</p>
<p>Rusçada kelimelerin cümle içindeki görevini (kimin özne, kimin nesne olduğunu) dizilim değil, kelimelerin aldığı **&#8221;ismin halleri&#8221; (padej sistemi)** belirler.</p>
<p>Kelimenin sonundaki harf değişiminden kimin işi yaptığı, kimin işten etkilendiği belli olduğu için kelimeleri istediğiniz gibi karıştırabilirsiniz. Anlam bozulmaz, sadece **cümlenin vurgusu ve duygusu değişir.**</p>
<p>Örneğin; *&#8221;Kedi (Kot) fareyi (mısh) yakaladı (poymal)&#8221;* cümlesini ele alalım:</p>
<p>* **Kot poymal mısh (SVO &#8211; Nötr):** Kedi fareyi yakaladı. (Standart bilgi verişi).<br />
* **Kot mısh poymal (SOV &#8211; Türkçe gibi):** Kedi fareyi *yakaladı*! (Vurgu eylemdedir, kaçırmadı yakaladı anlamı katar).<br />
* **Mısh poymal kot (OVS):** Fareyi *kedi* yakaladı. (Köpek değil, kedi yakaladı vurgusu vardır).</p>
<p>Tüm bu dizilimler günlük hayatta yaygın olarak kullanılır. Rusçada genellikle en önemli veya en yeni bilgi cümlenin **sonuna** saklanır.</p>
<p>### Türkçeden Temel Farkları</p>
<p>Rusça, istediğiniz zaman Türkçe gibi (SOV) dizilebilmesine rağmen dil mantığı olarak Türkçeden çok uzaktır:</p>
<p>* **Bükümlü Dil (Fusional):** Türkçe ve Japoncadaki sondan eklemeli (yapboz gibi ekleri uç uca ekleme) mantığı yoktur. Kelimeler ek alırken kökleri tamamen değişebilir (bükülebilir).<br />
* **Ön Takı (Preposition) Kullanımı:** Türkçede &#8220;masanın **üzerinde**&#8221; derken yön/konum bildiren ekler kelimenin sonuna gelirken, Rusçada İngilizcedeki gibi kelimenin başına ayrı bir edat olarak gelir (***na* stole**).<br />
* **Cinsiyet (Eril/Dişil/Nötr):** Cansız nesneler dahil her ismin bir cinsiyeti vardır ve sıfatlar, zamirler, hatta geçmiş zaman fiilleri bile bu cinsiyete göre şekil değiştirir.</p>
<p>> **Özetle:** Rusça standart olarak Özne-Yüklem-Nesne (SVO) dilidir. Ancak ismin halleri sistemi sayesinde, duruma ve vermek istediğiniz duyguya göre kelimelerin yerini tıpkı bir Türkçe cümlesiymiş gibi (Özne-Nesne-Yüklem) dizebilirsiniz. Ünlü &#8220;Seni seviyorum&#8221; cümlesi olan *Ya lyublyu tebya (SVO)* yerine, günlük hayatta tıpkı Türkçe gibi dizilen *Ya tebya lyublyu (SOV)* versiyonunu çok sık duyarsınız.</p>
<p>&#8212;&#8212;&#8212;</p>
<p>Belarusça (Doğu Slav dilleri kolundandır), dilbilgisi yapısı ve kelime dizilimi açısından **Rusça ile neredeyse birebir aynıdır.**</p>
<p>Farklı dillerin gramer yapılarını kelime kelime analiz edip karşılaştırırken, Belarusçayı yapısal olarak Rusça ile aynı kategoriye koyabiliriz. Temel dizilimi **Özne-Yüklem-Nesne (SVO)** şeklindedir, ancak tıpkı Rusçada olduğu gibi **kelime dizilimi tamamen esnektir.**</p>
<p>### Esneklik ve &#8220;İsmin Halleri&#8221; (Padej) Sistemi</p>
<p>Belarusçada da kelimelerin cümledeki görevini sıralama değil, aldıkları ekler (ismin halleri sistemi) belirler. Bu nedenle cümleyi Türkçedeki gibi **Özne-Nesne-Yüklem (SOV)** şeklinde dizmek gramer açısından tamamen doğrudur ve eylemi değil de nesneyi vurgulamak için sıkça kullanılır.</p>
<p>Japonca örneğimizdeki &#8220;Ben çay içiyorum&#8221; cümlesini Belarusça kelime kelime analiz edelim:</p>
<p>* **Standart (Nötr) Dizilim (SVO):** Я п&#8217;ю чай *(Ya p&#8217;yu çay)* &#8211; &#8220;Ben içiyorum çay.&#8221;<br />
* **Türkçe Gibi (Vurgulu) Dizilim (SOV):** Я чай п&#8217;ю *(Ya çay p&#8217;yu)* &#8211; &#8220;Ben çay içiyorum!&#8221;</p>
<p>## Kelime Analizi</p>
<p>Cümlenin yapıtaşları şu şekildedir:</p>
<p>* **Я (Ya):** &#8220;Ben&#8221; (Özne &#8211; Yalın hal)<br />
* **п&#8217;ю (p&#8217;yu):** &#8220;İçiyorum&#8221; (Yüklem &#8211; 1. tekil şahıs şimdiki zaman çekimi. Fiil kökü *піць* yani içmektir).<br />
* **чай (çay):** &#8220;Çay&#8221; (Nesne &#8211; Belirtme hali / Akuzatif. Eril ve cansız bir isim olduğu için kelime yalın haliyle aynı kalır ancak cümle içindeki görevi nesnedir).</p>
<p>## Karşılaştırmalı Tablo</p>
<p>| Dil | Dizilim Mantığı | Örnek (Ben çay içiyorum) |<br />
| &#8212; | &#8212; | &#8212; |<br />
| **Türkçe** | Katı SOV (Özne-Nesne-Yüklem) | Ben çay içiyorum. |<br />
| **Rusça** | Esnek, Nötr SVO | Я пью чай *(Ya pyu çay)* |<br />
| **Belarusça** | Esnek, Nötr SVO | Я п&#8217;ю чай *(Ya p&#8217;yu çay)* |</p>
<p>### Rusçadan Temel Farkı Nedir?</p>
<p>Yapısal ve dizilimsel olarak Rusçadan farksız olsa da (bükümlü yapı, edat kullanımı, eril/dişil/nötr cinsiyet ayrımı), **kelime dağarcığı ve fonetik** olarak ayrışır.</p>
<p>Tarihsel nedenlerden ve coğrafi yakınlıktan dolayı Belarusçada, Rusçaya kıyasla çok daha fazla Lehçe (Polonyaca) kökenli kelime bulunur. Ayrıca Rusçadaki &#8220;T&#8221; ve &#8220;D&#8221; sesleri Belarusçada genellikle &#8220;Ts&#8221; ve &#8220;Dz&#8221; olarak daha yumuşak çıkar (buna dilbilimde *dzekanye/tsekanye* denir). Ancak bu fonetik farklar, kelimeleri Türkçe gibi yan yana dizme esnekliğini değiştirmez.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Supabase Error fetching items: ERROR: prepared statement &#8220;stmtcache_&#8221; already exists (SQLSTATE 42P05)  exit</title>
		<link>https://selmantunc.com.tr/golang/supabase-error-fetching-items-error-prepared-statement-stmtcache_-already-exists-sqlstate-42p05-exit/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 26 Jun 2026 23:24:24 +0000</pubDate>
				<category><![CDATA[golang]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3560</guid>

					<description><![CDATA[Bu hata (`SQLSTATE 42P05`), veritabanı sürücünüzün **&#8221;Prepared Statement&#8221; (Hazırlanmış İfade)** önbelleğe alma mekanizmasının, Supabase&#8217;in bağlantı havuzu (connection pooler &#8211; Supavisor/PgBouncer) ile çakışmasından kaynaklanır. Log formatınıza (`2026/06/26 17:01:31 &#8230; exit status&#8230;]]></description>
										<content:encoded><![CDATA[<p>Bu hata (`SQLSTATE 42P05`), veritabanı sürücünüzün **&#8221;Prepared Statement&#8221; (Hazırlanmış İfade)** önbelleğe alma mekanizmasının, Supabase&#8217;in bağlantı havuzu (connection pooler &#8211; Supavisor/PgBouncer) ile çakışmasından kaynaklanır.</p>
<p>Log formatınıza (`2026/06/26 17:01:31 &#8230; exit status 1`) bakılırsa büyük ihtimalle **Go (Golang)** kullanıyorsunuz.</p>
<p>Supabase, bağlantıları yönetmek için varsayılan olarak &#8220;Transaction&#8221; modunda bir havuz kullanır (genellikle port 6543). Bu modda, uygulamanız bir `prepared statement` oluşturup bunu önbelleğe aldığında (isim: `stmtcache_&#8230;`), bir sonraki sorguda havuz size farklı bir arka plan bağlantısı verebilir veya aynı bağlantıyı başka bir işlem için kullanabilir. Bu durum, PostgreSQL&#8217;in &#8220;bu isimde bir statement zaten var&#8221; hatası vermesine sebep olur.</p>
<p>İşte bu sorunu çözmek için uygulayabileceğiniz yöntemler:</p>
<p>### Çözüm 1: ORM / Sürücü Seviyesinde Prepared Statement&#8217;ları Kapatmak (Önerilen)</p>
<p>Eğer uygulamanızda çok sayıda anlık bağlantı yapılıyorsa (örneğin serverless/Lambda fonksiyonları), bağlantı havuzunu (Port 6543) kullanmaya devam etmeli ama sürücünüzün statement önbelleğini kapatmalısınız.</p>
<p>**Eğer Go ve GORM kullanıyorsanız:**<br />
Veritabanı bağlantınızı başlatırken `PrepareStmt` özelliğini `false` olarak ayarlayın:</p>
<p>&#8220;`go<br />
db, err := gorm.Open(postgres.Open(dsn), &#038;gorm.Config{<br />
    PrepareStmt: false, // Bu ayarı false yapın veya tamamen kaldırın (varsayılan false&#8217;tur)<br />
})</p>
<p>&#8220;`</p>
<p>**Eğer Go ve `pgx` sürücüsünü kullanıyorsanız:**<br />
Bağlantı dizesinin (connection string) sonuna statement cache&#8217;i devre dışı bırakacak parametreler ekleyin:</p>
<p>&#8220;`text<br />
postgres://postgres.[projeniz]:[şifreniz]@aws-0-eu-central-1.pooler.supabase.com:6543/postgres?default_query_exec_mode=exec</p>
<p>&#8220;`</p>
<p>Veya bağlantı dizesinde `statement_cache_capacity=0` parametresini kullanın.</p>
<p>&#8212;</p>
<p>### Çözüm 2: Supabase Doğrudan Bağlantısını (Direct Connection) Kullanmak</p>
<p>Eğer uygulamanız uzun süre çalışan (long-running) bir sunucuda çalışıyorsa ve bağlantı sınırlarını aşma riskiniz yoksa, Supabase&#8217;in bağlantı havuzunu bypass edip doğrudan veritabanına bağlanabilirsiniz. Doğrudan bağlantılarda prepared statement&#8217;lar sorunsuz çalışır.</p>
<p>Supabase Dashboard&#8217;dan alacağınız bağlantı dizesindeki portu **6543** yerine **5432** olarak değiştirin:</p>
<p>* **Hata veren bağlantı (Pooler):** `[&#8230;pooler.supabase.com:6543/postgres](https://&#8230;pooler.supabase.com:6543/postgres)`<br />
* **Sorunsuz çalışacak bağlantı (Direct):** `[&#8230;db.supabase.com:5432/postgres](https://&#8230;db.supabase.com:5432/postgres)`</p>
<p>*(Not: Supabase yakın zamanda pooler altyapısını güncelledi, eğer yeni Supavisor kullanıyorsanız host adresi aynı kalıp sadece port 5432 olarak değişebilir. Dashboard -> Database -> Settings -> Connection String altından &#8220;Direct Connection&#8221; seçeneğini kopyalayabilirsiniz.)*</p>
<p>**Özetle:** Supabase pooler (6543) kullanıyorsanız driver&#8217;ın statement önbelleğini kapatın. Eğer önbelleği kapatamıyor veya kapatmak istemiyorsanız, doğrudan bağlantı portunu (5432) kullanın.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Google AI Ultra paketinin verdigi ücretsiz Google Cloud kredisi  ile gemini api ye baglanabilir miyim ve bu kredi bir seferlik mi verilir aylik mi</title>
		<link>https://selmantunc.com.tr/gemini/google-ai-ultra-paketinin-verdigi-ucretsiz-google-cloud-kredisi-ile-gemini-api-ye-baglanabilir-miyim-ve-bu-kredi-bir-seferlik-mi-verilir-aylik-mi/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 26 Jun 2026 03:43:19 +0000</pubDate>
				<category><![CDATA[gemini]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3558</guid>

					<description><![CDATA[Evet, Google AI Ultra paketinin Google Developer Programı aracılığıyla sağladığı ücretsiz Google Cloud kredilerini **Gemini API bağlantısı için kullanabilirsiniz.** Bu kredinin verilme sıklığı ve API kullanım mantığı şu şekildedir: ###&#8230;]]></description>
										<content:encoded><![CDATA[<p>Evet, Google AI Ultra paketinin Google Developer Programı aracılığıyla sağladığı ücretsiz Google Cloud kredilerini **Gemini API bağlantısı için kullanabilirsiniz.**</p>
<p>Bu kredinin verilme sıklığı ve API kullanım mantığı şu şekildedir:</p>
<p>### 1. Krediler Aylık mı Yoksa Bir Seferlik mi?</p>
<p>Bu krediler **AYLIK** olarak yenilenir.<br />
Sistem şu şekilde işler:</p>
<p>* Seçtiğiniz Google AI Ultra paketine göre her ay hesabınıza **40$ veya 100$** değerinde Google Cloud kredisi tanımlanır.<br />
* **Kritik Kural:** Bu aylık krediler bir sonraki aya devretmez. O yüzden o ay içinde projenizde, veri tabanlarınızda veya API isteklerinizde bu krediyi sonuna kadar harcayabilirsiniz.</p>
<p>&#8212;</p>
<p>### 2. Gemini API&#8217;ye Bağlanırken Dikkat Etmeniz Gerekenler</p>
<p>Daha önce bahsettiğimiz gibi, bu ücretsiz Cloud kredisini Gemini API için harcamak istiyorsanız **kesinlikle Google Cloud Vertex AI** API kapısını kullanmalısınız.</p>
<p>* **Neden Vertex AI?** Aldığınız bu krediler bir Google Cloud promosyon kodudur. Google Cloud Console (`console.cloud.google.com`) üzerindeki faturalandırma (Billing) hesabınıza tanımlanır. Vertex AI da doğrudan bu faturadan düştüğü için **istekleriniz tamamen ücretsiz kredinizden karşılanır.**<br />
* **Neden AI Studio Değil?** API anahtarınızı (API Key) direkt Google AI Studio (`ai.google.dev`) üzerinden alıp oraya kredi kartı bağlarsanız, harcamalarınız kartınızdan nakit olarak çekilir; Google Cloud kredileriniz orada geçerli olmaz.</p>
<p>&#8212;</p>
<p>### 💡 Özetle</p>
<p>Google AI Ultra abonesi olduğunuzda, her ay düzenli gelen **40$/100$&#8217;lık bulut kredisini** Vertex AI üzerinden Gemini modellerine (`Gemini 3 Pro`, `Gemini 3 Flash` vb.) bağlanmak için gönül rahatlığıyla kullanabilirsiniz. Bu sayede hem Antigravity IDE içindeki yerel limitleriniz artar hem de dışarıda geliştirdiğiniz kendi yazılım projelerinizin yapay zeka harcamalarını tamamen Google&#8217;a ödetmiş olursunuz.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ai nasil dusunur 1</title>
		<link>https://selmantunc.com.tr/ai/ai-nasil-dusunur-1/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 08 Jun 2026 09:10:23 +0000</pubDate>
				<category><![CDATA[ai]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3554</guid>

					<description><![CDATA[Harika bir soru! Yazılım geliştirme süreçlerinde (özellikle Hexagonal Architecture veya Clean Architecture gibi katmanlı mimarilerde) yapılan bir değişikliğin uygulamanın neresinde &#8220;kırılmaya&#8221; veya &#8220;eksikliğe&#8221; yol açtığını bulmak tamamen veri akışını (data&#8230;]]></description>
										<content:encoded><![CDATA[<p>Harika bir soru! Yazılım geliştirme süreçlerinde (özellikle Hexagonal Architecture veya Clean Architecture gibi katmanlı mimarilerde) yapılan bir değişikliğin uygulamanın neresinde &#8220;kırılmaya&#8221; veya &#8220;eksikliğe&#8221; yol açtığını bulmak tamamen veri akışını (data flow) takip etmekten geçiyor.</p>
<p>Bu eksikliği fark etme sürecimi adım adım şöyle özetleyebilirim:</p>
<p>**1. &#8220;Burada Hatalar Var&#8221; Sözü Üzerine İlk Hipotezler**<br />
Siz bana `&#8221;burada hatalar var, tekrar düzenle&#8221;` dediğinizde ilk iş olarak arka planda `go build ./&#8230;` ve `go vet ./&#8230;` komutlarını çalıştırdım. Kod hiçbir derleme veya sözdizimi (syntax) hatası vermedi. Derleme hatası olmadığına göre sorunun **mantıksal (logical)** veya **eksik bir entegrasyon** olduğunu anladım. </p>
<p>**2. Veri Akışını (Data Flow) Zihnimde Canlandırma**<br />
Sisteminize yeni alanlar (`Word`, `RootAndStructure` vb.) eklemiştik. Bir verinin dışarıdan (API veya form) gelip veritabanına yazılma yolculuğunu düşündüm:<br />
`HTTP Handler -> App Service -> Domain Model -> Outbound Adapters (Postgres, Mongo vb.)`</p>
<p>Domain modeline ve Postgres&#8217;e bu alanları eklediğimi biliyordum. Ancak verinin bu iki nokta arasında kaybolabileceği yerleri aramaya başladım.</p>
<p>**3. Uygulama (Service) Katmanındaki Gözden Kaçan Detayı Bulma**<br />
Akışı takip ederek ilk olarak `app/service.go` dosyasına baktım. Gördüm ki `CreateDi` ve `UpdateDi` metotlarında, dışarıdan gelen `input` objesindeki veriler `Di` modeline manuel olarak kopyalanıyordu (`current.Explanation = input.Explanation` gibi). Ancak benim eklediğim yeni alanların hiçbiri burada atanmıyordu! Yani siz formu doldurup göndersiniz bile, Service katmanı bu yeni alanları umursamayıp çöpe atıyordu. </p>
<p>**4. &#8220;Service Katmanını Unuttuysam, Başka Neyi Unutmuş Olabilirim?&#8221; Sorusu**<br />
Service katmanındaki bu eşleştirmeyi atladığımı fark edince, kendi kendime *&#8221;Domain&#8217;i ve Postgres&#8217;i güncelledim ama demek ki bu modülün dışarıya bağlandığı diğer portları kontrol etmedim&#8221;* dedim. </p>
<p>Hemen `adapters/outbound` dizininin içine baktım. Orada sadece `postgres` olmadığını, bir de `mongodb` klasörü bulunduğunu gördüm. </p>
<p>**5. MongoDB&#8217;nin Yapısal Farklılığını Hatırlama ve Kontrol**<br />
Golang&#8217;de Postgres için `gorm` etiketleri kullanılır ve biz bunu `postgres/repository.go` içinde halletmiştik. Ancak MongoDB tamamen farklı bir NoSQL veritabanıdır ve verileri BSON formatında dökümanlar (documents) olarak tutar. Bu yüzden MongoDB&#8217;nin kendi struct&#8217;ları (genelde `bson` etiketlerine sahip) ve kendi Mapping (eşleştirme) fonksiyonları (`toDocument`, `toDomain`, `Upsert` işlemleri içindeki `bson.M{}`) olmak zorundaydı.</p>
<p>Hemen `adapters/outbound/mongodb/repository.go` dosyasını açıp okudum ve teorimin doğru olduğunu gördüm: Oradaki `DiDocument` struct&#8217;ında ve MongoDB&#8217;ye kayıt atan `Upsert` sorgusunda yeni alanların hiçbiri yoktu. </p>
<p>**Özetle:**<br />
Sizin &#8220;hata var&#8221; uyarınız derleme hatası üretmeyince, dedektif gibi verinin yaşam döngüsünü (Handler -> Service -> Database) adım adım izledim. Service katmanındaki kopukluğu bulunca, mimarinin diğer uç noktalarına da (MongoDB gibi) şüpheyle yaklaştım ve hatanın kök nedenini bu sistematik takip sayesinde fark ettim.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>git &#8211; Local’deki tüm tag’leri silmek için:</title>
		<link>https://selmantunc.com.tr/git/git-localdeki-tum-tagleri-silmek-icin/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 27 May 2026 21:50:52 +0000</pubDate>
				<category><![CDATA[git]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3551</guid>

					<description><![CDATA[Local’deki tüm tag’leri silmek için: &#8220;`bash git tag -d $(git tag) &#8220;` Bu komut, yerel repodaki bütün tag’leri tek seferde siler. [git-scm](https://git-scm.com/docs/git-commit) İstersen önce hangi tag’ler olduğunu görmek için: &#8220;`bash&#8230;]]></description>
										<content:encoded><![CDATA[<p>Local’deki tüm tag’leri silmek için:</p>
<p>&#8220;`bash<br />
git tag -d $(git tag)<br />
&#8220;`</p>
<p>Bu komut, yerel repodaki bütün tag’leri tek seferde siler. [git-scm](https://git-scm.com/docs/git-commit)<br />
İstersen önce hangi tag’ler olduğunu görmek için:</p>
<p>&#8220;`bash<br />
git tag<br />
&#8220;`</p>
<p>Bir remote’daki tag’leri silmek farklı bir işlemdir; bu komut sadece **local** tag’leri kaldırır. [git-scm](https://git-scm.com/docs/git-commit)</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>git commit geri al</title>
		<link>https://selmantunc.com.tr/git/git-commit-geri-al/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 27 May 2026 21:50:38 +0000</pubDate>
				<category><![CDATA[git]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3549</guid>

					<description><![CDATA[Son commit’i geri almak için birkaç seçenek var: &#8211; Commit’i geri al, değişiklikleri stage’de tut: &#8220;`bash git reset &#8211;soft HEAD~1 &#8220;` &#8211; Commit’i geri al, değişiklikleri working tree’de tut: &#8220;`bash&#8230;]]></description>
										<content:encoded><![CDATA[<p>Son commit’i geri almak için birkaç seçenek var:</p>
<p>&#8211; Commit’i geri al, değişiklikleri stage’de tut:<br />
&#8220;`bash<br />
git reset &#8211;soft HEAD~1<br />
&#8220;`</p>
<p>&#8211; Commit’i geri al, değişiklikleri working tree’de tut:<br />
&#8220;`bash<br />
git reset &#8211;mixed HEAD~1<br />
&#8220;`</p>
<p>&#8211; Commit’i tamamen sil, değişiklikleri de at:<br />
&#8220;`bash<br />
git reset &#8211;hard HEAD~1<br />
&#8220;`</p>
<p>Eğer commit’i remote’a push ettiysen, `reset &#8211;hard` yerine çoğu zaman şu daha güvenlidir:<br />
&#8220;`bash<br />
git revert HEAD<br />
&#8220;`</p>
<p>`git commit &#8211;amend` ise son commit’i silmez; son commit’i düzeltmek için kullanılır. [atlassian](https://www.atlassian.com/git/tutorials/saving-changes/git-commit)</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>git tag push</title>
		<link>https://selmantunc.com.tr/git/git-tag-push/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 27 May 2026 21:50:03 +0000</pubDate>
				<category><![CDATA[git]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3547</guid>

					<description><![CDATA[Tüm yerel tag’leri remote’a göndermek için: &#8220;`bash git push &#8211;tags &#8220;` Belirli bir remote’a göndermek istersen: &#8220;`bash git push origin &#8211;tags &#8220;` Sadece tek bir tag göndermek için: &#8220;`bash git&#8230;]]></description>
										<content:encoded><![CDATA[<p>Tüm yerel tag’leri remote’a göndermek için:</p>
<p>&#8220;`bash<br />
git push &#8211;tags<br />
&#8220;`</p>
<p>Belirli bir remote’a göndermek istersen:</p>
<p>&#8220;`bash<br />
git push origin &#8211;tags<br />
&#8220;`</p>
<p>Sadece tek bir tag göndermek için:</p>
<p>&#8220;`bash<br />
git push origin <tag-adi><br />
&#8220;`</p>
<p>`&#8211;tags` tüm local tag’leri yollar; `&#8211;follow-tags` ise yalnızca commit’lerle ilişkili annotated tag’leri gönderir. [git-scm](https://git-scm.com/book/en/v2/Git-Basics-Tagging)</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
