<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://program.sonsuz.us/feed.xml" rel="self" type="application/atom+xml" /><link href="https://program.sonsuz.us/" rel="alternate" type="text/html" /><updated>2026-11-03T18:06:27+00:00</updated><id>https://program.sonsuz.us/feed.xml</id><title type="html">SonsuzUs</title><subtitle>Programlama ve Yazılım</subtitle><author><name>Sonsuz Us</name></author><entry><title type="html">Akıllı Sözleşmeler Nasıl Çalışır? Blok Zincirde Koşullu Ödemelerin Kodla Yönetimi</title><link href="https://program.sonsuz.us/posts/akilli-sozlesmeler-nasil-calisir-blok-zincirde-kosullu-odemelerin-kodla-yonetimi/" rel="alternate" type="text/html" title="Akıllı Sözleşmeler Nasıl Çalışır? Blok Zincirde Koşullu Ödemelerin Kodla Yönetimi" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/akilli-sozlesmeler-nasil-calisir-blok-zincirde-kosullu-odemelerin-kodla-yonetimi</id><content type="html" xml:base="https://program.sonsuz.us/posts/akilli-sozlesmeler-nasil-calisir-blok-zincirde-kosullu-odemelerin-kodla-yonetimi/"><![CDATA[<p>Bir alışverişte paranın yalnızca teslimat onaylandıktan sonra satıcıya gönderildiğini düşünün. Normalde bu süreci bir aracı yönetir. Akıllı sözleşmelerde ise kurallar kodla tanımlanır, para sözleşmenin adresinde tutulur ve uygun işlem geldiğinde ödeme gerçekleştirilir. Ancak bu dijital kasanın neyi gerçekten bildiğini anlamak, en az kilidini tasarlamak kadar önemlidir.</p>

<p>``</p>

<h2 id="temel-fikir-paylaşılan-bir-durum-makinesi">Temel fikir: Paylaşılan bir durum makinesi</h2>

<p>Akıllı sözleşme, blok zincire yerleştirilmiş programdır. Ethereum gibi ağlarda kod, Ethereum Sanal Makinesi üzerinde yürütülür. Sözleşmenin bakiyesi, yetkili adresleri ve ödeme durumu kalıcı veriler olarak saklanır.</p>

<p>Bunu bir durum makinesi gibi düşünebiliriz: Sözleşme başlangıçta <strong>ödeme bekliyor</strong>, ardından <strong>fonlandı</strong>, son olarak <strong>ödendi</strong> durumuna geçer. Her geçişin koşulları vardır. Yetkisiz bir kullanıcı düğmeye bassa bile programın kontrollerini geçemez. Güven, tarafların iyi niyetinden çok, kodun doğruluğuna ve ağın güvenlik varsayımlarına dayanır.</p>

<h2 id="otomatik-ödeme-hangi-adımlarla-gerçekleşir">“Otomatik” ödeme hangi adımlarla gerçekleşir?</h2>

<ol>
  <li><strong>İşlem oluşturulur:</strong> Kullanıcı, sözleşmenin bir fonksiyonunu çağıran işlemi özel anahtarıyla imzalar.</li>
  <li><strong>Kod yürütülür:</strong> İşlemi işleyen düğümler, ilgili blok bağlamında aynı kuralları uygulayarak sonucu hesaplar.</li>
  <li><strong>Durum güncellenir:</strong> Koşullar sağlanırsa bakiye ve kayıtlar değişir. Bir kontrol başarısız olursa işlem geri alınır; harcanan işlem ücretleri genellikle yine ödenir.</li>
</ol>

<p>Buradaki kritik ayrıntı şudur: Sözleşmeler kendiliğinden uyanıp çalışmaz. Bir işlemle tetiklenmeleri gerekir. Zamanlanmış işler için harici otomasyon hizmetleri kullanılabilir; bunlar da sonuçta zincire işlem gönderir.</p>

<p>Ödeme kuralını şöyle özetleyebiliriz:</p>

\[T = B \cdot \mathbf{1}_{A \land \neg K}\]

<p>Burada $B$ emanetteki tutar, $A$ yetkili alıcının onayı, $K$ ise sözleşmenin kapanmış olmasıdır. Gösterge fonksiyonu, koşul doğruysa bir, yanlışsa sıfır üretir. Yani onay yoksa veya ödeme zaten yapıldıysa transfer gerçekleşmez.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Merkezi ödeme sistemi</th>
      <th>Akıllı sözleşme</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Kurallar</td>
      <td>Sunucu uygulamasında</td>
      <td>Zincirdeki kodda</td>
    </tr>
    <tr>
      <td>İşlemi yürütme</td>
      <td>İşletmeci altyapısı</td>
      <td>Ağın işlem yürütme mekanizması</td>
    </tr>
    <tr>
      <td>Değişiklik</td>
      <td>İşletmeci güncelleyebilir</td>
      <td>Tasarıma bağlı, çoğunlukla sınırlı</td>
    </tr>
    <tr>
      <td>Dış dünya bilgisi</td>
      <td>API ve kurum kayıtları</td>
      <td>Oracle veya taraf beyanı</td>
    </tr>
  </tbody>
</table>

<h2 id="solidity-ile-küçük-bir-emanet-kasası">Solidity ile küçük bir emanet kasası</h2>

<p>Aşağıdaki örnek, alıcının sözleşmeyi oluştururken yatırdığı ETH’yi saklar. Yalnızca aynı alıcı onay verdiğinde satıcıya ödeme yapar.</p>

<pre><code class="language-solidity">// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

contract Emanet {
    address public immutable alici;
    address payable public immutable satici;
    uint256 public immutable tutar;
    bool public kapandi;

    constructor(address payable _satici) payable {
        require(msg.value &gt; 0, "Bos emanet");
        require(_satici != address(0), "Gecersiz satici");
        alici = msg.sender;
        satici = _satici;
        tutar = msg.value;
    }

    function teslimatiOnayla() external {
        require(msg.sender == alici, "Yetkisiz kullanici");
        require(!kapandi, "Zaten odendi");

        kapandi = true;
        (bool basarili, ) = satici.call{value: tutar}("");
        require(basarili, "Transfer basarisiz");
    }
}
</code></pre>

<p><code class="language-plaintext highlighter-rouge">payable</code>, oluşturma sırasında ETH kabul edilmesini sağlar. <code class="language-plaintext highlighter-rouge">msg.sender</code> çağıranın adresidir; <code class="language-plaintext highlighter-rouge">msg.value</code> gönderilen tutarı belirtir. <code class="language-plaintext highlighter-rouge">immutable</code> alanlar oluşturulduktan sonra değiştirilemez. <code class="language-plaintext highlighter-rouge">require</code> ifadeleri ise geçersiz işlemleri durdurur.</p>

<p>Önemli güvenlik ayrıntısı, <code class="language-plaintext highlighter-rouge">kapandi</code> değişkeninin dış adrese para gönderilmeden önce güncellenmesidir. Bu, <strong>kontroller–etkiler–etkileşimler</strong> düzenidir: Önce koşulları denetle, sonra iç durumu değiştir, en son dış çağrı yap. Transfer başarısızsa <code class="language-plaintext highlighter-rouge">require</code> tüm bu durum değişikliklerini geri alır.</p>

<h2 id="blok-zincir-kargonun-geldiğini-nereden-bilir">Blok zincir kargonun geldiğini nereden bilir?</h2>

<p>Bilmez! Örnekte “teslimat”, alıcının onayı anlamına gelir; fiziksel teslimatın bağımsız kanıtı değildir. Kargo şirketinden bilgi alınacaksa oracle gerekir. Oracle, dış veriyi zincire taşıyan bir mekanizmadır ve sisteme yeni güven varsayımları ekler.</p>

<p>Bu yüzden “kod aracıları tamamen kaldırır” sözü her senaryoda doğru değildir. Özellikle fiyat, hava durumu veya teslimat gibi verilerde kaynağın doğruluğu, güncelliği ve manipülasyona dayanıklılığı ayrıca değerlendirilmelidir.</p>

<h2 id="gerçek-kullanımda-eksik-parçalar">Gerçek kullanımda eksik parçalar</h2>

<p>Bu örnekte alıcı hiç onay vermezse para kilitli kalır. Üretim tasarımında süreli iade, anlaşmazlık çözümü, olay kayıtları ve kapsamlı testler düşünülmelidir. Yeniden giriş saldırıları, erişim yetkileri ve yükseltme mekanizmaları ayrıca incelenmelidir.</p>

<p>İşlem ücretleri küçük ödemeleri pahalılaştırabilir; blokta görünmek de her ağda aynı kesinlik düzeyini sağlamaz. Akıllı sözleşme sihirli noter değildir: Açıkça tanımlanmış koşulları uygular. Başarılı tasarımın sırrı, yalnızca mutlu ödeme yolunu değil, herkesin fikrini değiştirdiği ve sistemlerin aksadığı günleri de kodlamaktır.</p>

<p><img src="/img/akilli-sozlesmeler-nasil-98.svg" alt="akilli-sozlesmeler-nasil-98" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="blok zincir" /><category term="akıllı sözleşmeler" /><category term="solidity" /><category term="ethereum" /><category term="finans" /><category term="otomasyon" /><summary type="html"><![CDATA[Bir alışverişte paranın yalnızca teslimat onaylandıktan sonra satıcıya gönderildiğini düşünün. Normalde bu süreci bir aracı yönetir. Akıllı sözleşmelerde ise kurallar kodla tanımlanır, para sözleşmenin adresinde tutulur ve uygun işlem geldiğinde ödeme gerçekleştirilir. Ancak bu dijital kasanın neyi gerçekten bildiğini anlamak, en az kilidini tasarlamak kadar önemlidir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/akilli-sozlesmeler-nasil-98.png" /><media:content medium="image" url="https://program.sonsuz.us/img/akilli-sozlesmeler-nasil-98.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Bankanın Dijital Kasası: Finansal Yazılımlarda Güvenlik ve Şifreleme</title><link href="https://program.sonsuz.us/posts/bankanin-dijital-kasasi-finansal-yazilimlarda-guvenlik-ve-sifreleme/" rel="alternate" type="text/html" title="Bankanın Dijital Kasası: Finansal Yazılımlarda Güvenlik ve Şifreleme" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/bankanin-dijital-kasasi-finansal-yazilimlarda-guvenlik-ve-sifreleme</id><content type="html" xml:base="https://program.sonsuz.us/posts/bankanin-dijital-kasasi-finansal-yazilimlarda-guvenlik-ve-sifreleme/"><![CDATA[<p>Mobil bankacılıkta “Gönder” düğmesine bastığınızda yalnızca para hareket etmez; kimlik bilgileriniz, işlem talimatınız ve güven ilişkisi de sistemler arasında yolculuğa çıkar. Bu yolculuğu korumak, verinin üzerine tek bir şifreleme kilidi takmaktan çok daha fazlasıdır. Gelin bankanın dijital kasasının katmanlarını birlikte açalım.</p>

<p>``</p>

<h2 id="güvenliğin-üç-temel-direği">Güvenliğin üç temel direği</h2>

<p>Finansal güvenlik üç hedef üzerinde yükselir: <strong>gizlilik</strong>, veriyi yetkisiz kişilerin okuyamaması; <strong>bütünlük</strong>, işlem bilgilerinin izinsiz değiştirilememesi; <strong>erişilebilirlik</strong>, hizmetin ihtiyaç anında çalışmasıdır. Şifreleme ilk iki hedefe katkı sağlar; ancak tek başına hizmet kesintilerini veya yanlış yetkilendirmeyi çözmez.</p>

<p>Örneğin, saldırgan şifreli bir havalenin tutarını değiştirememeli, aynı talimatı tekrar göndererek ikinci ödeme oluşturamamalıdır. Bunun için şifrelemeye ek olarak kimlik doğrulama, işlem yetkilendirmesi ve tekrar saldırılarını önleyen kontroller gerekir. Sağlam bir kasa, yanlış kişiye verilen anahtarı telafi edemez!</p>

<h2 id="uçtan-uca-gerçekten-ne-demek">“Uçtan uca” gerçekten ne demek?</h2>

<p>Bu ifade dikkatli kullanılmalıdır. Mobil uygulama ile banka ağ geçidi arasındaki TLS bağlantısı, <strong>aktarım sırasında koruma</strong> sağlar. TLS ağ geçidinde sonlanıyorsa veri orada çözülebilir; dolayısıyla bütün işlem zinciri otomatik olarak gerçek uçtan uca şifrelenmiş sayılmaz.</p>

<p>Gerçek uçtan uca şifrelemede içerik yalnızca belirlenen uçlarda okunabilir. Bankanın işlemi gerçekleştiren uygulamasının veriyi görmesi gerektiğinden, finansal mimariler çoğunlukla farklı güven sınırlarında birbirini tamamlayan korumalar kullanır.</p>

<table>
  <thead>
    <tr>
      <th>Katman</th>
      <th>Temel araç</th>
      <th>Tek başına çözmediği sorun</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Ağ iletişimi</td>
      <td>TLS 1.3</td>
      <td>Ele geçirilmiş uygulama</td>
    </tr>
    <tr>
      <td>Servisler arası bağlantı</td>
      <td>mTLS</td>
      <td>Gereğinden geniş yetkiler</td>
    </tr>
    <tr>
      <td>Veritabanı ve yedekler</td>
      <td>Disk veya alan şifreleme</td>
      <td>Yetkili hesabın kötüye kullanılması</td>
    </tr>
    <tr>
      <td>İşlem içeriği</td>
      <td>AEAD, gerektiğinde dijital imza</td>
      <td>Tekrar gönderilen geçerli talimat</td>
    </tr>
  </tbody>
</table>

<p>TLS 1.3 güçlü bir güncel tercihtir; doğru yapılandırılmış TLS 1.2 de bazı uyumluluk senaryolarında kullanılabilir. Sertifika doğrulamasını kapatmak ise güvenlik kapısını dekoratif hale getirir.</p>

<h2 id="standartlar-aynı-işi-yapmayan-kurallar">Standartlar: Aynı işi yapmayan kurallar</h2>

<p><strong>PCI DSS</strong>, kapsam dahilindeki ödeme kartı verilerinin korunmasına yöneliktir; bütün bankacılık verileri için evrensel bir şifreleme standardı değildir. <strong>ISO/IEC 27001</strong>, bilgi güvenliği yönetim sistemini ele alır. <strong>KVKK</strong> ve ilgili bankacılık düzenlemeleri ise veri işleme ve güvenlik yükümlülükleri getirir.</p>

<p>Kriptografik modüller için <strong>FIPS 140-3</strong>, anahtarların yaşam döngüsü için <strong>NIST SP 800-57</strong> önemli referanslardır. Bunların zorunluluğu kurumun faaliyet alanına ve mevzuata bağlıdır. Sertifika sahibi olmak, uygulamadaki bütün açıkların kapandığı anlamına gelmez; denetim ve güvenli geliştirme devam etmelidir.</p>

<h2 id="şifreleme-ile-bütünlüğü-birlikte-korumak">Şifreleme ile bütünlüğü birlikte korumak</h2>

<p>AES-GCM gibi doğrulanmış şifreleme yöntemleri, içeriği gizlerken değiştirilmesini de saptar. Mantığını şöyle özetleyebiliriz:</p>

\[C \parallel T = \mathrm{AESGCM}_K(N, P, A)\]

<p>Burada $P$ açık veri, $K$ anahtar, $N$ nonce, $A$ ek doğrulanan veri, $C$ şifreli içerik ve $T$ doğrulama etiketidir. Ek veri gizlenmez; fakat değiştirilirse doğrulama başarısız olur. <strong>Aynı anahtarla nonce tekrar kullanılmamalıdır.</strong></p>

<p>Aşağıdaki Python örneği, işlem içeriğini şifreler ve işlem kimliğini içerikle ilişkilendirir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">json</span>
<span class="kn">import</span> <span class="n">os</span>
<span class="kn">from</span> <span class="n">cryptography.hazmat.primitives.ciphers.aead</span> <span class="kn">import</span> <span class="n">AESGCM</span>

<span class="n">key</span> <span class="o">=</span> <span class="n">AESGCM</span><span class="p">.</span><span class="nf">generate_key</span><span class="p">(</span><span class="n">bit_length</span><span class="o">=</span><span class="mi">256</span><span class="p">)</span>
<span class="n">aead</span> <span class="o">=</span> <span class="nc">AESGCM</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="n">nonce</span> <span class="o">=</span> <span class="n">os</span><span class="p">.</span><span class="nf">urandom</span><span class="p">(</span><span class="mi">12</span><span class="p">)</span>
<span class="n">aad</span> <span class="o">=</span> <span class="sa">b</span><span class="sh">"</span><span class="s">transaction:tx-1042</span><span class="sh">"</span>
<span class="n">payload</span> <span class="o">=</span> <span class="n">json</span><span class="p">.</span><span class="nf">dumps</span><span class="p">({</span>
    <span class="sh">"</span><span class="s">amount_kurus</span><span class="sh">"</span><span class="p">:</span> <span class="mi">12500</span><span class="p">,</span>
    <span class="sh">"</span><span class="s">currency</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">TRY</span><span class="sh">"</span>
<span class="p">}).</span><span class="nf">encode</span><span class="p">(</span><span class="sh">"</span><span class="s">utf-8</span><span class="sh">"</span><span class="p">)</span>

<span class="n">ciphertext</span> <span class="o">=</span> <span class="n">aead</span><span class="p">.</span><span class="nf">encrypt</span><span class="p">(</span><span class="n">nonce</span><span class="p">,</span> <span class="n">payload</span><span class="p">,</span> <span class="n">aad</span><span class="p">)</span>
<span class="n">plaintext</span> <span class="o">=</span> <span class="n">aead</span><span class="p">.</span><span class="nf">decrypt</span><span class="p">(</span><span class="n">nonce</span><span class="p">,</span> <span class="n">ciphertext</span><span class="p">,</span> <span class="n">aad</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="n">json</span><span class="p">.</span><span class="nf">loads</span><span class="p">(</span><span class="n">plaintext</span><span class="p">))</span>
</code></pre></div></div>

<p>Parasal tutarı kayan noktalı sayı yerine kuruş cinsinden tam sayı olarak tutuyoruz. <code class="language-plaintext highlighter-rouge">decrypt</code>, içerik veya ek veri değişmişse doğrulama hatası verir. Bu, öğretici bir örnektir: üretimde anahtar yönetimi HSM veya KMS ile tasarlanmalı; nonce benzersizliği, anahtar yenileme ve kalıcı kayıt stratejileri ayrıca uygulanmalıdır. Anahtarı şifreli verinin yanına açık biçimde koymak korumayı boşa çıkarır.</p>

<h2 id="şifrelemenin-dışındaki-kritik-savunmalar">Şifrelemenin dışındaki kritik savunmalar</h2>

<p>HSM, anahtarların korunmasına ve kriptografik işlemlerin kontrollü yürütülmesine yardımcı olur. Bunun yanında en az ayrıcalık, görev ayrılığı, çok faktörlü doğrulama ve hassas işlem onayı gerekir.</p>

<p>Tekrar saldırıları için benzersiz işlem kimlikleri ve atomik idempotency kontrolleri kullanılmalıdır: aynı talimat ikinci kez ödeme üretmemelidir. Loglar denetlenebilir olmalı, ancak kart bilgilerini veya sırları açıkça taşımamalıdır. Yedeklerin geri yüklenmesi ve anahtar kurtarma süreçleri de düzenli test edilmelidir.</p>

<p>Sonuçta güvenli bankacılık, tek bir algoritmanın zaferi değildir. Doğru kriptografi, sınırlı yetkiler, güvenli uç cihazlar ve sürekli izleme birlikte çalışır. Dijital kasanın gücü, en parlak kilidinden değil, en zayıf bağlantısının sağlamlığından gelir.</p>

<p><img src="/img/bankanin-dijital-kasasi-59.svg" alt="bankanin-dijital-kasasi-59" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="finansal güvenlik" /><category term="şifreleme" /><category term="bankacılık" /><category term="tls" /><category term="aes-gcm" /><category term="pci dss" /><summary type="html"><![CDATA[Mobil bankacılıkta “Gönder” düğmesine bastığınızda yalnızca para hareket etmez; kimlik bilgileriniz, işlem talimatınız ve güven ilişkisi de sistemler arasında yolculuğa çıkar. Bu yolculuğu korumak, verinin üzerine tek bir şifreleme kilidi takmaktan çok daha fazlasıdır. Gelin bankanın dijital kasasının katmanlarını birlikte açalım.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/bankanin-dijital-kasasi-59.png" /><media:content medium="image" url="https://program.sonsuz.us/img/bankanin-dijital-kasasi-59.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Bir Sunucu Düştü, Sistem Ayakta: Dayanıklı Mimari ve Yedeklilik Stratejileri</title><link href="https://program.sonsuz.us/posts/bir-sunucu-dustu-sistem-ayakta-dayanikli-mimari-ve-yedeklilik-stratejileri/" rel="alternate" type="text/html" title="Bir Sunucu Düştü, Sistem Ayakta: Dayanıklı Mimari ve Yedeklilik Stratejileri" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/bir-sunucu-dustu-sistem-ayakta-dayanikli-mimari-ve-yedeklilik-stratejileri</id><content type="html" xml:base="https://program.sonsuz.us/posts/bir-sunucu-dustu-sistem-ayakta-dayanikli-mimari-ve-yedeklilik-stratejileri/"><![CDATA[<p>Bir ödeme sistemi düşünün: Kampanya başladı, trafik yükseldi ve veritabanı sunucusu aniden sustu. Kullanıcılar alışverişe devam edebilecek mi? Dayanıklı yazılım mimarisi, bu soruyu arıza yaşanmadan cevaplama sanatıdır. Amaç, hiçbir parçanın bozulmaması değil; parçalar bozulurken sistemin temel görevini güvenilir biçimde sürdürebilmesidir.</p>

<p>``</p>

<h2 id="dayanıklılık-sadece-fazladan-sunucu-değildir">Dayanıklılık, Sadece Fazladan Sunucu Değildir</h2>

<p><strong>Yedeklilik</strong>, aynı görevi yapabilecek alternatif kaynakların bulunmasıdır. <strong>Dayanıklılık</strong> ise arızayı algılama, etkisini sınırlama, alternatif kaynağa geçme ve toparlanma yeteneğidir. Garajda yedek lastik bulunması güzeldir; fakat lastiği değiştiremiyorsanız yolculuk yine durur!</p>

<p>Kullanılabilirlik, basitleştirilmiş bir modelde şöyle ifade edilir:</p>

\[A = \frac{MTBF}{MTBF + MTTR}\]

<p>Burada MTBF arızalar arasındaki ortalama çalışma süresi, MTTR ise ortalama hizmeti geri getirme süresidir. Dolayısıyla yalnızca arızaları azaltmak değil, toparlanmayı hızlandırmak da kullanılabilirliği yükseltir.</p>

<p>Bağımsız iki bileşenden herhangi birinin hizmet vermesi yeterliyse, kusursuz geçiş varsayımı altında:</p>

\[A_{toplam} = 1 - (1-A)^2\]

<p>Her bileşen yüzde 99,9 kullanılabilir olduğunda teorik sonuç yüzde 99,9999 olur. Ancak ortak elektrik, ağ veya yazılım hataları bu hesabın bağımsızlık varsayımını bozar.</p>

<h2 id="yedekliliğin-farklı-lezzetleri">Yedekliliğin Farklı Lezzetleri</h2>

<table>
  <thead>
    <tr>
      <th>Strateji</th>
      <th>Çalışma biçimi</th>
      <th>Temel bedel</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Aktif-pasif</td>
      <td>Yedek, ana bileşenin yerine geçer</td>
      <td>Geçiş süresi</td>
    </tr>
    <tr>
      <td>Aktif-aktif</td>
      <td>Birden fazla bileşen trafik işler</td>
      <td>Koordinasyon karmaşıklığı</td>
    </tr>
    <tr>
      <td>N+1</td>
      <td>Gereken kapasiteye bir yedek eklenir</td>
      <td>Sınırlı arıza toleransı</td>
    </tr>
    <tr>
      <td>Çok bölgeli</td>
      <td>Kaynaklar ayrı coğrafi bölgelerde çalışır</td>
      <td>Gecikme ve maliyet</td>
    </tr>
  </tbody>
</table>

<p>İki sunucuyu aynı fiziksel makinede çalıştırmak, iki şemsiyeyi aynı delik çantaya koymaya benzer. Gerçek yedeklilik, <strong>arıza alanlarını</strong> ayırır: farklı makineler, erişilebilirlik alanları veya bölgeler. Yük dengeleyici, DNS, kimlik servisi ve bağlantı altyapısı da tek hata noktası bakımından incelenmelidir.</p>

<p>Aktif-pasif tasarımda yedeğin güncel veriye erişmesi gerekir. Aktif-aktif yaklaşımda ise eşzamanlı güncellemeler, veri çatışmaları ve oturum yönetimi özellikle önem kazanır.</p>

<h2 id="i̇ki-lider-bir-büyük-sorun">İki Lider, Bir Büyük Sorun</h2>

<p>Ağ bölünmesi sırasında iki düğüm kendisini lider sanabilir. <strong>Split-brain</strong> denen bu durum, aynı siparişin farklı biçimlerde işlenmesine neden olabilir. Çözüm yalnızca daha fazla kopya değildir; lider seçimi ve yazma yetkisinin sınırlandırılması gerekir.</p>

<p>Çoğunluk gerektiren bir karar için:</p>

\[q = \left\lfloor \frac{N}{2} \right\rfloor + 1\]

<p>Üç oy veren düğümde çoğunluk ikidir. Bu yapı, uygun bir konsensüs protokolüyle bir düğüm kaybına dayanabilir. Eski liderin yazmasını engellemek için hedef kaynağın doğruladığı <strong>fencing token</strong> kullanılabilir. Ağ bölünmesinde tutarlılığı korumak bazen bazı isteklere hizmet verememeyi gerektirir.</p>

<h2 id="kurtarma-hedeflerini-sayıya-dökün">Kurtarma Hedeflerini Sayıya Dökün</h2>

<ul>
  <li><strong>RTO:</strong> Hizmeti geri getirmek için hedeflenen azami süre.</li>
  <li><strong>RPO:</strong> Kabul edilebilir veri kaybının zaman karşılığı.</li>
</ul>

<p>Örneğin RTO iki dakika, RPO otuz saniye olabilir. Asenkron replikasyon veri kaybı riski taşırken senkron replikasyon gecikmeyi artırabilir. Yedekleme ise ayrı bir ihtiyaçtır: Replikasyon, yanlışlıkla silinen veriyi de kopyalayabilir. Bu yüzden geri yükleme testleri şarttır.</p>

<h2 id="yeniden-deneyin-ama-sonsuza-kadar-değil">Yeniden Deneyin, Ama Sonsuza Kadar Değil</h2>

<p>Geçici bağlantı sorunlarında sınırlı tekrar yararlıdır. Aşağıdaki Python 3.11+ örneği, asenkron bir okuma işlemini toplam süre bütçesi içinde yeniden dener:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">asyncio</span>
<span class="kn">import</span> <span class="n">random</span>

<span class="k">async</span> <span class="k">def</span> <span class="nf">resilient_read</span><span class="p">(</span><span class="n">fetch</span><span class="p">):</span>
    <span class="k">async</span> <span class="k">with</span> <span class="n">asyncio</span><span class="p">.</span><span class="nf">timeout</span><span class="p">(</span><span class="mf">2.0</span><span class="p">):</span>
        <span class="k">for</span> <span class="n">attempt</span> <span class="ow">in</span> <span class="nf">range</span><span class="p">(</span><span class="mi">3</span><span class="p">):</span>
            <span class="k">try</span><span class="p">:</span>
                <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="p">.</span><span class="nf">wait_for</span><span class="p">(</span>
                    <span class="nf">fetch</span><span class="p">(),</span> <span class="n">timeout</span><span class="o">=</span><span class="mf">0.5</span>
                <span class="p">)</span>
            <span class="nf">except </span><span class="p">(</span><span class="nb">TimeoutError</span><span class="p">,</span> <span class="nb">ConnectionError</span><span class="p">):</span>
                <span class="k">if</span> <span class="n">attempt</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
                    <span class="k">raise</span>
                <span class="n">delay</span> <span class="o">=</span> <span class="n">random</span><span class="p">.</span><span class="nf">uniform</span><span class="p">(</span>
                    <span class="mi">0</span><span class="p">,</span> <span class="mf">0.1</span> <span class="o">*</span> <span class="mi">2</span> <span class="o">**</span> <span class="n">attempt</span>
                <span class="p">)</span>
                <span class="k">await</span> <span class="n">asyncio</span><span class="p">.</span><span class="nf">sleep</span><span class="p">(</span><span class="n">delay</span><span class="p">)</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">fetch</code>, gerçek ağ çağrısını yapan asenkron fonksiyondur. Her denemenin zaman aşımı vardır; toplam bütçe iki saniyedir. Rastgele bekleme, yani <strong>jitter</strong>, istemcilerin aynı anda tekrar saldırmasını azaltır. Yazma işlemlerinde tekrar kullanacaksanız idempotency anahtarıyla yinelenen işlemleri önlemelisiniz.</p>

<p>Sürekli başarısız olan bağımlılıklarda <strong>circuit breaker</strong>, yeni çağrıları geçici olarak keser. <strong>Bulkhead</strong> yaklaşımı ise bağlantı ve işçi havuzlarını ayırarak bir servisin kaynakları tüketip diğerlerini sürüklemesini önler.</p>

<h2 id="dayanıklılığı-test-etmeden-i̇nanmayın">Dayanıklılığı Test Etmeden İnanmayın</h2>

<p>Gecikme, hata oranı, replikasyon gecikmesi ve geçiş süresi izlenmelidir. Önce izole ortamda düğüm kaybı ve ağ kesintisi deneyleri yapın; üretim deneylerini dar kapsam ve durdurma koşullarıyla yürütün. Kapasiteyi de sınayın: Yedek sistem bütün trafiği taşıyamıyorsa yalnızca dekoratif bir yedektir.</p>

<p>Son olarak, kritik işlevleri önceliklendirin. Öneri servisi kapanabilir; ödeme doğruluğu kapanamaz. Doğru sonuç üretilemiyorsa güvenli biçimde durmak, hatalı işleme devam etmekten iyidir. Dayanıklılık, daha çok sunucu değil, arıza anında daha doğru karar demektir.</p>

<p><img src="/img/bir-sunucu-dustu-67.svg" alt="bir-sunucu-dustu-67" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="yazılım-mimarisi" /><category term="dayanıklılık" /><category term="yedeklilik" /><category term="dağıtık-sistemler" /><category term="hata-toleransı" /><category term="resilient" /><summary type="html"><![CDATA[Bir ödeme sistemi düşünün: Kampanya başladı, trafik yükseldi ve veritabanı sunucusu aniden sustu. Kullanıcılar alışverişe devam edebilecek mi? Dayanıklı yazılım mimarisi, bu soruyu arıza yaşanmadan cevaplama sanatıdır. Amaç, hiçbir parçanın bozulmaması değil; parçalar bozulurken sistemin temel görevini güvenilir biçimde sürdürebilmesidir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/bir-sunucu-dustu-67.png" /><media:content medium="image" url="https://program.sonsuz.us/img/bir-sunucu-dustu-67.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Dalgalara Rağmen Doğru Rota: İnsansız Deniz Araçlarında Otonom Navigasyon</title><link href="https://program.sonsuz.us/posts/dalgalara-ragmen-dogru-rota-insansiz-deniz-araclarinda-otonom-navigasyon/" rel="alternate" type="text/html" title="Dalgalara Rağmen Doğru Rota: İnsansız Deniz Araçlarında Otonom Navigasyon" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/dalgalara-ragmen-dogru-rota-insansiz-deniz-araclarinda-otonom-navigasyon</id><content type="html" xml:base="https://program.sonsuz.us/posts/dalgalara-ragmen-dogru-rota-insansiz-deniz-araclarinda-otonom-navigasyon/"><![CDATA[<p>Karada çizdiğiniz rota genellikle yerinde durur; denizde ise yolun kendisi sizi yana doğru taşır! İnsansız bir deniz aracının hedefe ulaşması, yalnızca pusulayı doğru yöne çevirmek değildir. Dalga, akıntı ve rüzgâr altında konumunu anlaması, sapmayı hesaplaması ve fiziksel sınırlarına uygun düzeltmeler yapması gerekir.</p>

<p><img src="/img/dalgalara-ragmen-dogru-90.svg" alt="dalgalara-ragmen-dogru-90" /></p>

<p>``</p>

<h2 id="navigasyonun-üç-katmanı">Navigasyonun üç katmanı</h2>

<p>Otonom navigasyonu üç çalışanı olan küçük bir köprüüstü gibi düşünün: durum kestirici nerede olduğunuzu söyler, rota planlayıcı güvenli yolu seçer, kontrolcü ise dümen ve itkiyi yönetir. Bu görevleri ayırmak, hem yazılımı test etmeyi hem de arızaların kaynağını bulmayı kolaylaştırır.</p>

<p>GNSS konumu ve yer üzerindeki hızı sağlar. IMU ivme ve açısal hareketleri ölçer; pusula baş açısına yardımcı olur. Ancak hiçbiri kusursuz değildir. GNSS kesilebilir, pusula manyetik etkilerden sapabilir, IMU hataları zamanla birikebilir. Genişletilmiş Kalman filtresi gibi yöntemler, hareket modeliyle ölçümleri birleştirerek daha tutarlı bir durum tahmini üretir. Zaman damgalarının uyumu da en az sensör seçimi kadar önemlidir.</p>

<table>
  <thead>
    <tr>
      <th>Kaynak</th>
      <th>Güçlü tarafı</th>
      <th>Dikkat edilmesi gereken</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>GNSS</td>
      <td>Mutlak konum</td>
      <td>Kesinti ve ölçüm sıçraması</td>
    </tr>
    <tr>
      <td>IMU</td>
      <td>Hızlı hareket takibi</td>
      <td>Biriken hata</td>
    </tr>
    <tr>
      <td>Pusula</td>
      <td>Baş açısı desteği</td>
      <td>Manyetik bozulma</td>
    </tr>
    <tr>
      <td>Hareket modeli</td>
      <td>Ölçümler arasında tahmin</td>
      <td>Parametre belirsizliği</td>
    </tr>
  </tbody>
</table>

<h2 id="baş-açısı-ile-rota-açısı-aynı-değildir">Baş açısı ile rota açısı aynı değildir</h2>

<p>Aracın burnunun baktığı yön, baş açısı $ψ$; yer üzerindeki hareket yönü ise rota açısı $χ$ olsun. Akıntı varsa bu iki açı farklı olabilir. Burnunu kuzeye çevirmiş bir araç, doğuya akan su nedeniyle kuzeydoğuya ilerleyebilir.</p>

<p>Basitleştirilmiş yatay düzlem modeli şöyledir:</p>

\[\mathbf{v}_g=R(ψ)\mathbf{v}_b+\mathbf{v}_c\]

<p>Burada $\mathbf{v}<em>b$ suya göre hızı, $\mathbf{v}_c$ akıntıyı, $R(ψ)$ gövde koordinatlarından dünya koordinatlarına dönüşümü temsil eder. Yer hızından $χ=\operatorname{atan2}(v</em>{g,y},v_{g,x})$ hesaplanır. Dolayısıyla yalnızca baş açısını sabitlemek, çizilen rotayı korumaya yetmez.</p>

<h2 id="rotayı-kovalamak-yerine-önüne-bakmak">Rotayı kovalamak yerine önüne bakmak</h2>

<p>Yaygın çözümlerden biri, görüş hattı anlamına gelen LOS yönlendirmesidir. Sistem, rota üzerinde ileride bulunan hayali bir noktaya yönelir. Böylece küçük sapmalarda sert dönüşler yerine yumuşak yaklaşmalar üretir.</p>

<p>Düz bir rota parçasında yanal hata $e$, rota yönü $γ$ ve ileri bakış mesafesi $Δ$ için:</p>

\[χ_d=γ-\arctan(e/Δ),\qquad ψ_d=χ_d-β\]

<p>Buradaki $β$, süzülmüş $χ-ψ$ farkıyla yaklaşık olarak kestirilebilen sürüklenme açısıdır. Küçük $Δ$ daha çevik fakat daha salınımlı davranış yaratabilir. Büyük $Δ$ ise dönüşleri yumuşatırken rotaya dönüşü yavaşlatır. Çok düşük hızlarda rota açısı güvenilir olmadığından sürüklenme kestirimi sınırlandırılmalıdır.</p>

<h2 id="python-ile-yönlendirme-ve-dümen-kontrolü">Python ile yönlendirme ve dümen kontrolü</h2>

<p>Aşağıdaki örnek, LOS hedefini hesaplar ve baş açısı hatasını PI kontrolcüyle dümen komutuna dönüştürür. Koordinatlar metre cinsinden yerel düzlemde, açılar radyan cinsindedir. İntegral terimi kalıcı sapmayı azaltırken koşullu güncelleme, dümen doygunluğunda gereksiz birikimi önler.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">math</span>


<span class="k">def</span> <span class="nf">wrap</span><span class="p">(</span><span class="n">angle</span><span class="p">):</span>
    <span class="nf">return </span><span class="p">(</span><span class="n">angle</span> <span class="o">+</span> <span class="n">math</span><span class="p">.</span><span class="n">pi</span><span class="p">)</span> <span class="o">%</span> <span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">math</span><span class="p">.</span><span class="n">pi</span><span class="p">)</span> <span class="o">-</span> <span class="n">math</span><span class="p">.</span><span class="n">pi</span>


<span class="k">def</span> <span class="nf">los_heading</span><span class="p">(</span><span class="n">position</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">beta</span><span class="p">,</span> <span class="n">lookahead</span><span class="o">=</span><span class="mf">15.0</span><span class="p">):</span>
    <span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="n">end</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">start</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">end</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">start</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
    <span class="n">length</span> <span class="o">=</span> <span class="n">math</span><span class="p">.</span><span class="nf">hypot</span><span class="p">(</span><span class="n">dx</span><span class="p">,</span> <span class="n">dy</span><span class="p">)</span>
    <span class="k">if</span> <span class="n">length</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">lookahead</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
        <span class="k">raise</span> <span class="nc">ValueError</span><span class="p">(</span><span class="sh">"</span><span class="s">Geçersiz rota veya bakış mesafesi</span><span class="sh">"</span><span class="p">)</span>
    <span class="n">px</span><span class="p">,</span> <span class="n">py</span> <span class="o">=</span> <span class="n">position</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">start</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">position</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">start</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
    <span class="n">error</span> <span class="o">=</span> <span class="p">(</span><span class="n">dx</span> <span class="o">*</span> <span class="n">py</span> <span class="o">-</span> <span class="n">dy</span> <span class="o">*</span> <span class="n">px</span><span class="p">)</span> <span class="o">/</span> <span class="n">length</span>
    <span class="n">course</span> <span class="o">=</span> <span class="n">math</span><span class="p">.</span><span class="nf">atan2</span><span class="p">(</span><span class="n">dy</span><span class="p">,</span> <span class="n">dx</span><span class="p">)</span> <span class="o">-</span> <span class="n">math</span><span class="p">.</span><span class="nf">atan2</span><span class="p">(</span><span class="n">error</span><span class="p">,</span> <span class="n">lookahead</span><span class="p">)</span>
    <span class="k">return</span> <span class="nf">wrap</span><span class="p">(</span><span class="n">course</span> <span class="o">-</span> <span class="n">beta</span><span class="p">)</span>


<span class="k">def</span> <span class="nf">steering</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">heading</span><span class="p">,</span> <span class="n">integral</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
    <span class="k">if</span> <span class="n">dt</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
        <span class="k">raise</span> <span class="nc">ValueError</span><span class="p">(</span><span class="sh">"</span><span class="s">dt pozitif olmalı</span><span class="sh">"</span><span class="p">)</span>
    <span class="n">error</span> <span class="o">=</span> <span class="nf">wrap</span><span class="p">(</span><span class="n">target</span> <span class="o">-</span> <span class="n">heading</span><span class="p">)</span>
    <span class="n">raw</span> <span class="o">=</span> <span class="mf">1.2</span> <span class="o">*</span> <span class="n">error</span> <span class="o">+</span> <span class="mf">0.04</span> <span class="o">*</span> <span class="n">integral</span>
    <span class="n">command</span> <span class="o">=</span> <span class="nf">max</span><span class="p">(</span><span class="o">-</span><span class="mf">0.6</span><span class="p">,</span> <span class="nf">min</span><span class="p">(</span><span class="mf">0.6</span><span class="p">,</span> <span class="n">raw</span><span class="p">))</span>
    <span class="k">if</span> <span class="nf">abs</span><span class="p">(</span><span class="n">raw</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mf">0.6</span> <span class="ow">or</span> <span class="n">raw</span> <span class="o">*</span> <span class="n">error</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
        <span class="n">integral</span> <span class="o">+=</span> <span class="n">error</span> <span class="o">*</span> <span class="n">dt</span>
    <span class="k">return</span> <span class="n">command</span><span class="p">,</span> <span class="n">integral</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">wrap</code>, açı sınırında yanlışlıkla tam tur dönülmesini engeller. İntegral değeri kontrol döngüleri arasında korunmalıdır. Katsayılar yalnızca örnektir; gerçek araçta hız, gövde dinamiği ve dümen sınırlarına göre ayarlanır. Ayrıca dümen işaretinin modelle uyumu doğrulanmalıdır. Bu kod, waypoint geçişlerini veya engelden kaçınmayı kapsamaz.</p>

<h2 id="her-dalgayla-kavga-etmeyin">Her dalgayla kavga etmeyin</h2>

<p>Dalga kaynaklı hızlı salınımları sürekli dümenle düzeltmek enerji tüketir ve mekanizmayı yorar. Uygun filtreleme ve kontrol bant genişliği, yavaş rota sapmalarını hızlı yalpalamadan ayırmaya yardımcı olur. Ancak aşırı filtreleme gecikme yaratır; bu yüzden kontrolcü, sensör ve gövde birlikte değerlendirilmelidir.</p>

<p>İtki kontrolü de önemlidir: birçok dümenli araç düşük hızda yönlendirme otoritesini kaybeder. Akıntı aracın kapasitesini aşıyorsa hiçbir yazılım istenen rotayı garanti edemez. Sistem güvenli bekleme, alternatif rota veya operatöre devretme davranışına geçmelidir. Trafikte ise çarpışma riski ve uygulanabilir COLREG kuralları ayrıca ele alınmalıdır.</p>

<p>Başarılı otonomi, denizi yenmek değil, etkilerini ölçüp yönetmektir. Önce simülasyonda akıntı, sensör kesintisi ve aktüatör sınırlarını deneyin; ardından kontrollü deniz testlerinde yanal hata, enerji tüketimi ve güvenlik davranışlarını karşılaştırın.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="otonom navigasyon" /><category term="insansız deniz araçları" /><category term="kontrol teorisi" /><category term="robotik" /><category term="sensör füzyonu" /><category term="python" /><summary type="html"><![CDATA[Karada çizdiğiniz rota genellikle yerinde durur; denizde ise yolun kendisi sizi yana doğru taşır! İnsansız bir deniz aracının hedefe ulaşması, yalnızca pusulayı doğru yöne çevirmek değildir. Dalga, akıntı ve rüzgâr altında konumunu anlaması, sapmayı hesaplaması ve fiziksel sınırlarına uygun düzeltmeler yapması gerekir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/dalgalara-ragmen-dogru-90.png" /><media:content medium="image" url="https://program.sonsuz.us/img/dalgalara-ragmen-dogru-90.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Dijital İkizle Enerji Santrali Simülasyonu: Bakımı Önce Sanal Dünyada Deneyin</title><link href="https://program.sonsuz.us/posts/dijital-ikizle-enerji-santrali-simulasyonu-bakimi-once-sanal-dunyada-deneyin/" rel="alternate" type="text/html" title="Dijital İkizle Enerji Santrali Simülasyonu: Bakımı Önce Sanal Dünyada Deneyin" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/dijital-ikizle-enerji-santrali-simulasyonu-bakimi-once-sanal-dunyada-deneyin</id><content type="html" xml:base="https://program.sonsuz.us/posts/dijital-ikizle-enerji-santrali-simulasyonu-bakimi-once-sanal-dunyada-deneyin/"><![CDATA[<p><img src="/img/dijital-ikizle-enerji-40.svg" alt="dijital-ikizle-enerji-40" /></p>

<p>Bir enerji santralinde yanlış bakım zamanı, hem üretimi hem bütçeyi yakabilir. Peki türbini durdurmadan önce kararınızı sanal bir santralde deneseydiniz? Dijital ikiz, gerçek tesisten gelen verilerle güncellenen bir modeldir: Operatörlerin pahalı sürprizler yaşamadan “Ya şöyle yapsak?” sorusunu araştırmasını sağlar.</p>

<p>``</p>

<h2 id="sanal-kopya-ama-dekor-değil">Sanal kopya, ama dekor değil</h2>

<p>Dijital ikiz yalnızca üç boyutlu bir santral görüntüsü değildir. Asıl değer; sıcaklık, basınç, yakıt debisi, titreşim ve elektrik üretimini açıklayan modellerdedir. Fiziksel ekipman veri üretir, model mevcut durumu tahmin eder, simülasyon gelecekteki seçenekleri karşılaştırır. Böylece bakım takvimi veya yük değişimi, gerçek ekipmana uygulanmadan önce sınanabilir. Modelin canlı verilerle düzenli güncellenmesi, onu sıradan bir simülasyondan ayıran temel özelliklerden biridir.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Geleneksel simülasyon</th>
      <th>Dijital ikiz</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Veri kaynağı</td>
      <td>Önceden tanımlanan değerler</td>
      <td>Güncel sensör ölçümleri</td>
    </tr>
    <tr>
      <td>Durum</td>
      <td>Sabit başlangıç varsayımı</td>
      <td>Düzenli güncellenen tahmin</td>
    </tr>
    <tr>
      <td>Kullanım</td>
      <td>Tasarım seçenekleri</td>
      <td>İşletme ve bakım senaryoları</td>
    </tr>
  </tbody>
</table>

<p>Veri hattında zaman damgalarının eşleşmesi ve sensörlerin kalibrasyonu kritiktir. Örneğin elektrik gücüyle yakıt debisini farklı dakikalardan eşleştirirseniz, model olmayan bir verim kaybını keşfedebilir. Dijital dedektifinizin önce saatini doğru ayarlaması gerekir!</p>

<h2 id="teorik-temel-enerji-ve-bozulma">Teorik temel: enerji ve bozulma</h2>

<p>Basitleştirilmiş bir termik santral için net elektrik gücünü şöyle yazabiliriz:</p>

\[P_{net}=\eta(f)Q_{in}-P_{aux}\]

<p>Burada $Q_{in}$ yakıtın ısıl gücü, $P_{aux}$ yardımcı sistemlerin tüketimi, $f$ ise boyutsuz kirlenme göstergesidir. Güçlerin birimi MW olduğunda sonuç da MW olur. Kirlenmenin verimi düşürdüğünü varsayalım:</p>

\[\eta(f)=\eta_0(1-\alpha f)\]

<p>$\eta_0$ temiz ekipmanın verimi, $\alpha$ kirlenmeye duyarlılıktır. Saatlik ilerlemede basit bir bozulma modeli kullanabiliriz:</p>

\[f_{t+1}=\min(1,f_t+kL^2\Delta t)\]

<p>$L$ nominal kapasiteye göre yük oranıdır. Kare terimi, yüksek yükün kirlenmeyi daha hızlı artırdığı varsayımını temsil eder. Bu, evrensel bir fizik yasası değil; saha verileriyle doğrulanması gereken öğretici bir yaklaşımdır. Gerçek modeller sıcaklık dinamiklerini, ortam koşullarını ve ekipman sınırlarını da içerir.</p>

<h2 id="python-ile-üç-alternatif-gelecek">Python ile üç alternatif gelecek</h2>

<p>Aşağıdaki model, 100 MW nominal yakıt ısıl girdisini kullanır. Temizliğin kirlenmeyi yüzde 80 azalttığını, fakat dört saat üretim kaybettirdiğini varsayar. Her senaryo bağımsız bir kopyada çalışır; böylece biri diğerinin başlangıç durumunu değiştirmez.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">dataclasses</span> <span class="kn">import</span> <span class="n">dataclass</span><span class="p">,</span> <span class="n">replace</span>

<span class="nd">@dataclass</span>
<span class="k">class</span> <span class="nc">Twin</span><span class="p">:</span>
    <span class="n">fouling</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.5</span>
    <span class="n">eta0</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.40</span>
    <span class="n">alpha</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.12</span>
    <span class="n">auxiliary_mw</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">2.0</span>

    <span class="k">def</span> <span class="nf">forecast</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="n">load</span><span class="p">,</span> <span class="n">hours</span><span class="o">=</span><span class="mi">24</span><span class="p">,</span> <span class="n">clean</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="mi">0</span> <span class="o">&lt;</span> <span class="n">load</span> <span class="o">&lt;=</span> <span class="mi">1</span> <span class="ow">or</span> <span class="n">hours</span> <span class="o">&lt;</span> <span class="mi">1</span><span class="p">:</span>
            <span class="k">raise</span> <span class="nc">ValueError</span><span class="p">(</span><span class="sh">"</span><span class="s">Yük ve süre geçersiz</span><span class="sh">"</span><span class="p">)</span>

        <span class="n">model</span> <span class="o">=</span> <span class="nf">replace</span><span class="p">(</span><span class="n">self</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">clean</span><span class="p">:</span>
            <span class="n">model</span><span class="p">.</span><span class="n">fouling</span> <span class="o">*=</span> <span class="mf">0.2</span>

        <span class="n">energy_mwh</span> <span class="o">=</span> <span class="mf">0.0</span>
        <span class="k">for</span> <span class="n">hour</span> <span class="ow">in</span> <span class="nf">range</span><span class="p">(</span><span class="n">hours</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">clean</span> <span class="ow">and</span> <span class="n">hour</span> <span class="o">&lt;</span> <span class="mi">4</span><span class="p">:</span>
                <span class="k">continue</span>
            <span class="n">heat_mw</span> <span class="o">=</span> <span class="mi">100</span> <span class="o">*</span> <span class="n">load</span>
            <span class="n">efficiency</span> <span class="o">=</span> <span class="n">model</span><span class="p">.</span><span class="n">eta0</span> <span class="o">*</span> <span class="p">(</span>
                <span class="mi">1</span> <span class="o">-</span> <span class="n">model</span><span class="p">.</span><span class="n">alpha</span> <span class="o">*</span> <span class="n">model</span><span class="p">.</span><span class="n">fouling</span>
            <span class="p">)</span>
            <span class="n">power_mw</span> <span class="o">=</span> <span class="nf">max</span><span class="p">(</span>
                <span class="mi">0</span><span class="p">,</span> <span class="n">efficiency</span> <span class="o">*</span> <span class="n">heat_mw</span> <span class="o">-</span> <span class="n">model</span><span class="p">.</span><span class="n">auxiliary_mw</span>
            <span class="p">)</span>
            <span class="n">energy_mwh</span> <span class="o">+=</span> <span class="n">power_mw</span>  <span class="c1"># Bir saatlik adım
</span>            <span class="n">model</span><span class="p">.</span><span class="n">fouling</span> <span class="o">=</span> <span class="nf">min</span><span class="p">(</span>
                <span class="mi">1</span><span class="p">,</span> <span class="n">model</span><span class="p">.</span><span class="n">fouling</span> <span class="o">+</span> <span class="mf">0.004</span> <span class="o">*</span> <span class="n">load</span><span class="o">**</span><span class="mi">2</span>
            <span class="p">)</span>
        <span class="k">return</span> <span class="nf">round</span><span class="p">(</span><span class="n">energy_mwh</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>

<span class="n">plant</span> <span class="o">=</span> <span class="nc">Twin</span><span class="p">()</span>
<span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">Tam yük:</span><span class="sh">"</span><span class="p">,</span> <span class="n">plant</span><span class="p">.</span><span class="nf">forecast</span><span class="p">(</span><span class="mf">1.0</span><span class="p">))</span>
<span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">Temizlik:</span><span class="sh">"</span><span class="p">,</span> <span class="n">plant</span><span class="p">.</span><span class="nf">forecast</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">clean</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
<span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">Düşük yük:</span><span class="sh">"</span><span class="p">,</span> <span class="n">plant</span><span class="p">.</span><span class="nf">forecast</span><span class="p">(</span><span class="mf">0.8</span><span class="p">))</span>
</code></pre></div></div>

<p>Kod, saatlik gücü bir saatle çarparak toplam enerjiyi MWh cinsinden toplar. Temizlik sırasında üretimi sıfır kabul eder; bakımın yardımcı tüketimini ayrıca modellemez. Sonuçlar yaklaşık 849,1, 746,8 ve 671,2 MWh olur. Temizlik verimi yükseltse de ilk gün kaybedilen saatleri telafi edemez. Daha uzun ufukta sonuç değişebilir; ancak bu model arıza olasılığı hesaplamaz. Dolayısıyla düşük kirlenmeyi doğrudan “arıza önlendi” diye yorumlamak doğru değildir.</p>

<h2 id="sonuçları-karara-dönüştürmek">Sonuçları karara dönüştürmek</h2>

<p>Uygulamada dört adımlı bir döngü kurabilirsiniz:</p>

<ol>
  <li><strong>Ölç:</strong> Sensör verilerini topla; eksik, gecikmiş veya fiziksel olarak tutarsız kayıtları işaretle.</li>
  <li><strong>Kalibre et:</strong> Verim ve bozulma katsayılarını geçmiş işletme verileriyle belirle; ayrı dönemlerde doğrula.</li>
  <li><strong>Karşılaştır:</strong> Bakım tarihlerini, yük programlarını, yakıt giderlerini ve elektrik fiyatlarını birlikte değerlendir.</li>
  <li><strong>Denetle:</strong> Önerileri ekipman limitleri ve işletme prosedürleriyle kontrol ederek operatör onayına sun.</li>
</ol>

<p>Tek bir tahmine güvenmek yerine parametreleri farklı aralıklarda çalıştırın. Sensör hatası veya beklenenden uzun bakım, kazanan senaryoyu değiştirebilir. Ayrıca santral ağına bağlantıda erişim kontrolü ve ağ ayrımı gerekir; deneysel model doğrudan kontrol komutları üretmemelidir.</p>

<p>Dijital ikizin hedefi kristal küre olmak değildir. Hedef, kararların varsayımlarını görünür kılmak ve seçenekleri güvenle karşılaştırmaktır. Santral gerçek dünyada çalışırken, fikirleriniz önce sanal dünyada ter döksün!</p>]]></content><author><name>Sonsuz Us</name></author><category term="Proje" /><category term="dijital ikiz" /><category term="enerji" /><category term="simülasyon" /><category term="python" /><category term="kestirimci bakım" /><category term="verimlilik" /><summary type="html"><![CDATA[Bir enerji santralinde yanlış bakım zamanı, hem üretimi hem bütçeyi yakabilir. Peki türbini durdurmadan önce kararınızı sanal bir santralde deneseydiniz? Dijital ikiz, gerçek tesisten gelen verilerle güncellenen bir modeldir: Operatörlerin pahalı sürprizler yaşamadan “Ya şöyle yapsak?” sorusunu araştırmasını sağlar.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/dijital-ikizle-enerji-40.png" /><media:content medium="image" url="https://program.sonsuz.us/img/dijital-ikizle-enerji-40.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Eğitim Teknolojilerinde Mahremiyet: Öğrenciyi Ölçerken Sınırı Nerede Çizeriz?</title><link href="https://program.sonsuz.us/posts/egitim-teknolojilerinde-mahremiyet-ogrenciyi-olcerken-siniri-nerede-cizeriz/" rel="alternate" type="text/html" title="Eğitim Teknolojilerinde Mahremiyet: Öğrenciyi Ölçerken Sınırı Nerede Çizeriz?" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/egitim-teknolojilerinde-mahremiyet-ogrenciyi-olcerken-siniri-nerede-cizeriz</id><content type="html" xml:base="https://program.sonsuz.us/posts/egitim-teknolojilerinde-mahremiyet-ogrenciyi-olcerken-siniri-nerede-cizeriz/"><![CDATA[<p>Bir eğitim platformu, öğrencinin hangi soruda zorlandığını bilerek yardımcı olabilir. Peki aynı platformun gece kaçta bağlandığını, evdeki sesleri veya arkadaşlık ilişkilerini bilmesi gerekir mi? Dijital sınıflarda asıl mesele, toplanabilecek veri miktarı değil, toplanması haklı gösterilebilen veri miktarıdır. İyi bir ürün, öğrenciyi daha görünür kılarken özel hayatını camdan bir sınıfa dönüştürmez. Gelin bu sınırı hem etik hem teknik açıdan çizelim.</p>

<p>``</p>

<h2 id="önce-amaç-sonra-veri">Önce amaç, sonra veri</h2>

<p>Mahremiyet yalnızca bilgiyi başkalarından saklamak değildir; kişinin kendisi hakkındaki bilgilerin hangi bağlamda, kim tarafından ve nasıl kullanılacağını anlayabilmesidir. Güvenlik ise bu bilgileri yetkisiz erişimden korur. Aradaki fark önemlidir: Şifrelenmiş bir veritabanı, gereksiz yere toplanmış kamera görüntülerini etik hâle getirmez. Çelik kasa sağlamdır ama içine koyduğunuz her şey meşru olmayabilir.</p>

<p>Temel yaklaşım, <strong>amaçla sınırlılık ve veri minimizasyonudur</strong>. Her alan için şu soruyu sorun: “Bu veri olmadan tanımladığımız eğitim hizmeti gerçekten verilemez mi?” Öğrenme desteği amacıyla alınan verilerin sonradan reklam hedeflemesine aktarılması, öğrencinin beklediği bağlamı değiştirir. Ürün ekibinin merakı, tek başına yeterli gerekçe değildir.</p>

<h2 id="fayda-ile-risk-aynı-terazide">Fayda ile risk aynı terazide</h2>

<p>Kararları tartışmak için basit bir düşünce modeli kullanabiliriz:</p>

\[F(D)=U(D)-aR(D)\]

<p>Burada $D$ veri kümesi, $U(D)$ eğitimsel fayda, $R(D)$ mahremiyet riski, $a$ ise riske verilen ağırlıktır. Bu, hukuki uygunluğu hesaplayan sihirli bir formül değildir. Daha çok, “Biraz daha veri gerçekten anlamlı fayda sağlıyor mu?” sorusunu görünür kılar. Çocukların verilerinde risk değerlendirmesi özellikle ihtiyatlı yapılmalıdır.</p>

<table>
  <thead>
    <tr>
      <th>Veri veya uygulama</th>
      <th>Olası eğitimsel fayda</th>
      <th>Daha ölçülü tercih</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Soruya verilen cevap</td>
      <td>Konu eksiklerini belirlemek</td>
      <td>Gereken cevap ve kazanım bilgisi</td>
    </tr>
    <tr>
      <td>Kesintisiz ekran kaydı</td>
      <td>Sınav gözetimi</td>
      <td>Daha az müdahaleci değerlendirme tasarımı</td>
    </tr>
    <tr>
      <td>Tam konum bilgisi</td>
      <td>Çoğu derste sınırlı</td>
      <td>Gerekmiyorsa hiç toplamamak</td>
    </tr>
    <tr>
      <td>Yüzden duygu çıkarımı</td>
      <td>Güvenilirliği tartışmalı</td>
      <td>Öğrencinin gönüllü geri bildirimi</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/egitim-teknolojilerinde-mahremiyet-42.svg" alt="egitim-teknolojilerinde-mahremiyet-42" /></p>

<p>Önemli nokta şudur: Bir yöntemin teknik olarak mümkün olması, pedagojik olarak gerekli olduğu anlamına gelmez. Özellikle sürekli gözetim, öğrencinin davranışlarını ve kendini ifade etme isteğini değiştirebilir.</p>

<h2 id="minimizasyonu-kodun-kapısına-koymak">Minimizasyonu kodun kapısına koymak</h2>

<p>Aşağıdaki Python örneği, yalnızca izin verilen olayları kabul eder, ham öğrenci kimliğini anahtarlı bir takma kimliğe dönüştürür ve zamanı gün düzeyine indirger:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">hashlib</span>
<span class="kn">import</span> <span class="n">hmac</span>
<span class="kn">import</span> <span class="n">os</span>
<span class="kn">from</span> <span class="n">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>

<span class="n">KEY</span> <span class="o">=</span> <span class="nb">bytes</span><span class="p">.</span><span class="nf">fromhex</span><span class="p">(</span><span class="n">os</span><span class="p">.</span><span class="n">environ</span><span class="p">[</span><span class="sh">"</span><span class="s">PSEUDONYM_KEY_HEX</span><span class="sh">"</span><span class="p">])</span>
<span class="k">if</span> <span class="nf">len</span><span class="p">(</span><span class="n">KEY</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">32</span><span class="p">:</span>
    <span class="k">raise</span> <span class="nc">ValueError</span><span class="p">(</span><span class="sh">"</span><span class="s">En az 32 baytlık anahtar gerekli</span><span class="sh">"</span><span class="p">)</span>

<span class="n">ALLOWED</span> <span class="o">=</span> <span class="p">{</span><span class="sh">"</span><span class="s">exercise_completed</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">hint_requested</span><span class="sh">"</span><span class="p">}</span>

<span class="k">def</span> <span class="nf">minimize</span><span class="p">(</span><span class="n">event</span><span class="p">):</span>
    <span class="k">if</span> <span class="n">event</span><span class="p">[</span><span class="sh">"</span><span class="s">type</span><span class="sh">"</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">ALLOWED</span><span class="p">:</span>
        <span class="k">raise</span> <span class="nc">ValueError</span><span class="p">(</span><span class="sh">"</span><span class="s">Desteklenmeyen olay</span><span class="sh">"</span><span class="p">)</span>

    <span class="n">student</span> <span class="o">=</span> <span class="nf">str</span><span class="p">(</span><span class="n">event</span><span class="p">[</span><span class="sh">"</span><span class="s">student_id</span><span class="sh">"</span><span class="p">]).</span><span class="nf">encode</span><span class="p">(</span><span class="sh">"</span><span class="s">utf-8</span><span class="sh">"</span><span class="p">)</span>
    <span class="n">reference</span> <span class="o">=</span> <span class="n">hmac</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">KEY</span><span class="p">,</span> <span class="n">student</span><span class="p">,</span> <span class="n">hashlib</span><span class="p">.</span><span class="n">sha256</span><span class="p">).</span><span class="nf">hexdigest</span><span class="p">()</span>
    <span class="n">day</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">.</span><span class="nf">fromisoformat</span><span class="p">(</span><span class="n">event</span><span class="p">[</span><span class="sh">"</span><span class="s">time</span><span class="sh">"</span><span class="p">]).</span><span class="nf">date</span><span class="p">().</span><span class="nf">isoformat</span><span class="p">()</span>
    <span class="k">return</span> <span class="p">{</span>
        <span class="sh">"</span><span class="s">student_ref</span><span class="sh">"</span><span class="p">:</span> <span class="n">reference</span><span class="p">,</span>
        <span class="sh">"</span><span class="s">event</span><span class="sh">"</span><span class="p">:</span> <span class="n">event</span><span class="p">[</span><span class="sh">"</span><span class="s">type</span><span class="sh">"</span><span class="p">],</span>
        <span class="sh">"</span><span class="s">day</span><span class="sh">"</span><span class="p">:</span> <span class="n">day</span><span class="p">,</span>
    <span class="p">}</span>
</code></pre></div></div>

<p>Anahtar, güvenli biçimde üretilmiş rastgele baytların onaltılık gösterimi olarak yapılandırılmalı ve gizli tutulmalıdır. HMAC, düz kimlik özeti kullanımına göre tahmin saldırılarına karşı daha uygun bir yaklaşım sunar. Ancak <strong>takma adlandırma anonimleştirme değildir</strong>: Kayıtlar ilişkilendirilebilir ve hâlâ kişisel veri sayılabilir. Bu örnek ayrıca erişim kontrolü, silme veya hukuki uygunluk sağlamaz; yalnızca toplama sınırını gösterir.</p>

<h2 id="rıza-güç-dengesi-ve-algoritmalar">Rıza, güç dengesi ve algoritmalar</h2>

<p>“Kutuyu işaretledi, sorun çözüldü” yaklaşımı eğitimde özellikle kırılgandır. Öğrenci, derse katılmak için platformu kullanmak zorundaysa gerçek bir seçim yapabiliyor mu? Temel hizmet için gerekli işlemlerle isteğe bağlı analizler ayrılmalı; ret kararı öğrenciyi cezalandırmamalıdır.</p>

<p>KVKK, uygulanıyorsa GDPR ve ilgili eğitim mevzuatı kapsamında uygun hukuki dayanak belirlenmelidir; her işlem otomatik olarak rızaya dayanmaz. Çocuklara ve gerektiğinde velilere anlaşılır açıklamalar sunulmalıdır. Risk puanları da kader değildir: Bir öğrenciyi “başarısız olacak” diye etiketleyen model, önyargıları büyütebilir. Sonuçlar insan incelemesine, düzeltmeye ve itiraza açık olmalıdır.</p>

<h2 id="sorumluluk-yayına-çıkınca-bitmez">Sorumluluk, yayına çıkınca bitmez</h2>

<ul>
  <li><strong>Saklama:</strong> Her veri türü için gerekçeli süre belirleyin; “belki lazım olur” arşivi oluşturmayın.</li>
  <li><strong>Erişim:</strong> Öğretmen, destek çalışanı ve yöneticiye yalnızca görevleri için gereken yetkiyi verin.</li>
  <li><strong>Paylaşım:</strong> Tedarikçilerin veriyi hangi amaçlarla kullanabileceğini ve silebileceğini sözleşmelerle netleştirin.</li>
  <li><strong>Denetim:</strong> Kayıtları, ihlal müdahalesini ve öğrenci taleplerini düzenli test edin.</li>
  <li><strong>Adalet:</strong> Model hatalarının farklı öğrenci gruplarını eşitsiz etkileyip etkilemediğini değerlendirin.</li>
</ul>

<p>Kısacası iyi eğitim teknolojisi, en çok veriyi toplayan değil, en az müdahaleyle anlamlı destek sağlayandır. Öğrenci bir veri madeni değil; hakları, merakı ve geleceği olan bir insandır.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="öğrenci mahremiyeti" /><category term="eğitim teknolojileri" /><category term="veri etiği" /><category term="kvkk" /><category term="gizlilik" /><category term="python" /><summary type="html"><![CDATA[Bir eğitim platformu, öğrencinin hangi soruda zorlandığını bilerek yardımcı olabilir. Peki aynı platformun gece kaçta bağlandığını, evdeki sesleri veya arkadaşlık ilişkilerini bilmesi gerekir mi? Dijital sınıflarda asıl mesele, toplanabilecek veri miktarı değil, toplanması haklı gösterilebilen veri miktarıdır. İyi bir ürün, öğrenciyi daha görünür kılarken özel hayatını camdan bir sınıfa dönüştürmez. Gelin bu sınırı hem etik hem teknik açıdan çizelim.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/egitim-teknolojilerinde-mahremiyet-42.png" /><media:content medium="image" url="https://program.sonsuz.us/img/egitim-teknolojilerinde-mahremiyet-42.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Elektrikli Araç Şarjında Yük Dengeleme: Herkese Enerji, Şebekeye Nefes</title><link href="https://program.sonsuz.us/posts/elektrikli-arac-sarjinda-yuk-dengeleme-herkese-enerji-sebekeye-nefes/" rel="alternate" type="text/html" title="Elektrikli Araç Şarjında Yük Dengeleme: Herkese Enerji, Şebekeye Nefes" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/elektrikli-arac-sarjinda-yuk-dengeleme-herkese-enerji-sebekeye-nefes</id><content type="html" xml:base="https://program.sonsuz.us/posts/elektrikli-arac-sarjinda-yuk-dengeleme-herkese-enerji-sebekeye-nefes/"><![CDATA[<p>Bir otoparkta sekiz elektrikli aracın aynı anda prize bağlandığını düşünün. Her sürücü hızlı şarj ister; bina ise asansörleri, klimaları ve aydınlatmasıyla zaten enerji tüketmektedir. İşte yük dengeleme, bu elektrikli açık büfede herkesin tabağını doldururken mutfağın sigortasını attırmamayı sağlar. Üstelik mesele yalnızca gücü kısmak değil, mevcut kapasiteyi akıllıca paylaşmaktır.</p>

<p>``</p>

<h2 id="önce-temel-mantık-güç-bütçesi">Önce temel mantık: Güç bütçesi</h2>

<p>Şarj istasyonlarının etiket güçlerini toplamak, altyapının gerçek ihtiyacını anlamak için yeterli değildir. Önemli olan, tesisin bağlantı kapasitesiyle o anda tüketilen diğer yükler arasındaki farktır. Dinamik yük dengeleme, ölçüm cihazlarından aldığı verilerle bu farkı düzenli olarak hesaplar ve araçlara ayrılabilecek toplam gücü günceller.</p>

<p>Basitleştirilmiş aktif güç modeli şöyledir:</p>

\[P_{EV}(t)=\max(0, P_{tesis}-P_{diger}(t)-P_{pay})\]

<p>Burada $P_{pay}$ güvenlik rezervidir. Her aracın aldığı güç için de şu sınırlar geçerlidir:</p>

\[\sum_i p_i(t) \le P_{EV}(t), \qquad 0 \le p_i(t) \le P_{i,max}\]

<p>Örneğin tesis sınırı 120 kW, diğer tüketimler 45 kW ve rezerv 10 kW ise araçlara 65 kW kalır. Sekiz aracın her biri 11 kW isterse toplam talep 88 kW olur. Eşit paylaşımda araç başına yaklaşık 8,125 kW ayrılır; böylece toplam tüketim rezerv dahil belirlenen sınırı aşmaz.</p>

<h2 id="statik-mi-dinamik-mi-öngörülü-mü">Statik mi, dinamik mi, öngörülü mü?</h2>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Nasıl çalışır?</th>
      <th>Güçlü yanı</th>
      <th>Sınırlaması</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Statik</td>
      <td>Şarja sabit bir üst sınır koyar</td>
      <td>Basit ve öngörülebilir</td>
      <td>Boş kapasiteyi kullanamayabilir</td>
    </tr>
    <tr>
      <td>Dinamik</td>
      <td>Anlık bina tüketimine göre bütçeyi değiştirir</td>
      <td>Kapasiteyi daha verimli kullanır</td>
      <td>Güvenilir ölçüm ve iletişim ister</td>
    </tr>
    <tr>
      <td>Öngörülü</td>
      <td>Tüketim, tarife ve ayrılış tahminleriyle planlar</td>
      <td>Maliyet ve zaman hedeflerini birlikte yönetir</td>
      <td>Tahmin hatalarından etkilenir</td>
    </tr>
  </tbody>
</table>

<p>Statik sistem, restoranın her akşam aynı sayıda masa açmasına benzer. Dinamik sistem müşteri yoğunluğunu izler; öngörülü sistem ise rezervasyon defterini de okur. Ancak hiçbir yöntem fiziksel bağlantı sınırını sihirli biçimde büyütmez.</p>

<h2 id="gücü-adil-dağıtmak-ağırlıklı-paylaşım">Gücü adil dağıtmak: Ağırlıklı paylaşım</h2>

<p>Eşit paylaşım anlaşılırdır, fakat ihtiyaçlar eşit olmayabilir. Yarım saat sonra ayrılacak servis aracı, gece boyunca park edecek araçtan daha yüksek öncelik alabilir. Ağırlıklı paylaşımda öncelikler sayısallaştırılır; araçların kabul edebileceği güç sınırları da korunur.</p>

<p>Aşağıdaki Python fonksiyonu bütçeyi ağırlıklara göre dağıtır. Sınırına ulaşan aracın kullanamadığı pay, sonraki turda diğerlerine aktarılır:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">paylastir</span><span class="p">(</span><span class="n">butce</span><span class="p">,</span> <span class="n">araclar</span><span class="p">):</span>
    <span class="k">if</span> <span class="nf">any</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="sh">'</span><span class="s">max_kw</span><span class="sh">'</span><span class="p">]</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">a</span><span class="p">[</span><span class="sh">'</span><span class="s">agirlik</span><span class="sh">'</span><span class="p">]</span> <span class="o">&lt;=</span> <span class="mi">0</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">araclar</span><span class="p">):</span>
        <span class="k">raise</span> <span class="nc">ValueError</span><span class="p">(</span><span class="sh">'</span><span class="s">Güç negatif, ağırlık sıfır veya negatif olamaz.</span><span class="sh">'</span><span class="p">)</span>

    <span class="n">kalan</span> <span class="o">=</span> <span class="nf">max</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">butce</span><span class="p">)</span>
    <span class="n">sonuc</span> <span class="o">=</span> <span class="p">[</span><span class="mf">0.0</span><span class="p">]</span> <span class="o">*</span> <span class="nf">len</span><span class="p">(</span><span class="n">araclar</span><span class="p">)</span>
    <span class="n">aktif</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">a</span> <span class="ow">in</span> <span class="nf">enumerate</span><span class="p">(</span><span class="n">araclar</span><span class="p">)</span> <span class="k">if</span> <span class="n">a</span><span class="p">[</span><span class="sh">'</span><span class="s">max_kw</span><span class="sh">'</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]</span>

    <span class="k">while</span> <span class="n">aktif</span> <span class="ow">and</span> <span class="n">kalan</span> <span class="o">&gt;</span> <span class="mf">1e-6</span><span class="p">:</span>
        <span class="n">toplam_agirlik</span> <span class="o">=</span> <span class="nf">sum</span><span class="p">(</span><span class="n">araclar</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="sh">'</span><span class="s">agirlik</span><span class="sh">'</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">aktif</span><span class="p">)</span>
        <span class="n">tur_butcesi</span> <span class="o">=</span> <span class="n">kalan</span>

        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">aktif</span><span class="p">:</span>
            <span class="n">arac</span> <span class="o">=</span> <span class="n">araclar</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
            <span class="n">pay</span> <span class="o">=</span> <span class="n">tur_butcesi</span> <span class="o">*</span> <span class="n">arac</span><span class="p">[</span><span class="sh">'</span><span class="s">agirlik</span><span class="sh">'</span><span class="p">]</span> <span class="o">/</span> <span class="n">toplam_agirlik</span>
            <span class="n">ek</span> <span class="o">=</span> <span class="nf">min</span><span class="p">(</span><span class="n">pay</span><span class="p">,</span> <span class="n">arac</span><span class="p">[</span><span class="sh">'</span><span class="s">max_kw</span><span class="sh">'</span><span class="p">]</span> <span class="o">-</span> <span class="n">sonuc</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
            <span class="n">sonuc</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+=</span> <span class="n">ek</span>
            <span class="n">kalan</span> <span class="o">-=</span> <span class="n">ek</span>

        <span class="n">aktif</span> <span class="o">=</span> <span class="p">[</span>
            <span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">aktif</span>
            <span class="k">if</span> <span class="n">araclar</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="sh">'</span><span class="s">max_kw</span><span class="sh">'</span><span class="p">]</span> <span class="o">-</span> <span class="n">sonuc</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mf">1e-6</span>
        <span class="p">]</span>

    <span class="k">return</span> <span class="n">sonuc</span>

<span class="n">araclar</span> <span class="o">=</span> <span class="p">[{</span><span class="sh">'</span><span class="s">max_kw</span><span class="sh">'</span><span class="p">:</span> <span class="mf">11.0</span><span class="p">,</span> <span class="sh">'</span><span class="s">agirlik</span><span class="sh">'</span><span class="p">:</span> <span class="mf">1.0</span><span class="p">}</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nf">range</span><span class="p">(</span><span class="mi">8</span><span class="p">)]</span>
<span class="nf">print</span><span class="p">(</span><span class="nf">paylastir</span><span class="p">(</span><span class="mf">65.0</span><span class="p">,</span> <span class="n">araclar</span><span class="p">))</span>
</code></pre></div></div>

<p>Bu örnek sekiz araç için yaklaşık 8,125 kW üretir. <code class="language-plaintext highlighter-rouge">max_kw</code>, yalnızca istasyonun etiketini değil, aracın ve bağlantının güncel sınırını temsil etmelidir. Fonksiyon sürekli güç paylaşımını gösterir; üretim sistemindeki haberleşme, hata yönetimi ve minimum akım koşullarını uygulamaz.</p>

<h2 id="sahada-matematiğin-yanına-mühendislik-koyun">Sahada matematiğin yanına mühendislik koyun</h2>

<p>Gerçek tesislerde toplam kW sınırı tek başına yeterli değildir. Özellikle tek fazlı araçlar, toplam kapasite uygun görünürken bir fazı aşırı yükleyebilir. Bu nedenle faz akımları, kablo sınırları, koruma elemanları ve gerektiğinde görünür güç de izlenmelidir. Yazılım, elektriksel korumanın yerine geçmez.</p>

<p>AC şarjda izin verilen minimum akımın altında kesintisiz paylaşım mümkün olmayabilir. Böyle durumlarda bazı oturumları sırayla bekletmek gerekir. Ölçüm gecikmesine karşı rezerv bırakmak, komut değişimlerini yumuşatmak ve iletişim kesildiğinde güvenli sınırlara dönmek de önemlidir.</p>

<h2 id="optimizasyonun-gerçek-hedefi">Optimizasyonun gerçek hedefi</h2>

<p>Güç, anlık hızdır; enerji ise zaman boyunca biriken miktardır. Sabit güçte bataryaya aktarılan yaklaşık enerji $E=\eta P\Delta t$ ile hesaplanır. Burada $\eta$ verim, $\Delta t$ saat cinsinden süredir. Ayrılış zamanına kadar gereken enerjiyi tamamlamak, her aracı sürekli maksimum güçte tutmaktan daha anlamlıdır.</p>

<p>Ucuz saatlere kaydırma, güneş üretimini değerlendirme ve tesisin tepe talebini azaltma aynı planın parçaları olabilir. Fakat düşük öncelikli araçların sürekli beklememesi için bekleme süresi de hesaba katılmalıdır. Başarılı yük dengeleme, en yüksek anlık gücü değil; güvenli, adil ve zamanında tamamlanan şarjı hedefler.</p>

<p><img src="/img/elektrikli-arac-sarjinda-28.svg" alt="elektrikli-arac-sarjinda-28" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="elektrikli araç" /><category term="yük dengeleme" /><category term="şarj altyapısı" /><category term="akıllı şebeke" /><category term="python" /><category term="enerji yönetimi" /><summary type="html"><![CDATA[Bir otoparkta sekiz elektrikli aracın aynı anda prize bağlandığını düşünün. Her sürücü hızlı şarj ister; bina ise asansörleri, klimaları ve aydınlatmasıyla zaten enerji tüketmektedir. İşte yük dengeleme, bu elektrikli açık büfede herkesin tabağını doldururken mutfağın sigortasını attırmamayı sağlar. Üstelik mesele yalnızca gücü kısmak değil, mevcut kapasiteyi akıllıca paylaşmaktır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/elektrikli-arac-sarjinda-28.png" /><media:content medium="image" url="https://program.sonsuz.us/img/elektrikli-arac-sarjinda-28.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Güneş Panelleri Şebekenin Ritmini Nasıl Yakalar? Dağıtık Enerjide Senkronizasyon</title><link href="https://program.sonsuz.us/posts/gunes-panelleri-sebekenin-ritmini-nasil-yakalar-dagitik-enerjide-senkronizasyon/" rel="alternate" type="text/html" title="Güneş Panelleri Şebekenin Ritmini Nasıl Yakalar? Dağıtık Enerjide Senkronizasyon" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/gunes-panelleri-sebekenin-ritmini-nasil-yakalar-dagitik-enerjide-senkronizasyon</id><content type="html" xml:base="https://program.sonsuz.us/posts/gunes-panelleri-sebekenin-ritmini-nasil-yakalar-dagitik-enerjide-senkronizasyon/"><![CDATA[<p><img src="/img/gunes-panelleri-sebekenin-56.svg" alt="gunes-panelleri-sebekenin-56" /></p>

<p>Çatınızdaki güneş panelleri öğle vakti elektrik üretirken şehir şebekesi kendi ritminde çalışmaya devam eder. Peki bu iki kaynak birbirine bağlandığında neden elektriksel bir kakofoni oluşmaz? Çünkü arada, enerjiyi dönüştürmenin yanında şebekenin temposunu izleyen bir inverter bulunur. Bu yazıda küçük üreticilerin dev elektrik orkestrasına nasıl katıldığını, kontrol teorisi ve küçük bir Python deneyiyle keşfedeceğiz.
``</p>

<h2 id="önce-aynı-dili-konuşmak-gerekir">Önce aynı dili konuşmak gerekir</h2>

<p>Güneş paneli doğru akım, yani DC üretir. Şebeke ise Türkiye’de nominal olarak 50 Hz alternatif akımla çalışır. İnverter, DC enerjiyi anahtarlama elemanlarıyla AC’ye dönüştürür; filtreler de anahtarlamanın yüksek frekanslı bileşenlerini azaltır. Ancak yalnızca sinüs benzeri bir dalga üretmek yetmez: bağlantı noktasındaki gerilim, frekans ve faz ilişkisi kontrol edilmelidir.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Güneş paneli tarafı</th>
      <th>Şebeke tarafı</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Elektrik biçimi</td>
      <td>DC</td>
      <td>AC</td>
    </tr>
    <tr>
      <td>Gerilim davranışı</td>
      <td>Işınım ve yüke bağlı</td>
      <td>Şebeke koşullarına bağlı</td>
    </tr>
    <tr>
      <td>Temel kontrol</td>
      <td>Çalışma noktasını seçmek</td>
      <td>Uyumlu akım enjekte etmek</td>
    </tr>
    <tr>
      <td>Aradaki köprü</td>
      <td>DC bağlantı devresi</td>
      <td>İnverter ve filtre</td>
    </tr>
  </tbody>
</table>

<p>Önemli ayrıntı şudur: Yaygın şebeke takip eden inverterler, güçlü şebekeye kendi gerilimlerini zorla dayatmaz. Şebeke gerilimini referans alarak verecekleri akımı düzenler. Kalabalıkta yürüyüş temposunu tutturmak gibi düşünün; herkesi kendi adımınıza uydurmaya çalışmazsınız.</p>

<h2 id="faz-neden-bu-kadar-önemli">Faz neden bu kadar önemli?</h2>

<p>İki AC büyüklüğünün faz farkı, enerjinin nasıl aktarıldığını belirler. Tek fazlı, sinüzoidal temel bileşen için aktif ve reaktif güç ilişkileri şöyledir:</p>

\[P=VI\cos\varphi, \qquad Q=VI\sin\varphi\]

<p>Burada $V$ ve $I$ etkin değerler, $\varphi$ ise gerilim ile akım arasındaki faz farkıdır. Aktif güç $P$, işe dönüşen enerji akışını temsil eder. Reaktif güç $Q$ ise elektrik ve manyetik alanlarla ilişkili alışveriştir; uygun kontrol edildiğinde yerel gerilim yönetimine yardımcı olabilir.</p>

<p>Birçok inverter, aktif güç aktarırken akımı gerilimle aynı fazda tutmaya çalışır. Gerektiğinde reaktif güç de sağlar. Ancak bu görevler bağımsız sınırsız düğmeler değildir: inverterin akım ve görünür güç kapasitesi paylaşılır. Daha fazla reaktif destek, bazı koşullarda aktarılabilecek aktif gücü azaltabilir.</p>

<h2 id="pll-elektronik-bir-ritim-dedektifi">PLL: Elektronik bir ritim dedektifi</h2>

<p>Faz kilitlemeli döngü, yani <strong>PLL</strong>, ölçülen şebeke geriliminden faz açısını tahmin eder. Yaygın yaklaşım, gerilim bileşenlerini dönen bir koordinat sistemine taşımaktır. Tahmin doğruysa uygun eksendeki hata yaklaşık sıfıra iner. PI denetleyici bu hatadan frekans düzeltmesi üretir:</p>

\[\hat{\omega}=\omega_0+K_p e+K_i\int e\,dt, \qquad \frac{d\hat{\theta}}{dt}=\hat{\omega}\]

<p>Aşağıdaki örnek, ideal ve normalize edilmiş iki dik gerilim bileşeniyle çalışan basitleştirilmiş bir PLL simülasyonudur. Gerçek donanıma komut göndermez.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">math</span>

<span class="n">dt</span> <span class="o">=</span> <span class="mf">0.0005</span>
<span class="n">theta</span> <span class="o">=</span> <span class="mf">0.0</span>
<span class="n">integral</span> <span class="o">=</span> <span class="mf">0.0</span>
<span class="n">omega_ref</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">math</span><span class="p">.</span><span class="n">pi</span> <span class="o">*</span> <span class="mi">50</span>
<span class="n">kp</span><span class="p">,</span> <span class="n">ki</span> <span class="o">=</span> <span class="mf">80.0</span><span class="p">,</span> <span class="mf">1600.0</span>

<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nf">range</span><span class="p">(</span><span class="mi">3000</span><span class="p">):</span>
    <span class="n">t</span> <span class="o">=</span> <span class="n">k</span> <span class="o">*</span> <span class="n">dt</span>
    <span class="n">grid_phase</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">math</span><span class="p">.</span><span class="n">pi</span> <span class="o">*</span> <span class="mf">50.1</span> <span class="o">*</span> <span class="n">t</span> <span class="o">+</span> <span class="mf">0.4</span>
    <span class="n">alpha</span> <span class="o">=</span> <span class="n">math</span><span class="p">.</span><span class="nf">cos</span><span class="p">(</span><span class="n">grid_phase</span><span class="p">)</span>
    <span class="n">beta</span> <span class="o">=</span> <span class="n">math</span><span class="p">.</span><span class="nf">sin</span><span class="p">(</span><span class="n">grid_phase</span><span class="p">)</span>

    <span class="n">error</span> <span class="o">=</span> <span class="n">beta</span> <span class="o">*</span> <span class="n">math</span><span class="p">.</span><span class="nf">cos</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">-</span> <span class="n">alpha</span> <span class="o">*</span> <span class="n">math</span><span class="p">.</span><span class="nf">sin</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
    <span class="n">integral</span> <span class="o">+=</span> <span class="n">error</span> <span class="o">*</span> <span class="n">dt</span>
    <span class="n">omega</span> <span class="o">=</span> <span class="n">omega_ref</span> <span class="o">+</span> <span class="n">kp</span> <span class="o">*</span> <span class="n">error</span> <span class="o">+</span> <span class="n">ki</span> <span class="o">*</span> <span class="n">integral</span>
    <span class="n">theta</span> <span class="o">=</span> <span class="p">(</span><span class="n">theta</span> <span class="o">+</span> <span class="n">omega</span> <span class="o">*</span> <span class="n">dt</span><span class="p">)</span> <span class="o">%</span> <span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">math</span><span class="p">.</span><span class="n">pi</span><span class="p">)</span>

    <span class="k">if</span> <span class="n">k</span> <span class="o">%</span> <span class="mi">1000</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
        <span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">t=</span><span class="si">{</span><span class="n">t</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="n">f</span><span class="si">}</span><span class="s">s, tahmin=</span><span class="si">{</span><span class="n">omega</span> <span class="o">/</span> <span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">math</span><span class="p">.</span><span class="n">pi</span><span class="p">)</span><span class="si">:</span><span class="p">.</span><span class="mi">3</span><span class="n">f</span><span class="si">}</span><span class="s">Hz</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">error</code>, gerçek faz ile tahmin arasındaki farkın sinüsüdür. İntegral terimi kalıcı frekans sapmasını giderir; <code class="language-plaintext highlighter-rouge">theta</code> ise tahmin edilen açıyı ilerletir. Tahmin, bu ideal koşullarda 50,1 Hz’e yaklaşır. Kazançlar örnektir: gerçek tasarımda gürültü, harmonikler, gecikme ve sınırlandırmalar değerlendirilir. Tek fazlı uygulamalarda dik bileşenin ayrıca oluşturulması gerekir.</p>

<h2 id="senkronizasyon-yalnızca-başlangıçtır">Senkronizasyon yalnızca başlangıçtır</h2>

<p>Panel tarafındaki MPPT algoritması en verimli çalışma noktasını ararken, DC bağlantı gerilimi kontrolü enerji dengesini yönetir. Daha hızlı akım döngüsü de şebekeye verilen akımı referansa uydurur. Bu katmanların bant genişlikleri uyumlu seçilmezse kontrolcüler birbirinin işine karışabilir.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Ana referans</th>
      <th>Tipik rol</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Şebeke takip eden</td>
      <td>Ölçülen şebeke gerilimi</td>
      <td>Mevcut şebekeye güç vermek</td>
    </tr>
    <tr>
      <td>Şebeke oluşturan</td>
      <td>İç gerilim ve frekans referansı</td>
      <td>Özellikle zayıf şebeke veya ada işletimini desteklemek</td>
    </tr>
  </tbody>
</table>

<p>Şebeke oluşturan kontrol de sınırsız güç üretmez; enerji kaynağı ve akım sınırları hâlâ belirleyicidir. Özellikle çok sayıda inverter bağlandığında, şebekenin empedansı ve kontrol döngülerinin etkileşimi kararlılık analizinin merkezine yerleşir.</p>

<h2 id="güvenli-bağlantı-iyi-ritimden-fazlasıdır">Güvenli bağlantı, iyi ritimden fazlasıdır</h2>

<p>Şebeke kesildiğinde üretimin kontrolsüz biçimde hattı beslememesi için adalanma koruması gerekir. Gerilim ve frekans korumaları, topraklama, bağlantı izinleri ve yerel şebeke kuralları da entegrasyonun parçasıdır. Gerçek bağlantı sertifikalı ekipman ve yetkin uzmanlarla yapılmalıdır. Kısacası başarılı entegrasyon; ritmi yakalamak, doğru miktarda enerji aktarmak ve gerektiğinde güvenle sahneden çekilmektir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="dağıtık enerji" /><category term="güneş enerjisi" /><category term="şebeke entegrasyonu" /><category term="inverter" /><category term="pll" /><category term="python" /><summary type="html"><![CDATA[Çatınızdaki güneş panelleri öğle vakti elektrik üretirken şehir şebekesi kendi ritminde çalışmaya devam eder. Peki bu iki kaynak birbirine bağlandığında neden elektriksel bir kakofoni oluşmaz? Çünkü arada, enerjiyi dönüştürmenin yanında şebekenin temposunu izleyen bir inverter bulunur. Bu yazıda küçük üreticilerin dev elektrik orkestrasına nasıl katıldığını, kontrol teorisi ve küçük bir Python deneyiyle keşfedeceğiz.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/gunes-panelleri-sebekenin-56.png" /><media:content medium="image" url="https://program.sonsuz.us/img/gunes-panelleri-sebekenin-56.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">İnsansız Araçlarda Pil Yönetimi: Görev Süresini Algoritmalarla Uzatmak</title><link href="https://program.sonsuz.us/posts/insansiz-araclarda-pil-yonetimi-gorev-suresini-algoritmalarla-uzatmak/" rel="alternate" type="text/html" title="İnsansız Araçlarda Pil Yönetimi: Görev Süresini Algoritmalarla Uzatmak" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/insansiz-araclarda-pil-yonetimi-gorev-suresini-algoritmalarla-uzatmak</id><content type="html" xml:base="https://program.sonsuz.us/posts/insansiz-araclarda-pil-yonetimi-gorev-suresini-algoritmalarla-uzatmak/"><![CDATA[<p><img src="/img/insansiz-araclarda-pil-28.svg" alt="insansiz-araclarda-pil-28" /></p>

<p>Bir insansız aracın başarılı olması, yalnızca hedefe ulaşmasına değil, geri dönecek enerjiyi de saklamasına bağlıdır. Pil göstergesi yüzde yirmiyi gösterirken son bir fotoğraf çekmek cazip gelebilir; ancak algoritmanın romantizme değil, enerji bütçesine ihtiyacı vardır. Peki görev değeri, uçuş süresi ve güvenlik nasıl birlikte optimize edilir?
``</p>

<h2 id="önce-enerjinin-muhasebesini-tutalım">Önce enerjinin muhasebesini tutalım</h2>

<p>Pil kapasitesi, görev boyunca kullanılabilecek enerjiyle aynı şey değildir. Sıcaklık, yaşlanma, yüksek akım çekişi ve gerilim düşümü gerçek kapasiteyi etkiler. Bu nedenle yalnızca nominal amper-saat değerine bakmak yanıltıcıdır. Enerji yaklaşık olarak gerilim ve kapasitenin çarpımıyla hesaplanabilir; ancak planlama sırasında ölçümlerle güncellenen bir tahmin kullanmak daha güvenilirdir.</p>

<p>Anlık güç tüketimi $P(t)=V(t)I(t)$ şeklindedir. Güç watt, zaman saniye olduğunda tüketilen enerji:</p>

\[E_{\mathrm{Wh}}=\frac{1}{3600}\int_0^{T_{\mathrm{s}}}P(t)\,dt\]

<p>Buradaki önemli ayrım şudur: güç, tüketim hızıdır; enerji ise toplam harcamadır. Daha güçlü çalışan bir motor, görevi yeterince hızlı bitirirse toplamda daha az enerji tüketebilir. Tersine, yavaş ilerlemek elektroniklerin daha uzun süre açık kalmasına neden olabilir.</p>

<table>
  <thead>
    <tr>
      <th>Etken</th>
      <th>Enerjiye etkisi</th>
      <th>Planlamadaki karşılığı</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Hız</td>
      <td>Süreyi ve hareket gücünü değiştirir</td>
      <td>Ekonomik hız seçimi</td>
    </tr>
    <tr>
      <td>Rüzgâr veya eğim</td>
      <td>Güzergâha bağlı maliyet oluşturur</td>
      <td>Yön duyarlı rota</td>
    </tr>
    <tr>
      <td>Sensör kullanımı</td>
      <td>Ek güç tüketir</td>
      <td>Gerektiğinde etkinleştirme</td>
    </tr>
    <tr>
      <td>Pil sıcaklığı</td>
      <td>Kullanılabilir kapasiteyi etkiler</td>
      <td>Dinamik kapasite tahmini</td>
    </tr>
  </tbody>
</table>

<p>Örneğin bir kara aracında aerodinamik güç, uygun koşullarda hızın yaklaşık küpüyle büyür. Drone içinse askıda kalma, ileri uçuş ve tırmanış farklı modeller gerektirir. Tek bir “kilometre başına tüketim” sabiti her platforma uymaz.</p>

<h2 id="görevi-bir-optimizasyon-problemine-çevirmek">Görevi bir optimizasyon problemine çevirmek</h2>

<p>Her alt göreve bir ödül $r_i$, enerji maliyeti $e_i$ ve süre $t_i$ atayalım. Seçim değişkeni $x_i\in{0,1}$ olsun. Amaç, toplam görev değerini artırmaktır:</p>

\[\max \sum_i r_i x_i\]

<p>Enerji kısıtı ise şöyledir:</p>

\[\sum_i e_i x_i \le E_{\text{tahmini}}-E_{\text{dönüş}}-E_{\text{rezerv}}\]

<p>Benzer biçimde toplam süre, dönüş süresi çıkarılmış zaman bütçesini aşmamalıdır. Dönüş enerjisi planlı dönüş içindir; rezerv ise tahmin hataları ve beklenmeyen koşullar için ayrı tutulur.</p>

<p>Bu sade model, iki kısıtlı sırt çantası problemidir. Görev sırası ve aralarındaki mesafeler de karar değişkeniyse rota optimizasyonu devreye girer. Dolayısıyla en kısa yol, en değerli veya en güvenli görev planı olmayabilir.</p>

<h2 id="python-ile-enerji-ve-süre-bütçelemesi">Python ile enerji ve süre bütçelemesi</h2>

<p>Aşağıdaki dinamik programlama örneği, bağımsız görevlerden en değerli birleşimi seçer. Maliyetler hareket ve sensör tüketimini içeren önceden hesaplanmış değerlerdir. Görevler arası geçiş maliyetinin seçim sırasına bağlı olduğu gerçek rotalar için bu varsayım yeterli değildir.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">math</span> <span class="kn">import</span> <span class="n">ceil</span><span class="p">,</span> <span class="n">floor</span>

<span class="n">gorevler</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">(</span><span class="sh">"</span><span class="s">harita</span><span class="sh">"</span><span class="p">,</span> <span class="mi">14</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">6</span><span class="p">),</span>
    <span class="p">(</span><span class="sh">"</span><span class="s">ornek</span><span class="sh">"</span><span class="p">,</span> <span class="mi">18</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">9</span><span class="p">),</span>
    <span class="p">(</span><span class="sh">"</span><span class="s">tarama</span><span class="sh">"</span><span class="p">,</span> <span class="mi">30</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">12</span><span class="p">),</span>
    <span class="p">(</span><span class="sh">"</span><span class="s">fotograf</span><span class="sh">"</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">4</span><span class="p">),</span>
<span class="p">]</span>

<span class="n">adim</span> <span class="o">=</span> <span class="mf">0.5</span>  <span class="c1"># Wh
</span><span class="n">enerji_limiti</span> <span class="o">=</span> <span class="nf">floor</span><span class="p">((</span><span class="mi">80</span> <span class="o">-</span> <span class="mi">12</span> <span class="o">-</span> <span class="mi">8</span><span class="p">)</span> <span class="o">/</span> <span class="n">adim</span><span class="p">)</span>
<span class="n">sure_limiti</span> <span class="o">=</span> <span class="mi">30</span> <span class="o">-</span> <span class="mi">5</span>  <span class="c1"># dakika; dönüş hariç
# Anahtar: (enerji dilimi, dakika)
# Değer: (toplam ödül, seçilen görevler)
</span><span class="n">dp</span> <span class="o">=</span> <span class="p">{(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="p">[])}</span>

<span class="k">for</span> <span class="n">ad</span><span class="p">,</span> <span class="n">enerji</span><span class="p">,</span> <span class="n">sure</span><span class="p">,</span> <span class="n">odul</span> <span class="ow">in</span> <span class="n">gorevler</span><span class="p">:</span>
    <span class="n">yeni</span> <span class="o">=</span> <span class="nf">dict</span><span class="p">(</span><span class="n">dp</span><span class="p">)</span>
    <span class="nf">for </span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">t</span><span class="p">),</span> <span class="p">(</span><span class="n">puan</span><span class="p">,</span> <span class="n">secim</span><span class="p">)</span> <span class="ow">in</span> <span class="n">dp</span><span class="p">.</span><span class="nf">items</span><span class="p">():</span>
        <span class="n">ne</span> <span class="o">=</span> <span class="n">e</span> <span class="o">+</span> <span class="nf">ceil</span><span class="p">(</span><span class="n">enerji</span> <span class="o">/</span> <span class="n">adim</span><span class="p">)</span>
        <span class="n">nt</span> <span class="o">=</span> <span class="n">t</span> <span class="o">+</span> <span class="n">sure</span>
        <span class="k">if</span> <span class="n">ne</span> <span class="o">&lt;=</span> <span class="n">enerji_limiti</span> <span class="ow">and</span> <span class="n">nt</span> <span class="o">&lt;=</span> <span class="n">sure_limiti</span><span class="p">:</span>
            <span class="n">aday</span> <span class="o">=</span> <span class="p">(</span><span class="n">puan</span> <span class="o">+</span> <span class="n">odul</span><span class="p">,</span> <span class="n">secim</span> <span class="o">+</span> <span class="p">[</span><span class="n">ad</span><span class="p">])</span>
            <span class="k">if</span> <span class="n">aday</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">yeni</span><span class="p">.</span><span class="nf">get</span><span class="p">((</span><span class="n">ne</span><span class="p">,</span> <span class="n">nt</span><span class="p">),</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">[]))[</span><span class="mi">0</span><span class="p">]:</span>
                <span class="n">yeni</span><span class="p">[(</span><span class="n">ne</span><span class="p">,</span> <span class="n">nt</span><span class="p">)]</span> <span class="o">=</span> <span class="n">aday</span>
    <span class="n">dp</span> <span class="o">=</span> <span class="n">yeni</span>

<span class="nf">print</span><span class="p">(</span><span class="nf">max</span><span class="p">(</span><span class="n">dp</span><span class="p">.</span><span class="nf">values</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">sonuc</span><span class="p">:</span> <span class="n">sonuc</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
</code></pre></div></div>

<p>Algoritma enerji maliyetlerini yukarı, bütçeyi aşağı yuvarlayarak enerji açısından ihtiyatlı davranır. Süreler burada tam dakika kabul edilmiştir. Sonuç, 19 puanlık harita, örnek ve fotoğraf birleşimidir. Bütçenin tamamını tüketmek zorunlu değildir; amaç pili boşaltmak değil, kısıtlar altında en yüksek değeri üretmektir.</p>

<h2 id="planı-sahada-yeniden-hesaplamak">Planı sahada yeniden hesaplamak</h2>

<p>Başlangıçta kusursuz görünen plan, karşı rüzgârla birkaç dakika içinde eskir. Model öngörülü kontrol yaklaşımında araç belirli aralıklarla kalan enerjiyi tahmin eder, kısa bir planlama ufkunu optimize eder ve yalnızca ilk kararı uygular. Ardından ölçümlerle yeniden planlar.</p>

<p>Pil doluluk tahmini için akım entegrasyonu, gerilim modeliyle birleştirilebilir; Kalman filtresi bu birleşimin yaygın yöntemlerinden biridir. Planlayıcı ayrıca dönüş maliyetini mevcut konuma göre güncellemelidir. Beklenen tüketim yerine ihtiyatlı senaryolarla hesaplanan tüketim kullanmak, özellikle rüzgârlı görevlerde güvenliği artırır.</p>

<p>En iyi sistem üç metriği birlikte izler: tamamlanan görev değeri, enerji tahmin hatası ve dönüşte kalan rezerv. Böylece optimizasyon, yalnızca simülasyonda güzel görünen bir sayı olmaktan çıkar; ölçülebilir ve güvenli bir operasyon politikasına dönüşür.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="pil yönetimi" /><category term="insansız araçlar" /><category term="enerji optimizasyonu" /><category term="görev planlama" /><category term="dinamik programlama" /><category term="robotik" /><summary type="html"><![CDATA[Bir insansız aracın başarılı olması, yalnızca hedefe ulaşmasına değil, geri dönecek enerjiyi de saklamasına bağlıdır. Pil göstergesi yüzde yirmiyi gösterirken son bir fotoğraf çekmek cazip gelebilir; ancak algoritmanın romantizme değil, enerji bütçesine ihtiyacı vardır. Peki görev değeri, uçuş süresi ve güvenlik nasıl birlikte optimize edilir?]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/insansiz-araclarda-pil-28.png" /><media:content medium="image" url="https://program.sonsuz.us/img/insansiz-araclarda-pil-28.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Kripto Borsalarının Kalbi: Emir Eşleştirme Motoru Nasıl Çalışır?</title><link href="https://program.sonsuz.us/posts/kripto-borsalarinin-kalbi-emir-eslestirme-motoru-nasil-calisir/" rel="alternate" type="text/html" title="Kripto Borsalarının Kalbi: Emir Eşleştirme Motoru Nasıl Çalışır?" /><published>2026-11-03T00:00:00+00:00</published><updated>2026-11-03T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/kripto-borsalarinin-kalbi-emir-eslestirme-motoru-nasil-calisir</id><content type="html" xml:base="https://program.sonsuz.us/posts/kripto-borsalarinin-kalbi-emir-eslestirme-motoru-nasil-calisir/"><![CDATA[<p>Bir kripto borsasında “Al” düğmesine bastığınızda, arka planda dijital bir müzayede başlar. Ancak tokmak tutan bir görevli yoktur: Binlerce emri sıralayan, uygun karşı tarafı bulan ve işlemleri kaydeden bir eşleştirme motoru vardır. Bu motorun sırrı yalnızca hız değil, herkes için aynı kuralları uygulamasıdır.
``</p>

<h2 id="önce-mantık-emir-defteri-nedir">Önce Mantık: Emir Defteri Nedir?</h2>

<p>Emir defteri, gerçekleşmeyi bekleyen alış ve satış emirlerini tutar. Alış tarafındaki en yüksek fiyat <strong>en iyi alış</strong>, satış tarafındaki en düşük fiyat ise <strong>en iyi satış</strong> olarak adlandırılır. Aralarındaki fark, yani spread:</p>

\[s = P_{satış} - P_{alış}\]

<p>Bir limit alış emri, ödemeye razı olduğunuz azami fiyatı belirtir. Limit satış emri ise kabul edeceğiniz asgari fiyatı söyler. Alıcının limiti satıcının fiyatına eşit veya yüksekse eşleşme mümkündür. Piyasa emri fiyat sınırı koymadan mevcut likiditeyi tüketir; büyük emirlerde bu nedenle kayma oluşabilir.</p>

<p>Örneğin satış defterinde 100 USDT’den iki, 101 USDT’den üç token bulunsun. Dört tokenlık, 101 USDT limitli alış emri önce iki tokenı 100’den, sonra iki tokenı 101’den alır. İşlem fiyatı, bu modelde defterde bekleyen emrin fiyatıdır.</p>

<h2 id="kim-önce-i̇şlem-görür">Kim Önce İşlem Görür?</h2>

<p>Yaygın yaklaşım <strong>fiyat-zaman önceliğidir</strong>: Daha iyi fiyat önce gelir; aynı fiyatta daha önce kabul edilen emir önceliklidir. Bu yüzden her fiyat seviyesinde bir FIFO kuyruğu tutulabilir.</p>

<table>
  <thead>
    <tr>
      <th>Veri yapısı</th>
      <th>Seviye ekleme/silme</th>
      <th>Temel karşılık</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Sıralı dizi</td>
      <td>$O(L)$</td>
      <td>Basit yapı, kaydırma maliyeti</td>
    </tr>
    <tr>
      <td>Dengeli arama ağacı</td>
      <td>$O(\log L)$</td>
      <td>Dinamik fiyat seviyelerinde verimlilik</td>
    </tr>
    <tr>
      <td>Sırasız sözlük</td>
      <td>Ortalama $O(1)$</td>
      <td>En iyi fiyatı ayrıca bulmak gerekir</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/kripto-borsalarinin-kalbi-33.svg" alt="kripto-borsalarinin-kalbi-33" /></p>

<p>Burada $L$, fiyat seviyesi sayısıdır. Ağaç kullanılan bir tasarımda en iyi seviyeye işaretçi tutulabilir; seviyenin içindeki kuyruk başını kaldırmak ise $O(1)$ maliyetlidir.</p>

<p>Fiyat ve miktarlar genellikle kayan noktalı sayılar yerine tam sayı olarak saklanır:</p>

\[P = p \times tick, \qquad Q = q \times lot\]

<p>Böylece yuvarlama sürprizleri yerine açık fiyat adımları ve miktar kuralları kullanılır.</p>

<h2 id="milisaniyelik-i̇şlem-hattı">Milisaniyelik İşlem Hattı</h2>

<p>Tipik akış şu istasyonlardan geçer:</p>

<ol>
  <li><strong>Ağ geçidi:</strong> Kimlik doğrulama, mesaj biçimi ve hız sınırları kontrol edilir.</li>
  <li><strong>Risk kontrolü:</strong> Bakiye, minimum miktar ve fiyat adımı doğrulanır; gerekli varlık rezerve edilir.</li>
  <li><strong>Sıralayıcı:</strong> Kabul edilen emir ve iptal komutlarına kesin bir sıra numarası atanır.</li>
  <li><strong>Motor:</strong> Komutlar bu sırayla uygulanır; gerçekleşmeler ve defter değişiklikleri üretilir.</li>
</ol>

<p>Aynı defteri birçok iş parçacığının gelişigüzel değiştirmesi yarış koşulları yaratır. Yaygın çözüm, her defter için tek yazarlı deterministik işlemektir. Ölçekleme farklı işlem çiftlerine dağıtılarak yapılabilir; birden fazla defter aynı süreçte de çalışabilir.</p>

<p>Önceliğin hakemi istemci saati değil, sunucunun kabul sırasıdır. Aksi hâlde bilgisayarının saatini değiştiren kullanıcı sırada öne geçmeye çalışabilir!</p>

<h2 id="küçük-bir-eşleştirme-prototipi">Küçük Bir Eşleştirme Prototipi</h2>

<p>Aşağıdaki Python kodu, önceden doğrulanmış bir limit alış emrini satış kuyruklarıyla eşleştirir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">collections</span> <span class="kn">import</span> <span class="n">deque</span>
<span class="kn">from</span> <span class="n">dataclasses</span> <span class="kn">import</span> <span class="n">dataclass</span>

<span class="nd">@dataclass</span>
<span class="k">class</span> <span class="nc">Order</span><span class="p">:</span>
    <span class="n">oid</span><span class="p">:</span> <span class="nb">int</span>
    <span class="n">price</span><span class="p">:</span> <span class="nb">int</span>
    <span class="n">qty</span><span class="p">:</span> <span class="nb">int</span>

<span class="k">def</span> <span class="nf">match_buy</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">qty</span><span class="p">,</span> <span class="n">asks</span><span class="p">):</span>
    <span class="n">trades</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="k">while</span> <span class="n">qty</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">asks</span><span class="p">:</span>
        <span class="n">price</span> <span class="o">=</span> <span class="nf">min</span><span class="p">(</span><span class="n">asks</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">price</span> <span class="o">&gt;</span> <span class="n">limit</span><span class="p">:</span>
            <span class="k">break</span>
        <span class="n">queue</span> <span class="o">=</span> <span class="n">asks</span><span class="p">[</span><span class="n">price</span><span class="p">]</span>
        <span class="n">maker</span> <span class="o">=</span> <span class="n">queue</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
        <span class="n">filled</span> <span class="o">=</span> <span class="nf">min</span><span class="p">(</span><span class="n">qty</span><span class="p">,</span> <span class="n">maker</span><span class="p">.</span><span class="n">qty</span><span class="p">)</span>
        <span class="n">trades</span><span class="p">.</span><span class="nf">append</span><span class="p">((</span><span class="n">maker</span><span class="p">.</span><span class="n">oid</span><span class="p">,</span> <span class="n">price</span><span class="p">,</span> <span class="n">filled</span><span class="p">))</span>
        <span class="n">qty</span> <span class="o">-=</span> <span class="n">filled</span>
        <span class="n">maker</span><span class="p">.</span><span class="n">qty</span> <span class="o">-=</span> <span class="n">filled</span>
        <span class="k">if</span> <span class="n">maker</span><span class="p">.</span><span class="n">qty</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
            <span class="n">queue</span><span class="p">.</span><span class="nf">popleft</span><span class="p">()</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">queue</span><span class="p">:</span>
            <span class="k">del</span> <span class="n">asks</span><span class="p">[</span><span class="n">price</span><span class="p">]</span>
    <span class="k">return</span> <span class="n">trades</span><span class="p">,</span> <span class="n">qty</span>

<span class="n">asks</span> <span class="o">=</span> <span class="p">{</span>
    <span class="mi">10000</span><span class="p">:</span> <span class="nf">deque</span><span class="p">([</span><span class="nc">Order</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10000</span><span class="p">,</span> <span class="mi">2</span><span class="p">)]),</span>
    <span class="mi">10100</span><span class="p">:</span> <span class="nf">deque</span><span class="p">([</span><span class="nc">Order</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">10100</span><span class="p">,</span> <span class="mi">3</span><span class="p">)]),</span>
<span class="p">}</span>
<span class="n">trades</span><span class="p">,</span> <span class="n">remaining</span> <span class="o">=</span> <span class="nf">match_buy</span><span class="p">(</span><span class="mi">10100</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="n">asks</span><span class="p">)</span>
</code></pre></div></div>

<p>Fiyat adımı 0,01 USDT kabul edilirse <code class="language-plaintext highlighter-rouge">10000</code>, 100 USDT’yi temsil eder. Kod kısmi gerçekleşmeleri işler ve boş seviyeleri kaldırır. Ancak <code class="language-plaintext highlighter-rouge">min(asks)</code> her turda seviyeleri tarar: Bu bir öğretim örneğidir, üretim motoru değildir. Eşleşmeyen miktar, GTC limit emrinde alış defterine eklenir; IOC emrinde iptal edilir.</p>

<h2 id="hız-yetmez-çökünce-ne-olacak">Hız Yetmez: Çökünce Ne Olacak?</h2>

<p>Motorun bellekte çalışması, kayıtların unutulabileceği anlamına gelmez. Komut günlüğü ve periyodik snapshot kullanılarak durum yeniden oluşturulur. Dışarıya kesin kabul veya işlem sonucu bildirilmeden önce gereken kalıcılık garantisi sağlanmalıdır. Günlük senkronizasyonu ve çoğaltma tercihleri gecikmeyi etkiler.</p>

<p>Yeniden oynatma aynı komutlardan aynı sonucu üretmelidir. Emir kimlikleriyle yinelenen istekler ayıklanır; piyasa verisi sıra numaralarıyla yayınlanır, kayıp mesajlar snapshot üzerinden tamamlanır. Bakiye muhasebesi de gerçekleşme olaylarını güvenilir biçimde işlemelidir.</p>

<p>Son olarak yalnızca ortalama gecikmeyi ölçmeyin: <strong>p99 gecikmesi</strong>, yoğunluk altında kuyruk büyümesi ve iptal performansı da önemlidir. İyi motor, hızlı bir çöpçatan olduğu kadar, sırası şaşmayan titiz bir muhasebecidir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="kripto" /><category term="emir-eşleştirme" /><category term="sistem-mimarisi" /><category term="algoritmalar" /><category term="düşük-gecikme" /><summary type="html"><![CDATA[Bir kripto borsasında “Al” düğmesine bastığınızda, arka planda dijital bir müzayede başlar. Ancak tokmak tutan bir görevli yoktur: Binlerce emri sıralayan, uygun karşı tarafı bulan ve işlemleri kaydeden bir eşleştirme motoru vardır. Bu motorun sırrı yalnızca hız değil, herkes için aynı kuralları uygulamasıdır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/kripto-borsalarinin-kalbi-33.png" /><media:content medium="image" url="https://program.sonsuz.us/img/kripto-borsalarinin-kalbi-33.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>