<?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-10-28T12:06:05+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ı Ev Ağlarında Mahremiyet ve Veri Güvenliği: Eviniz Sizi Dinliyor mu?</title><link href="https://program.sonsuz.us/posts/akilli-ev-aglarinda-mahremiyet-ve-veri-guvenligi-eviniz-sizi-dinliyor-mu/" rel="alternate" type="text/html" title="Akıllı Ev Ağlarında Mahremiyet ve Veri Güvenliği: Eviniz Sizi Dinliyor mu?" /><published>2026-10-28T00:00:00+00:00</published><updated>2026-10-28T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/akilli-ev-aglarinda-mahremiyet-ve-veri-guvenligi-eviniz-sizi-dinliyor-mu</id><content type="html" xml:base="https://program.sonsuz.us/posts/akilli-ev-aglarinda-mahremiyet-ve-veri-guvenligi-eviniz-sizi-dinliyor-mu/"><![CDATA[<p>Akıllı hoparlörlerden güvenlik kameralarına, robot süpürgelerden internete bağlı ampullere kadar evlerimiz giderek daha fazla veri üretiyor. Bu cihazlar yaşamı kolaylaştırırken ses kayıtları, görüntüler, hareket bilgileri ve günlük alışkanlıklar gibi oldukça kişisel verileri de işliyor. Dolayısıyla ev ağındaki güvenlik açığı yalnızca internetin yavaşlaması değil, özel hayatın görünür hâle gelmesi anlamına gelebilir.</p>

<p><img src="/img/akilli-ev-aglarinda-39.svg" alt="akilli-ev-aglarinda-39" /></p>

<p>``</p>

<h2 id="akıllı-ev-cihazları-hangi-verileri-toplar">Akıllı ev cihazları hangi verileri toplar?</h2>

<p>Bir cihazın topladığı veri, sunduğu özellikle doğrudan ilişkilidir. Akıllı termostat sıcaklık tercihlerini öğrenirken robot süpürge evin haritasını çıkarabilir. Kapı sensörleri ise evde bulunulan saatlerin tahmin edilmesine yardımcı olabilir. Tek başına önemsiz görünen bu kayıtlar birleştirildiğinde ayrıntılı bir davranış profili ortaya çıkar.</p>

<table>
  <thead>
    <tr>
      <th>Cihaz</th>
      <th>Toplanan veri</th>
      <th>Olası risk</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Akıllı kamera</td>
      <td>Görüntü, ses, hareket</td>
      <td>İzinsiz gözetleme</td>
    </tr>
    <tr>
      <td>Akıllı hoparlör</td>
      <td>Sesli komutlar, arama geçmişi</td>
      <td>Konuşmaların ifşası</td>
    </tr>
    <tr>
      <td>Robot süpürge</td>
      <td>Oda haritası, çalışma saatleri</td>
      <td>Ev düzeninin öğrenilmesi</td>
    </tr>
    <tr>
      <td>Akıllı priz</td>
      <td>Enerji kullanımı, zaman bilgisi</td>
      <td>Günlük rutinin tahmini</td>
    </tr>
    <tr>
      <td>Akıllı kilit</td>
      <td>Giriş-çıkış kayıtları</td>
      <td>Fiziksel güvenlik riski</td>
    </tr>
  </tbody>
</table>

<p>Mahremiyet riski basitçe şu modelle düşünülebilir:</p>

\[R = P \times E \times V\]

<p>Burada $P$ saldırının gerçekleşme olasılığını, $E$ açığa çıkacak verinin miktarını, $V$ ise verinin hassasiyetini temsil eder. Çok güçlü şifrelenen bir sistemde $P$ azalır; cihaz gereksiz veri toplamıyorsa $E$ küçülür. Sağlık veya kamera verileri söz konusu olduğunda ise $V$ doğal olarak yüksektir.</p>

<h2 id="veriler-nasıl-kötüye-kullanılabilir">Veriler nasıl kötüye kullanılabilir?</h2>

<p>En yaygın tehlikelerden biri varsayılan parolaların değiştirilmemesidir. Saldırganlar internete açık cihazları tarayarak bilinen kullanıcı adı ve parola kombinasyonlarını deneyebilir. Güncellenmeyen yazılımlar, güvensiz bulut servisleri ve şifrelenmemiş bağlantılar da diğer giriş kapılarıdır.</p>

<p>Tehlike her zaman dışarıdan gelmez. Üretici firmalar kullanım verilerini reklam, analiz veya ürün geliştirme amacıyla üçüncü taraflarla paylaşabilir. Kullanıcı sözleşmesindeki belirsiz ifadeler, teknik olarak izin verilmiş fakat kullanıcı açısından beklenmeyen veri kullanımlarına yol açabilir.</p>

<h2 id="temel-koruma-katmanları">Temel koruma katmanları</h2>

<p>Güvenli bir akıllı ev, tek bir sihirli ayar yerine katmanlı savunma yaklaşımıyla kurulur.</p>

<ol>
  <li><strong>Varsayılan parolaları değiştirin:</strong> Her cihaz için uzun ve benzersiz parola kullanın.</li>
  <li><strong>Çok faktörlü doğrulamayı açın:</strong> Hesap parolası sızsa bile ikinci bir kontrol katmanı oluşturur.</li>
  <li><strong>Cihazları ayrı ağa alın:</strong> IoT cihazlarını bilgisayar ve telefonlardan ayıran misafir ağı veya VLAN kullanın.</li>
  <li><strong>Güncellemeleri izleyin:</strong> Otomatik güncellemeyi açın; desteği sona ermiş cihazları değiştirin.</li>
  <li><strong>Gereksiz özellikleri kapatın:</strong> Kullanılmayan mikrofonu, uzaktan erişimi ve konum takibini devre dışı bırakın.</li>
  <li><strong>Gizlilik politikasını okuyun:</strong> Verinin nerede saklandığını ve nasıl silinebildiğini kontrol edin.</li>
</ol>

<table>
  <thead>
    <tr>
      <th>Zayıf yaklaşım</th>
      <th>Daha güvenli yaklaşım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Tüm cihazları aynı Wi-Fi ağına bağlamak</td>
      <td>IoT cihazlarını ayrı ağda tutmak</td>
    </tr>
    <tr>
      <td>Aynı parolayı tekrar kullanmak</td>
      <td>Parola yöneticisiyle benzersiz parola üretmek</td>
    </tr>
    <tr>
      <td>Güncellemeleri ertelemek</td>
      <td>Güvenlik yamalarını otomatik yüklemek</td>
    </tr>
    <tr>
      <td>Sürekli bulut kaydı</td>
      <td>Mümkünse yerel ve şifreli kayıt</td>
    </tr>
  </tbody>
</table>

<h2 id="ağınızdaki-cihazları-kontrol-edin">Ağınızdaki cihazları kontrol edin</h2>

<p>Teknik kullanıcılar, yönlendirici kayıtlarını incelemenin yanında yerel ağdaki aktif cihazları Python ile listeleyebilir. Aşağıdaki örnek, sistemdeki ARP tablosunu göstererek ağa yakın zamanda bağlanmış cihazların IP ve MAC adreslerini görmeye yardımcı olur:</p>

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

<span class="n">result</span> <span class="o">=</span> <span class="n">subprocess</span><span class="p">.</span><span class="nf">run</span><span class="p">(</span>
    <span class="p">[</span><span class="sh">"</span><span class="s">arp</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">-a</span><span class="sh">"</span><span class="p">],</span>
    <span class="n">capture_output</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
    <span class="n">text</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
    <span class="n">check</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">Ağda görülen cihazlar:</span><span class="sh">"</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="n">result</span><span class="p">.</span><span class="n">stdout</span><span class="p">)</span>
</code></pre></div></div>

<p>Bu kod bir güvenlik tarayıcısı değildir; yalnızca envanter çıkarmanın basit başlangıcıdır. Tanımadığınız bir cihaz görürseniz yönlendirici panelinden bağlantıyı engelleyebilir ve Wi-Fi parolanızı yenileyebilirsiniz.</p>

<p>Sonuç olarak akıllı ev güvenliği, cihaz satın alınırken başlamalıdır. Düzenli güncelleme sunan, açık gizlilik politikası bulunan ve yerel veri işleme seçenekleri sağlayan üreticiler tercih edilmelidir. Evinizi akıllandırırken temel ilke şu olmalı: Toplanmayan veri sızdırılamaz, erişilemeyen cihaz kolayca ele geçirilemez.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="akıllı ev" /><category term="siber güvenlik" /><category term="mahremiyet" /><category term="nesnelerin interneti" /><category term="veri güvenliği" /><category term="iot" /><summary type="html"><![CDATA[Akıllı hoparlörlerden güvenlik kameralarına, robot süpürgelerden internete bağlı ampullere kadar evlerimiz giderek daha fazla veri üretiyor. Bu cihazlar yaşamı kolaylaştırırken ses kayıtları, görüntüler, hareket bilgileri ve günlük alışkanlıklar gibi oldukça kişisel verileri de işliyor. Dolayısıyla ev ağındaki güvenlik açığı yalnızca internetin yavaşlaması değil, özel hayatın görünür hâle gelmesi anlamına gelebilir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/akilli-ev-aglarinda-39.png" /><media:content medium="image" url="https://program.sonsuz.us/img/akilli-ev-aglarinda-39.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Algorithmic Trading: Algoritmalar Finansal Piyasalarda Nasıl İşlem Yapar?</title><link href="https://program.sonsuz.us/posts/algorithmic-trading-algoritmalar-finansal-piyasalarda-nasil-islem-yapar/" rel="alternate" type="text/html" title="Algorithmic Trading: Algoritmalar Finansal Piyasalarda Nasıl İşlem Yapar?" /><published>2026-10-28T00:00:00+00:00</published><updated>2026-10-28T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/algorithmic-trading-algoritmalar-finansal-piyasalarda-nasil-islem-yapar</id><content type="html" xml:base="https://program.sonsuz.us/posts/algorithmic-trading-algoritmalar-finansal-piyasalarda-nasil-islem-yapar/"><![CDATA[<p>Finansal piyasalarda fiyatlar saniyeler içinde değişirken insan gözü grafiklere, haberlere ve kahve fincanına aynı anda yetişemez. Algorithmic trading, yani algoritmik işlem, önceden tanımlanmış kuralları kullanarak piyasa verilerini analiz eden ve otomatik biçimde emir gönderen sistemlerin genel adıdır. Buradaki amaç geleceği sihirli şekilde bilmek değil; ölçülebilir bir fikri hızlı, tutarlı ve test edilebilir bir sürece dönüştürmektir.</p>

<p>``</p>

<h2 id="temel-çalışma-mantığı">Temel çalışma mantığı</h2>

<p>Bir işlem algoritması genellikle dört aşamadan oluşur: veri toplama, sinyal üretme, risk kontrolü ve emir yürütme. Sistem önce fiyat, işlem hacmi, emir defteri veya ekonomik gösterge gibi verileri alır. Ardından bu verilerden alım ya da satım sinyali çıkarır. Risk motoru pozisyon büyüklüğünü sınırlar; yürütme katmanı ise emri borsaya iletir.</p>

<p>Basit bir hareketli ortalama stratejisinde kısa dönem ortalaması uzun dönem ortalamasını geçtiğinde alım sinyali üretilebilir:</p>

\[SMA_n(t)=\frac{1}{n}\sum_{i=0}^{n-1}P_{t-i}\]

<p>Burada $P_t$ ilgili zamandaki fiyatı, $n$ ise incelenen dönem sayısını gösterir. Örneğin $SMA_{10} &gt; SMA_{50}$ olduğunda algoritma yükseliş eğilimi varsayabilir. Ancak bu yalnızca bir hipotezdir; kesin kazanç garantisi değildir.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Temel fikir</th>
      <th>Güçlü yanı</th>
      <th>Başlıca riski</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Trend takibi</td>
      <td>Mevcut yönün süreceğini varsayar</td>
      <td>Güçlü trendlerde etkilidir</td>
      <td>Yatay piyasada sık hata</td>
    </tr>
    <tr>
      <td>Ortalama dönüş</td>
      <td>Fiyatın ortalamaya yaklaşmasını bekler</td>
      <td>Aşırı hareketleri değerlendirebilir</td>
      <td>Yeni trendi yanlış yorumlayabilir</td>
    </tr>
    <tr>
      <td>Arbitraj</td>
      <td>Benzer varlıkların fiyat farkını kullanır</td>
      <td>Piyasa yönüne daha az bağımlıdır</td>
      <td>Fark çok hızlı kapanabilir</td>
    </tr>
    <tr>
      <td>Piyasa yapıcılık</td>
      <td>Alış ve satış fiyatı sunar</td>
      <td>Fiyat farkından gelir hedefler</td>
      <td>Envanter ve ani hareket riski</td>
    </tr>
  </tbody>
</table>

<h2 id="sinyalden-gerçek-emre">Sinyalden gerçek emre</h2>

<p>Doğru sinyal üretmek tek başına yeterli değildir. Algoritma piyasa emri verdiğinde hızlı gerçekleşme elde eder, fakat beklenenden kötü bir fiyatla karşılaşabilir. Limit emri fiyatı kontrol eder, ancak hiç gerçekleşmeyebilir. Büyük emirler de piyasayı hareket ettirebilir. Bu nedenle bazı sistemler emri küçük parçalara ayırarak zamana yayar.</p>

<p>Gerçekleşme fiyatı ile karar anındaki beklenen fiyat arasındaki fark <strong>kayma</strong> olarak adlandırılır. Yaklaşık işlem sonucu şöyle modellenebilir:</p>

\[Net\ Getiri = Brüt\ Getiri - Komisyon - Kayma - Vergiler\]

<p>Kâğıt üzerinde başarılı görünen pek çok strateji, bu maliyetler eklendiğinde cazibesini kaybeder.</p>

<h2 id="küçük-bir-python-örneği">Küçük bir Python örneği</h2>

<p>Aşağıdaki kod, kısa ve uzun hareketli ortalamaları karşılaştırarak örnek sinyal üretir. Gerçek para ile emir göndermez; yalnızca stratejinin karar katmanını gösterir.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">pandas</span> <span class="k">as</span> <span class="n">pd</span>

<span class="k">def</span> <span class="nf">sinyal_uret</span><span class="p">(</span><span class="n">fiyatlar</span><span class="p">:</span> <span class="n">pd</span><span class="p">.</span><span class="n">Series</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">pd</span><span class="p">.</span><span class="n">DataFrame</span><span class="p">:</span>
    <span class="n">sonuc</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">DataFrame</span><span class="p">({</span><span class="sh">"</span><span class="s">fiyat</span><span class="sh">"</span><span class="p">:</span> <span class="n">fiyatlar</span><span class="p">})</span>
    <span class="n">sonuc</span><span class="p">[</span><span class="sh">"</span><span class="s">kisa_ortalama</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="n">fiyatlar</span><span class="p">.</span><span class="nf">rolling</span><span class="p">(</span><span class="mi">10</span><span class="p">).</span><span class="nf">mean</span><span class="p">()</span>
    <span class="n">sonuc</span><span class="p">[</span><span class="sh">"</span><span class="s">uzun_ortalama</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="n">fiyatlar</span><span class="p">.</span><span class="nf">rolling</span><span class="p">(</span><span class="mi">50</span><span class="p">).</span><span class="nf">mean</span><span class="p">()</span>

    <span class="n">sonuc</span><span class="p">[</span><span class="sh">"</span><span class="s">sinyal</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
    <span class="n">sonuc</span><span class="p">.</span><span class="n">loc</span><span class="p">[</span>
        <span class="n">sonuc</span><span class="p">[</span><span class="sh">"</span><span class="s">kisa_ortalama</span><span class="sh">"</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">sonuc</span><span class="p">[</span><span class="sh">"</span><span class="s">uzun_ortalama</span><span class="sh">"</span><span class="p">],</span> <span class="sh">"</span><span class="s">sinyal</span><span class="sh">"</span>
    <span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
    <span class="n">sonuc</span><span class="p">.</span><span class="n">loc</span><span class="p">[</span>
        <span class="n">sonuc</span><span class="p">[</span><span class="sh">"</span><span class="s">kisa_ortalama</span><span class="sh">"</span><span class="p">]</span> <span class="o">&lt;</span> <span class="n">sonuc</span><span class="p">[</span><span class="sh">"</span><span class="s">uzun_ortalama</span><span class="sh">"</span><span class="p">],</span> <span class="sh">"</span><span class="s">sinyal</span><span class="sh">"</span>
    <span class="p">]</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>

    <span class="k">return</span> <span class="n">sonuc</span>
</code></pre></div></div>

<p>Burada <code class="language-plaintext highlighter-rouge">1</code> alım yönünü, <code class="language-plaintext highlighter-rouge">-1</code> satış yönünü, <code class="language-plaintext highlighter-rouge">0</code> ise kararsız durumu temsil eder. Üretim ortamında veri eksikliği, bağlantı kopması, tekrar gönderilen emirler ve borsa reddi gibi durumlar ayrıca yönetilmelidir.</p>

<h2 id="backtest-neden-yeterli-değildir">Backtest neden yeterli değildir?</h2>

<p>Backtest, stratejiyi geçmiş veriler üzerinde çalıştırır. Fakat geçmişte iyi görünen sonuçlar aşırı uyumdan kaynaklanabilir. Algoritma piyasa davranışını değil, veri setindeki tesadüfleri ezberlemiş olabilir.</p>

<table>
  <thead>
    <tr>
      <th>Test türü</th>
      <th>Amaç</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Eğitim dönemi</td>
      <td>Kuralları ve parametreleri geliştirmek</td>
    </tr>
    <tr>
      <td>Doğrulama dönemi</td>
      <td>Parametre seçimini kontrol etmek</td>
    </tr>
    <tr>
      <td>Test dönemi</td>
      <td>Görülmemiş veride performansı ölçmek</td>
    </tr>
    <tr>
      <td>Paper trading</td>
      <td>Canlı piyasada sanal emirlerle denemek</td>
    </tr>
  </tbody>
</table>

<p>Risk yönetiminde maksimum pozisyon, günlük zarar limiti ve acil durdurma mekanizması bulunmalıdır. Sharpe oranı gibi ölçüler de getiri ile oynaklığı birlikte değerlendirir:</p>

\[Sharpe=\frac{R_p-R_f}{\sigma_p}\]

<p>Sonuç olarak algoritmik işlem; finans, istatistik, yazılım mühendisliği ve operasyon disiplininin birleşimidir. En iyi algoritma en karmaşık olan değil, varsayımları anlaşılır, maliyetleri gerçekçi ve risk sınırları açık olandır. Kod hızlı olabilir; fakat kontrolsüz risk ondan da hızlıdır. Bu içerik yatırım tavsiyesi değil, teknolojik sürecin eğitim amaçlı açıklamasıdır.</p>

<p><img src="/img/algorithmic-trading-algoritmalar-14.svg" alt="algorithmic-trading-algoritmalar-14" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="algorithmic trading" /><category term="algoritma" /><category term="finans" /><category term="python" /><category term="borsa" /><category term="nicel analiz" /><summary type="html"><![CDATA[Finansal piyasalarda fiyatlar saniyeler içinde değişirken insan gözü grafiklere, haberlere ve kahve fincanına aynı anda yetişemez. Algorithmic trading, yani algoritmik işlem, önceden tanımlanmış kuralları kullanarak piyasa verilerini analiz eden ve otomatik biçimde emir gönderen sistemlerin genel adıdır. Buradaki amaç geleceği sihirli şekilde bilmek değil; ölçülebilir bir fikri hızlı, tutarlı ve test edilebilir bir sürece dönüştürmektir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/algorithmic-trading-algoritmalar-14.png" /><media:content medium="image" url="https://program.sonsuz.us/img/algorithmic-trading-algoritmalar-14.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Dijital İkizlerle Kişiselleştirilmiş Tedavi: Hastanın Sanal Kopyası Nasıl Çalışır?</title><link href="https://program.sonsuz.us/posts/dijital-ikizlerle-kisisellestirilmis-tedavi-hastanin-sanal-kopyasi-nasil-calisir/" rel="alternate" type="text/html" title="Dijital İkizlerle Kişiselleştirilmiş Tedavi: Hastanın Sanal Kopyası Nasıl Çalışır?" /><published>2026-10-28T00:00:00+00:00</published><updated>2026-10-28T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/dijital-ikizlerle-kisisellestirilmis-tedavi-hastanin-sanal-kopyasi-nasil-calisir</id><content type="html" xml:base="https://program.sonsuz.us/posts/dijital-ikizlerle-kisisellestirilmis-tedavi-hastanin-sanal-kopyasi-nasil-calisir/"><![CDATA[<p><img src="/img/dijital-ikizlerle-kisisellestirilmis-14.svg" alt="dijital-ikizlerle-kisisellestirilmis-14" /></p>

<p>Bir tedavinin işe yarayıp yaramayacağını hastaya uygulamadan önce görebildiğimizi düşünün. Dijital ikiz teknolojisi, bir organın veya fizyolojik sistemin verilerle beslenen sanal bir kopyasını oluşturarak bu fikri gerçeğe yaklaştırıyor. Böylece farklı ilaç dozları, cerrahi yaklaşımlar ya da yaşam tarzı değişiklikleri bilgisayar ortamında sınanabiliyor. Kısacası doktorlar, gerçek hastaya dokunmadan önce onun dijital benzeri üzerinde güvenli bir prova yapabiliyor.
``</p>

<h2 id="dijital-ikiz-tam-olarak-nedir">Dijital ikiz tam olarak nedir?</h2>

<p>Dijital ikiz, yalnızca üç boyutlu bir organ modeli değildir. Anatomik yapının yanında kan akışı, elektriksel aktivite, metabolizma ve ilaçlara verilen tepki gibi dinamik süreçleri de temsil eder. Manyetik rezonans görüntüleri, bilgisayarlı tomografi, laboratuvar sonuçları, genetik veriler ve giyilebilir sensör ölçümleri ortak bir modelde birleştirilebilir.</p>

<p>Modelin temelinde matematiksel denklemler bulunur. Örneğin kandaki ilaç yoğunluğunun zamanla değişimi basitleştirilmiş olarak şöyle gösterilebilir:</p>

\[\frac{dC}{dt} = \frac{D}{V} - kC\]

<p>Burada $C$ ilaç konsantrasyonunu, $D$ uygulanan dozu, $V$ dağılım hacmini ve $k$ ilacın vücuttan uzaklaştırılma hızını temsil eder. Hastaya özgü böbrek fonksiyonu veya vücut ağırlığı değiştiğinde bu parametreler güncellenir. Böylece aynı ilacın iki kişide neden farklı sonuçlar doğurabileceği simüle edilir.</p>

<h2 id="sanal-hasta-nasıl-oluşturulur">Sanal hasta nasıl oluşturulur?</h2>

<p>Süreç genellikle dört aşamada ilerler:</p>

<ol>
  <li><strong>Veri toplama:</strong> Görüntüleme, tahlil, sensör ve hasta geçmişi verileri alınır.</li>
  <li><strong>Model kurma:</strong> Organın geometrisi çıkarılır ve fizyolojik kurallar modele eklenir.</li>
  <li><strong>Kalibrasyon:</strong> Simülasyon sonuçları hastanın gerçek ölçümleriyle karşılaştırılır.</li>
  <li><strong>Senaryo denemeleri:</strong> Farklı dozlar ve tedavi seçenekleri sanal ortamda test edilir.</li>
</ol>

<table>
  <thead>
    <tr>
      <th>Geleneksel yaklaşım</th>
      <th>Dijital ikiz yaklaşımı</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Ortalama hasta verilerine dayanabilir</td>
      <td>Hastaya özgü parametreleri kullanır</td>
    </tr>
    <tr>
      <td>Tedavi etkisi uygulamadan sonra gözlenir</td>
      <td>Olası etkiler önceden simüle edilir</td>
    </tr>
    <tr>
      <td>Doz ayarlaması deneme-yanılma içerebilir</td>
      <td>Çok sayıda doz sanal olarak karşılaştırılır</td>
    </tr>
    <tr>
      <td>Sınırlı sayıda senaryo değerlendirilebilir</td>
      <td>Binlerce senaryo hızlıca taranabilir</td>
    </tr>
  </tbody>
</table>

<h2 id="basitleştirilmiş-bir-doz-simülasyonu">Basitleştirilmiş bir doz simülasyonu</h2>

<p>Aşağıdaki Python örneği, farklı dozların kandaki tahmini ilaç yoğunluğunu nasıl değiştirdiğini hesaplar. Gerçek klinik modeller çok daha karmaşıktır; bu kod yalnızca temel mantığı gösterir.</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">konsantrasyon</span><span class="p">(</span><span class="n">doz</span><span class="p">,</span> <span class="n">hacim</span><span class="p">,</span> <span class="n">atilim_hizi</span><span class="p">,</span> <span class="n">saat</span><span class="p">):</span>
    <span class="c1"># Tek doz sonrası üstel azalmayı yaklaşık olarak hesaplar.
</span>    <span class="n">baslangic</span> <span class="o">=</span> <span class="n">doz</span> <span class="o">/</span> <span class="n">hacim</span>
    <span class="k">return</span> <span class="n">baslangic</span> <span class="o">*</span> <span class="n">math</span><span class="p">.</span><span class="nf">exp</span><span class="p">(</span><span class="o">-</span><span class="n">atilim_hizi</span> <span class="o">*</span> <span class="n">saat</span><span class="p">)</span>

<span class="n">hasta</span> <span class="o">=</span> <span class="p">{</span>
    <span class="sh">"</span><span class="s">dagilim_hacmi</span><span class="sh">"</span><span class="p">:</span> <span class="mi">42</span><span class="p">,</span>
    <span class="sh">"</span><span class="s">atilim_hizi</span><span class="sh">"</span><span class="p">:</span> <span class="mf">0.12</span>
<span class="p">}</span>

<span class="k">for</span> <span class="n">doz</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">50</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">150</span><span class="p">]:</span>
    <span class="n">sonuc</span> <span class="o">=</span> <span class="nf">konsantrasyon</span><span class="p">(</span>
        <span class="n">doz</span><span class="p">,</span>
        <span class="n">hasta</span><span class="p">[</span><span class="sh">"</span><span class="s">dagilim_hacmi</span><span class="sh">"</span><span class="p">],</span>
        <span class="n">hasta</span><span class="p">[</span><span class="sh">"</span><span class="s">atilim_hizi</span><span class="sh">"</span><span class="p">],</span>
        <span class="n">saat</span><span class="o">=</span><span class="mi">8</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="si">{</span><span class="n">doz</span><span class="si">}</span><span class="s"> mg için 8. saat: </span><span class="si">{</span><span class="n">sonuc</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"> mg/L</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<p>Bu simülasyonda dağılım hacmi ve atılım hızı hastaya göre değiştirilerek kişiselleştirme yapılır. Ardından sonuçlar, hedeflenen güvenli konsantrasyon aralığıyla karşılaştırılabilir. Ancak model çıktısı tek başına tedavi kararı değildir; doktor değerlendirmesi ve klinik kanıt gerekir.</p>

<h2 id="nerelerde-kullanılabilir">Nerelerde kullanılabilir?</h2>

<p>Kalbin dijital ikizi, ritim bozukluğunda elektrotların en uygun konumunu araştırabilir. Tümör modelleri, radyoterapi dozunun sağlıklı dokuya etkisini tahmin edebilir. Akciğer ikizleri ventilatör ayarlarını, damar modelleri ise stent yerleşimini değerlendirebilir. Sürekli sensör verisi geldiğinde ikiz de güncellenir; yani statik bir fotoğraf değil, hastayla birlikte değişen dijital bir yol arkadaşıdır.</p>

<h2 id="güçlü-fakat-kusursuz-değil">Güçlü fakat kusursuz değil</h2>

<p>Eksik veri, hatalı sensörler ve aşırı basitleştirilmiş biyolojik varsayımlar güvenilmez sonuçlar üretebilir. Ayrıca sağlık verilerinin mahremiyeti, algoritmik önyargı ve modelin kararından kimin sorumlu olacağı önemli tartışma alanlarıdır. Bu nedenle dijital ikizler doktorların yerini alan makineler olarak değil, kararlarını sayısal deneylerle destekleyen araçlar olarak görülmelidir.</p>

<p>Gelecekte daha hızlı hesaplama, gelişmiş yapay zekâ ve standartlaştırılmış sağlık verileri sayesinde kişiye özel sanal denemeler yaygınlaşabilir. Belki de reçete yazılmadan önce dijital ikizimiz kısa bir prova yapacak; fakat son sözü yine klinik uzmanlık, etik ilkeler ve gerçek dünya kanıtları söyleyecek.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="dijital ikiz" /><category term="kişiselleştirilmiş tıp" /><category term="sağlık teknolojileri" /><category term="yapay zeka" /><category term="simülasyon" /><category term="biyoinformatik" /><summary type="html"><![CDATA[Bir tedavinin işe yarayıp yaramayacağını hastaya uygulamadan önce görebildiğimizi düşünün. Dijital ikiz teknolojisi, bir organın veya fizyolojik sistemin verilerle beslenen sanal bir kopyasını oluşturarak bu fikri gerçeğe yaklaştırıyor. Böylece farklı ilaç dozları, cerrahi yaklaşımlar ya da yaşam tarzı değişiklikleri bilgisayar ortamında sınanabiliyor. Kısacası doktorlar, gerçek hastaya dokunmadan önce onun dijital benzeri üzerinde güvenli bir prova yapabiliyor.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/dijital-ikizlerle-kisisellestirilmis-14.png" /><media:content medium="image" url="https://program.sonsuz.us/img/dijital-ikizlerle-kisisellestirilmis-14.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Finansal Zaman Serileri: Bilgisayar Geçmiş Fiyatlardan Geleceği Öğrenebilir mi?</title><link href="https://program.sonsuz.us/posts/finansal-zaman-serileri-bilgisayar-gecmis-fiyatlardan-gelecegi-ogrenebilir-mi/" rel="alternate" type="text/html" title="Finansal Zaman Serileri: Bilgisayar Geçmiş Fiyatlardan Geleceği Öğrenebilir mi?" /><published>2026-10-28T00:00:00+00:00</published><updated>2026-10-28T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/finansal-zaman-serileri-bilgisayar-gecmis-fiyatlardan-gelecegi-ogrenebilir-mi</id><content type="html" xml:base="https://program.sonsuz.us/posts/finansal-zaman-serileri-bilgisayar-gecmis-fiyatlardan-gelecegi-ogrenebilir-mi/"><![CDATA[<p>Borsa grafiklerine bakıp “Bu çizgi birazdan kesin yükselir!” demek kolaydır; bunu tutarlı biçimde kanıtlamak ise oldukça zordur. Bilgisayarlar geçmiş fiyatları insanlardan çok daha hızlı inceleyebilir, ancak geleceği gösteren sihirli bir küreye sahip değildir. Finansal zaman serisi analizi, fiyatların içindeki tekrar eden örüntüleri, riskleri ve olasılıkları matematiksel yöntemlerle araştırır.</p>

<p><img src="/img/finansal-zaman-serileri-26.svg" alt="finansal-zaman-serileri-26" /></p>

<p>``</p>

<h2 id="finansal-zaman-serisi-nedir">Finansal zaman serisi nedir?</h2>

<p>Bir varlığın belirli zamanlarda ölçülen fiyatları bir zaman serisi oluşturur:</p>

\[P_1, P_2, P_3, \ldots, P_t\]

<p>Burada $P_t$, varlığın $t$ anındaki fiyatıdır. Fakat doğrudan fiyatları modellemek çoğu zaman yanıltıcıdır. Fiyat serileri genellikle durağan değildir; ortalamaları ve oynaklıkları zamanla değişebilir. Bu nedenle analistler çoğunlukla <strong>getiri</strong> kullanır:</p>

\[r_t = \frac{P_t-P_{t-1}}{P_{t-1}}\]

<p>Logaritmik getiri ise farklı dönemleri toplamayı kolaylaştırır:</p>

\[r_t = \ln\left(\frac{P_t}{P_{t-1}}\right)\]

<p>Örneğin fiyat 100’den 103’e çıkarsa basit getiri yaklaşık yüzde 3’tür. Bilgisayar açısından asıl soru şudur: Önceki getiriler, sıradaki getiri hakkında anlamlı bilgi taşıyor mu?</p>

<h2 id="bilgisayar-hangi-sinyalleri-arar">Bilgisayar hangi sinyalleri arar?</h2>

<p>Algoritmalar trend, momentum, mevsimsellik, işlem hacmi ve oynaklık gibi özellikleri araştırabilir. Ancak bulunan her ilişki gerçek bir ekonomik mekanizma değildir. Bazen model, verideki rastlantısal gürültüyü öğrenir; buna <strong>aşırı öğrenme</strong> denir.</p>

<table>
  <thead>
    <tr>
      <th>Kavram</th>
      <th>Ne anlatır?</th>
      <th>Yaygın risk</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Trend</td>
      <td>Uzun dönemli yön</td>
      <td>Yönün aniden değişmesi</td>
    </tr>
    <tr>
      <td>Momentum</td>
      <td>Hareketin kısa süre devam etmesi</td>
      <td>Geç sinyal üretmesi</td>
    </tr>
    <tr>
      <td>Ortalama dönüş</td>
      <td>Fiyatın tipik seviyeye yaklaşması</td>
      <td>“Tipik” seviyenin değişmesi</td>
    </tr>
    <tr>
      <td>Oynaklık</td>
      <td>Hareketlerin büyüklüğü</td>
      <td>Krizlerde hızla sıçraması</td>
    </tr>
    <tr>
      <td>Hacim</td>
      <td>Piyasa katılımı</td>
      <td>Tek başına yön göstermemesi</td>
    </tr>
  </tbody>
</table>

<p>Basit bir hareketli ortalama, son $n$ fiyatın ortalamasıdır:</p>

\[MA_t = \frac{1}{n}\sum_{i=0}^{n-1}P_{t-i}\]

<p>Kısa dönemli ortalama uzun dönemli ortalamayı geçtiğinde yükseliş sinyali üretilebilir. Ne var ki bu, geleceğin kesin yükseleceği anlamına gelmez; yalnızca geçmiş hareketin belirli bir özetidir.</p>

<h2 id="python-ile-küçük-bir-deney">Python ile küçük bir deney</h2>

<p>Aşağıdaki kod fiyatlardan getiri üretir, beş günlük hareketli ortalamayı hesaplar ve bir sonraki günün yönünü tahmin etmek için lojistik regresyon kullanır:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">pandas</span> <span class="k">as</span> <span class="n">pd</span>
<span class="kn">from</span> <span class="n">sklearn.linear_model</span> <span class="kn">import</span> <span class="n">LogisticRegression</span>
<span class="kn">from</span> <span class="n">sklearn.metrics</span> <span class="kn">import</span> <span class="n">accuracy_score</span>

<span class="c1"># CSV dosyasında Date ve Close sütunları bulunduğunu varsayıyoruz.
</span><span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nf">read_csv</span><span class="p">(</span><span class="sh">"</span><span class="s">prices.csv</span><span class="sh">"</span><span class="p">,</span> <span class="n">parse_dates</span><span class="o">=</span><span class="p">[</span><span class="sh">"</span><span class="s">Date</span><span class="sh">"</span><span class="p">])</span>
<span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">.</span><span class="nf">sort_values</span><span class="p">(</span><span class="sh">"</span><span class="s">Date</span><span class="sh">"</span><span class="p">)</span>

<span class="n">df</span><span class="p">[</span><span class="sh">"</span><span class="s">return</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="sh">"</span><span class="s">Close</span><span class="sh">"</span><span class="p">].</span><span class="nf">pct_change</span><span class="p">()</span>
<span class="n">df</span><span class="p">[</span><span class="sh">"</span><span class="s">ma5</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="sh">"</span><span class="s">Close</span><span class="sh">"</span><span class="p">].</span><span class="nf">rolling</span><span class="p">(</span><span class="mi">5</span><span class="p">).</span><span class="nf">mean</span><span class="p">()</span>
<span class="n">df</span><span class="p">[</span><span class="sh">"</span><span class="s">distance</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="sh">"</span><span class="s">Close</span><span class="sh">"</span><span class="p">]</span> <span class="o">/</span> <span class="n">df</span><span class="p">[</span><span class="sh">"</span><span class="s">ma5</span><span class="sh">"</span><span class="p">]</span> <span class="o">-</span> <span class="mi">1</span>
<span class="n">df</span><span class="p">[</span><span class="sh">"</span><span class="s">target</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">df</span><span class="p">[</span><span class="sh">"</span><span class="s">return</span><span class="sh">"</span><span class="p">].</span><span class="nf">shift</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">).</span><span class="nf">astype</span><span class="p">(</span><span class="nb">int</span><span class="p">)</span>
<span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">.</span><span class="nf">dropna</span><span class="p">()</span>

<span class="n">split</span> <span class="o">=</span> <span class="nf">int</span><span class="p">(</span><span class="nf">len</span><span class="p">(</span><span class="n">df</span><span class="p">)</span> <span class="o">*</span> <span class="mf">0.8</span><span class="p">)</span>
<span class="n">train</span><span class="p">,</span> <span class="n">test</span> <span class="o">=</span> <span class="n">df</span><span class="p">.</span><span class="n">iloc</span><span class="p">[:</span><span class="n">split</span><span class="p">],</span> <span class="n">df</span><span class="p">.</span><span class="n">iloc</span><span class="p">[</span><span class="n">split</span><span class="p">:]</span>

<span class="n">features</span> <span class="o">=</span> <span class="p">[</span><span class="sh">"</span><span class="s">return</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">distance</span><span class="sh">"</span><span class="p">]</span>
<span class="n">model</span> <span class="o">=</span> <span class="nc">LogisticRegression</span><span class="p">()</span>
<span class="n">model</span><span class="p">.</span><span class="nf">fit</span><span class="p">(</span><span class="n">train</span><span class="p">[</span><span class="n">features</span><span class="p">],</span> <span class="n">train</span><span class="p">[</span><span class="sh">"</span><span class="s">target</span><span class="sh">"</span><span class="p">])</span>

<span class="n">prediction</span> <span class="o">=</span> <span class="n">model</span><span class="p">.</span><span class="nf">predict</span><span class="p">(</span><span class="n">test</span><span class="p">[</span><span class="n">features</span><span class="p">])</span>
<span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">Doğruluk:</span><span class="sh">"</span><span class="p">,</span> <span class="nf">accuracy_score</span><span class="p">(</span><span class="n">test</span><span class="p">[</span><span class="sh">"</span><span class="s">target</span><span class="sh">"</span><span class="p">],</span> <span class="n">prediction</span><span class="p">))</span>
</code></pre></div></div>

<p>Buradaki kronolojik ayırma kritik önemdedir. Veriyi rastgele karıştırmak, gelecekteki bilgilerin eğitim kümesine sızmasına yol açabilir. Bu durum modelin gerçekte sahip olamayacağı bir avantaj kazanmasıdır.</p>

<h2 id="tahmin-başarısı-nasıl-değerlendirilir">Tahmin başarısı nasıl değerlendirilir?</h2>

<p>Yüzde 52 doğruluk ilk bakışta etkileyici görünmeyebilir; ancak işlem maliyetleri düşükse değerli olabilir. Tersine, yüzde 60 doğruluk yüksek komisyonlar ve büyük kayıplar nedeniyle zararla sonuçlanabilir. Bu yüzden doğruluğun yanında getiri, maksimum düşüş, Sharpe oranı ve işlem maliyetleri incelenmelidir.</p>

<p>Bilgisayar geçmişten olasılıksal ilişkiler öğrenebilir; fakat savaşlar, düzenlemeler, şirket haberleri ve yatırımcı psikolojisindeki kırılmalar geçmişte bulunmayabilir. En iyi yaklaşım, modeli bir kâhin değil, belirsizlik altında karar vermeye yardımcı olan ölçüm aracı olarak görmektir. Finansal tahminin asıl başarısı geleceği kusursuz bilmekten değil, yanlış çıkıldığında riski yönetebilmekten gelir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="finans" /><category term="zaman-serileri" /><category term="makine-öğrenmesi" /><category term="python" /><category term="veri-bilimi" /><category term="tahminleme" /><summary type="html"><![CDATA[Borsa grafiklerine bakıp “Bu çizgi birazdan kesin yükselir!” demek kolaydır; bunu tutarlı biçimde kanıtlamak ise oldukça zordur. Bilgisayarlar geçmiş fiyatları insanlardan çok daha hızlı inceleyebilir, ancak geleceği gösteren sihirli bir küreye sahip değildir. Finansal zaman serisi analizi, fiyatların içindeki tekrar eden örüntüleri, riskleri ve olasılıkları matematiksel yöntemlerle araştırır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/finansal-zaman-serileri-26.png" /><media:content medium="image" url="https://program.sonsuz.us/img/finansal-zaman-serileri-26.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Mikroskobik Görüntülerde Otomatik Hücre Sayımı ve Segmentasyon</title><link href="https://program.sonsuz.us/posts/mikroskobik-goruntulerde-otomatik-hucre-sayimi-ve-segmentasyon/" rel="alternate" type="text/html" title="Mikroskobik Görüntülerde Otomatik Hücre Sayımı ve Segmentasyon" /><published>2026-10-28T00:00:00+00:00</published><updated>2026-10-28T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/mikroskobik-goruntulerde-otomatik-hucre-sayimi-ve-segmentasyon</id><content type="html" xml:base="https://program.sonsuz.us/posts/mikroskobik-goruntulerde-otomatik-hucre-sayimi-ve-segmentasyon/"><![CDATA[<p>Mikroskop altında kan hücrelerini tek tek saymak, sabır isteyen ve insan hatasına açık bir işlemdir. Neyse ki görüntü işleme algoritmaları; eritrosit, lökosit ve trombosit gibi hücreleri arka plandan ayırabilir, sınırlarını belirleyebilir ve saniyeler içinde sayabilir. Bu süreç yalnızca “resimdeki daireleri bulmak” değildir; aydınlatma farklılıkları, üst üste binen hücreler ve boyama artefaktlarıyla mücadele eden çok aşamalı bir analiz problemidir.</p>

<p>``</p>

<h2 id="segmentasyon-neden-gereklidir">Segmentasyon neden gereklidir?</h2>

<p>Segmentasyon, görüntüdeki her pikselin hücreye mi yoksa arka plana mı ait olduğuna karar verme işlemidir. Gri tonlu bir görüntü matematiksel olarak $I(x,y)$ yoğunluk fonksiyonuyla temsil edilebilir. En basit yaklaşımda bir eşik değeri $T$ seçilir:</p>

\[M(x,y)=\begin{cases}
1, &amp; I(x,y) &lt; T \\
0, &amp; I(x,y) \geq T
\end{cases}\]

<p>Burada $M$, ikili hücre maskesidir. Kan hücreleri arka plandan daha koyu görünüyorsa eşikten küçük pikseller hücre kabul edilir. Ancak sabit eşik, düzensiz aydınlatmada başarısız olabilir. Otsu yöntemi, sınıf içi varyansı küçülten eşiği otomatik seçer; adaptif eşikleme ise görüntünün farklı bölgeleri için farklı eşikler hesaplar.</p>

<table>
  <thead>
    <tr>
      <th>Yöntem</th>
      <th>Güçlü yanı</th>
      <th>Zayıf yanı</th>
      <th>Uygun senaryo</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Sabit eşik</td>
      <td>Çok hızlıdır</td>
      <td>Işığa duyarlıdır</td>
      <td>Kontrollü çekimler</td>
    </tr>
    <tr>
      <td>Otsu</td>
      <td>Otomatik eşik seçer</td>
      <td>Histogram örtüşürse zorlanır</td>
      <td>Homojen arka plan</td>
    </tr>
    <tr>
      <td>Adaptif eşik</td>
      <td>Yerel ışık değişimini yönetir</td>
      <td>Gürültüyü büyütebilir</td>
      <td>Düzensiz aydınlatma</td>
    </tr>
    <tr>
      <td>Derin öğrenme</td>
      <td>Karmaşık hücreleri tanır</td>
      <td>Etiketli veri ve GPU ister</td>
      <td>Klinik ölçekli sistemler</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/mikroskobik-goruntulerde-otomatik-13.svg" alt="mikroskobik-goruntulerde-otomatik-13" /></p>

<h2 id="i̇şlem-hattı-nasıl-çalışır">İşlem hattı nasıl çalışır?</h2>

<p>Tipik bir hücre sayım sistemi şu adımları izler:</p>

<ol>
  <li><strong>Ön işleme:</strong> Görüntü yeniden boyutlandırılır, gri tona çevrilir ve Gauss filtresiyle gürültü azaltılır.</li>
  <li><strong>Segmentasyon:</strong> Otsu, adaptif eşikleme veya renk uzayı analiziyle hücre maskesi üretilir.</li>
  <li><strong>Morfolojik düzeltme:</strong> Açma işlemi küçük lekeleri temizler; kapama işlemi hücre içindeki boşlukları doldurur.</li>
  <li><strong>Hücreleri ayırma:</strong> Birbirine temas eden hücreler distance transform ve watershed algoritmasıyla ayrılır.</li>
  <li><strong>Sayım:</strong> Bağlı bileşenler veya konturlar bulunur; alanı makul aralıkta olan nesneler hücre kabul edilir.</li>
</ol>

<p>İkili maskede hücre alanı, hücreye ait piksellerin toplamıdır:</p>

\[A=\sum_{x,y}M(x,y)\]

<p>Bir konturun alanı $A$, çevresi $P$ ise dairesellik $C=\frac{4\pi A}{P^2}$ ile ölçülebilir. Kusursuz çemberde $C=1$ olur. Böylece uzun çizikler veya boya kalıntıları hücrelerden ayrılabilir.</p>

<h2 id="python-ve-opencv-ile-örnek-sayım">Python ve OpenCV ile örnek sayım</h2>

<p>Aşağıdaki kod, hücreleri koyu nesneler olarak kabul eder. Gürültüyü temizler, dış konturları bulur ve çok küçük parçaları sayım dışında bırakır:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">cv2</span>
<span class="kn">import</span> <span class="n">numpy</span> <span class="k">as</span> <span class="n">np</span>

<span class="n">image</span> <span class="o">=</span> <span class="n">cv2</span><span class="p">.</span><span class="nf">imread</span><span class="p">(</span><span class="sh">"</span><span class="s">kan_ornegi.jpg</span><span class="sh">"</span><span class="p">)</span>
<span class="n">gray</span> <span class="o">=</span> <span class="n">cv2</span><span class="p">.</span><span class="nf">cvtColor</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="n">cv2</span><span class="p">.</span><span class="n">COLOR_BGR2GRAY</span><span class="p">)</span>
<span class="n">blurred</span> <span class="o">=</span> <span class="n">cv2</span><span class="p">.</span><span class="nc">GaussianBlur</span><span class="p">(</span><span class="n">gray</span><span class="p">,</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span> <span class="mi">0</span><span class="p">)</span>

<span class="c1"># Koyu hücreleri beyaz maskeye dönüştürür.
</span><span class="n">_</span><span class="p">,</span> <span class="n">mask</span> <span class="o">=</span> <span class="n">cv2</span><span class="p">.</span><span class="nf">threshold</span><span class="p">(</span>
    <span class="n">blurred</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">,</span>
    <span class="n">cv2</span><span class="p">.</span><span class="n">THRESH_BINARY_INV</span> <span class="o">+</span> <span class="n">cv2</span><span class="p">.</span><span class="n">THRESH_OTSU</span>
<span class="p">)</span>

<span class="c1"># Küçük gürültüleri morfolojik açma ile temizler.
</span><span class="n">kernel</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">ones</span><span class="p">((</span><span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span> <span class="n">np</span><span class="p">.</span><span class="n">uint8</span><span class="p">)</span>
<span class="n">mask</span> <span class="o">=</span> <span class="n">cv2</span><span class="p">.</span><span class="nf">morphologyEx</span><span class="p">(</span><span class="n">mask</span><span class="p">,</span> <span class="n">cv2</span><span class="p">.</span><span class="n">MORPH_OPEN</span><span class="p">,</span> <span class="n">kernel</span><span class="p">,</span> <span class="n">iterations</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>

<span class="n">contours</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">cv2</span><span class="p">.</span><span class="nf">findContours</span><span class="p">(</span>
    <span class="n">mask</span><span class="p">,</span> <span class="n">cv2</span><span class="p">.</span><span class="n">RETR_EXTERNAL</span><span class="p">,</span> <span class="n">cv2</span><span class="p">.</span><span class="n">CHAIN_APPROX_SIMPLE</span>
<span class="p">)</span>

<span class="n">cells</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">contour</span> <span class="ow">in</span> <span class="n">contours</span><span class="p">:</span>
    <span class="n">area</span> <span class="o">=</span> <span class="n">cv2</span><span class="p">.</span><span class="nf">contourArea</span><span class="p">(</span><span class="n">contour</span><span class="p">)</span>
    <span class="k">if</span> <span class="mi">150</span> <span class="o">&lt;</span> <span class="n">area</span> <span class="o">&lt;</span> <span class="mi">5000</span><span class="p">:</span>
        <span class="n">cells</span><span class="p">.</span><span class="nf">append</span><span class="p">(</span><span class="n">contour</span><span class="p">)</span>
        <span class="n">cv2</span><span class="p">.</span><span class="nf">drawContours</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="p">[</span><span class="n">contour</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="mi">255</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="mi">2</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">Tahmini hücre sayısı: </span><span class="si">{</span><span class="nf">len</span><span class="p">(</span><span class="n">cells</span><span class="p">)</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
<span class="n">cv2</span><span class="p">.</span><span class="nf">imwrite</span><span class="p">(</span><span class="sh">"</span><span class="s">sonuc.jpg</span><span class="sh">"</span><span class="p">,</span> <span class="n">image</span><span class="p">)</span>
</code></pre></div></div>

<p>Alan sınırları mikroskobun büyütmesine ve görüntü çözünürlüğüne göre kalibre edilmelidir. Sabit <code class="language-plaintext highlighter-rouge">150</code> değeri her laboratuvar görüntüsünde sihirli biçimde çalışmaz; ne yazık ki algoritmaların da mikroskop ayarı vardır!</p>

<h2 id="üst-üste-binen-hücreler-ve-doğrulama">Üst üste binen hücreler ve doğrulama</h2>

<p>Basit kontur sayımı, temas eden üç hücreyi tek nesne sanabilir. Watershed yaklaşımı, distance transform üzerindeki yerel tepeleri hücre merkezleri olarak kullanıp birleşik bölgeleri ayırır. Daha karmaşık örneklerde U-Net veya Mask R-CNN gibi modeller, piksel düzeyinde segmentasyon sağlayabilir.</p>

<p>Sistemin başarısı yalnızca tahmini sayıya bakılarak ölçülmemelidir. Uzman tarafından hazırlanmış gerçek maske ile karşılaştırma yapılabilir. Kesişim-birleşim oranı</p>

\[IoU=\frac{\vert M_{tahmin}\cap M_{gerçek}\vert }{\vert M_{tahmin}\cup M_{gerçek}\vert }\]

<p>şeklindedir. Ayrıca sayım hatası için $MAE=\frac{1}{n}\sum \vert y_i-\hat{y}_i\vert $ kullanılabilir. Yüksek IoU doğru sınırları, düşük MAE ise doğru hücre sayısını gösterir. Böylece sistem sadece hızlı değil, ölçülebilir biçimde güvenilir hâle gelir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Proje" /><category term="görüntü işleme" /><category term="hücre sayımı" /><category term="segmentasyon" /><category term="opencv" /><category term="python" /><category term="bilgisayarlı görü" /><summary type="html"><![CDATA[Mikroskop altında kan hücrelerini tek tek saymak, sabır isteyen ve insan hatasına açık bir işlemdir. Neyse ki görüntü işleme algoritmaları; eritrosit, lökosit ve trombosit gibi hücreleri arka plandan ayırabilir, sınırlarını belirleyebilir ve saniyeler içinde sayabilir. Bu süreç yalnızca “resimdeki daireleri bulmak” değildir; aydınlatma farklılıkları, üst üste binen hücreler ve boyama artefaktlarıyla mücadele eden çok aşamalı bir analiz problemidir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/mikroskobik-goruntulerde-otomatik-13.png" /><media:content medium="image" url="https://program.sonsuz.us/img/mikroskobik-goruntulerde-otomatik-13.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Oyun Motorlarının İç Mimarisi: Render, Fizik ve Girdi Döngüleri</title><link href="https://program.sonsuz.us/posts/oyun-motorlarinin-ic-mimarisi-render-fizik-ve-girdi-donguleri/" rel="alternate" type="text/html" title="Oyun Motorlarının İç Mimarisi: Render, Fizik ve Girdi Döngüleri" /><published>2026-10-28T00:00:00+00:00</published><updated>2026-10-28T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/oyun-motorlarinin-ic-mimarisi-render-fizik-ve-girdi-donguleri</id><content type="html" xml:base="https://program.sonsuz.us/posts/oyun-motorlarinin-ic-mimarisi-render-fizik-ve-girdi-donguleri/"><![CDATA[<p>Bir oyun motoru, ekrandaki karakterleri hareket ettiren basit bir programdan çok daha fazlasıdır. Unity ve Unreal Engine gibi motorlar; oyuncu girdilerini okumak, fizik kurallarını hesaplamak, yapay zekâyı güncellemek ve görüntüyü çizmek gibi görevleri son derece düzenli döngüler içinde yürütür. Perde arkasında çalışan bu mimariyi anlamak, hem performans sorunlarını çözmeyi hem de daha kararlı oyun sistemleri geliştirmeyi kolaylaştırır.</p>

<p>``</p>

<h2 id="her-şeyin-kalbi-oyun-döngüsü">Her Şeyin Kalbi: Oyun Döngüsü</h2>

<p>Oyun motorlarının merkezinde <strong>game loop</strong>, yani oyun döngüsü bulunur. Motor çalıştığı sürece bu döngü girdiyi okur, oyun dünyasını günceller ve yeni kareyi ekrana gönderir.</p>

<p>Basitleştirilmiş akış şöyledir:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>while oyun_calışıyor:
    girdileri_oku()
    fiziği_hesapla()
    oyun_mantığını_güncelle()
    sahneyi_render_et()
</code></pre></div></div>

<p>Bir karenin işlenme süresi ile saniyedeki kare sayısı arasındaki ilişki şu formülle gösterilebilir:</p>

\[FPS = \frac{1}{\Delta t}\]

<p>Örneğin bir kare $0.0166$ saniyede hazırlanıyorsa oyun yaklaşık $60$ FPS üretir. Ancak bütün sistemleri değişken $\Delta t$ ile güncellemek doğru değildir. Render döngüsü ekran hızına göre değişebilirken fizik hesaplamaları çoğunlukla sabit zaman aralıklarında çalıştırılır.</p>

<h2 id="render-döngüsü-nasıl-çalışır">Render Döngüsü Nasıl Çalışır?</h2>

<p>Render sistemi, oyun dünyasındaki nesneleri GPU’nun anlayabileceği komutlara dönüştürür. Kamera dışında kalan nesneler ayıklanır, görünür yüzeyler belirlenir, materyaller hazırlanır ve çizim komutları GPU’ya gönderilir.</p>

<table>
  <thead>
    <tr>
      <th>Aşama</th>
      <th>Görevi</th>
      <th>Olası Darboğaz</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Culling</td>
      <td>Görünmeyen nesneleri eler</td>
      <td>CPU hesaplaması</td>
    </tr>
    <tr>
      <td>Geometry</td>
      <td>Üçgenleri işler</td>
      <td>Yüksek poligon sayısı</td>
    </tr>
    <tr>
      <td>Shading</td>
      <td>Işık ve materyalleri hesaplar</td>
      <td>Karmaşık shader’lar</td>
    </tr>
    <tr>
      <td>Post-processing</td>
      <td>Bloom, renk ve efekt uygular</td>
      <td>GPU bant genişliği</td>
    </tr>
  </tbody>
</table>

<p>Unity; Built-in, URP ve HDRP gibi farklı render yaklaşımları sunar. Unreal Engine ise deferred rendering, Nanite ve Lumen gibi sistemlerle yüksek detaylı sahneleri yönetir. Her iki motorda da amaç aynıdır: Görsel kaliteyi korurken kare süresini bütçe içinde tutmak. 60 FPS hedefinde bu bütçe yaklaşık $16.67$ milisaniyedir.</p>

<h2 id="fizik-neden-sabit-döngü-kullanır">Fizik Neden Sabit Döngü Kullanır?</h2>

<p>Fizik motorları çarpışma, hız, ivme ve kuvvet hesaplarını mümkün olduğunca tutarlı gerçekleştirmelidir. Temel hareket denklemlerinden biri şöyledir:</p>

\[x_{yeni} = x_{eski} + v\Delta t\]

<p>$\Delta t$ sürekli değişirse aynı kuvvet farklı bilgisayarlarda farklı sonuçlar üretebilir. Unity bu nedenle fizik işlemlerini ağırlıklı olarak <code class="language-plaintext highlighter-rouge">FixedUpdate</code> düzeninde yürütür. Unreal Engine tarafında fizik güncellemeleri tick grupları ve alt adımlar aracılığıyla kontrol edilebilir.</p>

<table>
  <thead>
    <tr>
      <th>Döngü</th>
      <th>Zamanlama</th>
      <th>Uygun Kullanım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Değişken güncelleme</td>
      <td>Her render karesinde</td>
      <td>Kamera, arayüz, görsel animasyon</td>
    </tr>
    <tr>
      <td>Sabit güncelleme</td>
      <td>Belirli aralıklarla</td>
      <td>Fizik, kuvvet ve çarpışma</td>
    </tr>
    <tr>
      <td>Geç güncelleme</td>
      <td>Ana güncellemeden sonra</td>
      <td>Takip kamerası, son konum düzeltmeleri</td>
    </tr>
  </tbody>
</table>

<h2 id="girdi-sistemi-ve-gecikme">Girdi Sistemi ve Gecikme</h2>

<p>Klavye, fare veya kontrolcü verileri işletim sisteminden alınır ve motorun girdi katmanına aktarılır. Girdi mümkün olduğunca erken okunursa oyuncunun yaptığı hareket ile ekrandaki sonuç arasındaki gecikme azalır.</p>

<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">void</span> <span class="nf">Update</span><span class="p">()</span>
<span class="p">{</span>
    <span class="kt">float</span> <span class="n">yatay</span> <span class="p">=</span> <span class="n">Input</span><span class="p">.</span><span class="nf">GetAxis</span><span class="p">(</span><span class="s">"Horizontal"</span><span class="p">);</span>
    <span class="n">hareketYonü</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">Vector3</span><span class="p">(</span><span class="n">yatay</span><span class="p">,</span> <span class="m">0f</span><span class="p">,</span> <span class="m">0f</span><span class="p">);</span>
<span class="p">}</span>

<span class="k">void</span> <span class="nf">FixedUpdate</span><span class="p">()</span>
<span class="p">{</span>
    <span class="n">govde</span><span class="p">.</span><span class="nf">AddForce</span><span class="p">(</span><span class="n">hareketYonü</span> <span class="p">*</span> <span class="n">kuvvet</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Bu Unity örneğinde girdi her karede okunur; fiziksel kuvvet ise sabit döngüde uygulanır. Böylece kısa süreli tuş hareketleri kaçırılmaz ve fizik davranışı kare hızından daha az etkilenir. Modern Unity Input System ve Unreal Enhanced Input, girdileri eylem tabanlı tanımlayarak farklı cihazları ortak bir soyutlama altında toplar.</p>

<h2 id="i̇ş-parçacıkları-ve-senkronizasyon">İş Parçacıkları ve Senkronizasyon</h2>

<p>Güncel motorlar tüm işleri tek çekirdekte yürütmez. Render hazırlığı, animasyon, ses ve fizik görevleri iş parçacıklarına dağıtılabilir. Unity Job System ve Unreal Task Graph bu yaklaşımın örnekleridir. Yine de render, fizik ve oyun mantığı birbirinin verisine ihtiyaç duyduğundan senkronizasyon noktaları oluşur. Bir görev geciktiğinde diğer sistemler bekleyebilir.</p>

<p>Sonuç olarak oyun motoru, farklı hızlarda çalışan orkestraya benzer. Girdi sistemi notaları toplar, fizik ritmi korur, render sistemi ise performansı seyirciye sunar. Başarılı bir oyun mimarisi, bu döngülerin doğru sırada ve mümkün olduğunca az bekleyerek çalışmasını sağlar.</p>

<p><img src="/img/oyun-motorlarinin-ic-45.svg" alt="oyun-motorlarinin-ic-45" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="oyun motoru" /><category term="unity" /><category term="unreal engine" /><category term="render" /><category term="fizik motoru" /><category term="game loop" /><summary type="html"><![CDATA[Bir oyun motoru, ekrandaki karakterleri hareket ettiren basit bir programdan çok daha fazlasıdır. Unity ve Unreal Engine gibi motorlar; oyuncu girdilerini okumak, fizik kurallarını hesaplamak, yapay zekâyı güncellemek ve görüntüyü çizmek gibi görevleri son derece düzenli döngüler içinde yürütür. Perde arkasında çalışan bu mimariyi anlamak, hem performans sorunlarını çözmeyi hem de daha kararlı oyun sistemleri geliştirmeyi kolaylaştırır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/oyun-motorlarinin-ic-45.png" /><media:content medium="image" url="https://program.sonsuz.us/img/oyun-motorlarinin-ic-45.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Oyunlarda Erişilebilirlik Tasarımı: Her Oyuncuya Açık Bir Dünya</title><link href="https://program.sonsuz.us/posts/oyunlarda-erisilebilirlik-tasarimi-her-oyuncuya-acik-bir-dunya/" rel="alternate" type="text/html" title="Oyunlarda Erişilebilirlik Tasarımı: Her Oyuncuya Açık Bir Dünya" /><published>2026-10-28T00:00:00+00:00</published><updated>2026-10-28T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/oyunlarda-erisilebilirlik-tasarimi-her-oyuncuya-acik-bir-dunya</id><content type="html" xml:base="https://program.sonsuz.us/posts/oyunlarda-erisilebilirlik-tasarimi-her-oyuncuya-acik-bir-dunya/"><![CDATA[<p><img src="/img/oyunlarda-erisilebilirlik-tasarimi-80.svg" alt="oyunlarda-erisilebilirlik-tasarimi-80" /></p>

<p>Bir oyunun zorlu olması başka, bazı oyuncular için gereksiz yere oynanamaz olması başkadır. Küçük yazılar, yalnızca renkle aktarılan bilgiler veya altyazısız diyaloglar; geliştiricinin fark etmeden koyduğu engellere dönüşebilir. Erişilebilirlik tasarımı, oyunu basitleştirmek değil, oyuncuların bilgiye farklı yollarla ulaşmasını sağlayarak gerçek oyun deneyimine katılmalarını mümkün kılmaktır.
``</p>
<h2 id="erişilebilirlik-neden-temel-bir-tasarım-kararıdır">Erişilebilirlik neden temel bir tasarım kararıdır?</h2>

<p>Erişilebilirlik, geliştirme bittikten sonra ayarlar menüsüne eklenen birkaç kutucuktan ibaret değildir. Oyunun görsel dili, ses sistemi, kontrolleri ve geri bildirim mekanizmaları tasarlanırken ele alınmalıdır. Bunun temelinde <strong>eşdeğer bilgi</strong> ilkesi bulunur: Önemli bir bilgi yalnızca tek duyusal kanalla aktarılmamalıdır.</p>

<p>Örneğin yaklaşan bir düşman sadece ayak sesiyle haber veriliyorsa işitme engelli oyuncu dezavantaj yaşar. Aynı bilgi ekrandaki yön göstergesi, titreşim veya görsel efekt ile de sunulabilir. Benzer biçimde, takım üyelerini yalnızca kırmızı ve yeşil renkle ayırmak bazı renk körlüğü türlerinde sistemi kullanışsız hâle getirir.</p>

<table>
  <thead>
    <tr>
      <th>Sorun</th>
      <th>Riskli tasarım</th>
      <th>Erişilebilir alternatif</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Renk körlüğü</td>
      <td>Yalnızca kırmızı-yeşil ayrımı</td>
      <td>Renk, simge ve desen birlikte kullanılır</td>
    </tr>
    <tr>
      <td>İşitme engeli</td>
      <td>Sadece sesli tehlike uyarısı</td>
      <td>Altyazı, yön göstergesi ve titreşim eklenir</td>
    </tr>
    <tr>
      <td>Görme güçlüğü</td>
      <td>Küçük, sabit arayüz metni</td>
      <td>Ölçeklenebilir yazı ve yüksek kontrast sunulur</td>
    </tr>
    <tr>
      <td>Motor kısıtlılık</td>
      <td>Hızlı ve karmaşık tuş kombinasyonları</td>
      <td>Tuş atama ve basılı tutma seçenekleri sağlanır</td>
    </tr>
  </tbody>
</table>

<h2 id="renk-tek-başına-konuşmamalı">Renk tek başına konuşmamalı</h2>

<p>Renk körlüğü tek bir durum değildir. Deuteranopi yeşil, protanopi kırmızı, tritanopi ise mavi tonlarının algılanmasını etkileyebilir. Bu nedenle hazır bir “renk körü filtresi” her zaman yeterli olmaz. Bilgiyi renk dışında şekil, ikon, metin ve desenle desteklemek daha güvenlidir.</p>

<p>Metin ve arka plan okunabilirliğinde kontrast oranı önemli bir ölçüdür:</p>

\[C = \frac{L_{açık} + 0.05}{L_{koyu} + 0.05}\]

<p>Burada $L$, rengin göreli parlaklığıdır. $C$ yükseldikçe öğeleri ayırt etmek kolaylaşır. Ancak matematiksel olarak yeterli kontrast, hareketli ve karmaşık bir sahnede otomatik olarak iyi okunabilirlik anlamına gelmez. Tasarım gerçek oyun görüntüleri üzerinde test edilmelidir.</p>

<h2 id="sesleri-görünür-hâle-getirmek">Sesleri görünür hâle getirmek</h2>

<p>Altyazı yalnızca konuşma metni değildir. Konuşmacının kimliği, sesin yönü ve önemli çevresel sesler de aktarılabilir:</p>

<ul>
  <li><strong>[Sol taraftan metal sürtünmesi]</strong></li>
  <li><strong>Komutan:</strong> Kapıyı kapat!</li>
  <li><strong>[Müzik hızlanır]</strong></li>
</ul>

<p>Oyuncuya yazı boyutu, arka plan opaklığı ve konuşmacı rengi seçenekleri vermek altyazıları çok daha kullanışlı yapar. Rekabetçi oyunlarda görsel ses göstergeleri dikkatle dengelenmeli; erişilebilirlik seçeneği, sesi kullanan oyunculardan daha fazla taktik bilgi vermemelidir.</p>

<h2 id="ayarları-veri-odaklı-tasarlamak">Ayarları veri odaklı tasarlamak</h2>

<p>Aşağıdaki Unity C# örneği, altyazı tercihlerini tek bir yapı içinde tutar ve arayüzün bu ayarlara göre güncellenmesini sağlar:</p>

<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">using</span> <span class="nn">UnityEngine</span><span class="p">;</span>

<span class="p">[</span><span class="n">System</span><span class="p">.</span><span class="n">Serializable</span><span class="p">]</span>
<span class="k">public</span> <span class="k">class</span> <span class="nc">AccessibilitySettings</span>
<span class="p">{</span>
    <span class="k">public</span> <span class="kt">bool</span> <span class="n">subtitlesEnabled</span> <span class="p">=</span> <span class="k">true</span><span class="p">;</span>
    <span class="p">[</span><span class="nf">Range</span><span class="p">(</span><span class="m">18</span><span class="p">,</span> <span class="m">48</span><span class="p">)]</span> <span class="k">public</span> <span class="kt">int</span> <span class="n">subtitleSize</span> <span class="p">=</span> <span class="m">28</span><span class="p">;</span>
    <span class="p">[</span><span class="nf">Range</span><span class="p">(</span><span class="m">0f</span><span class="p">,</span> <span class="m">1f</span><span class="p">)]</span> <span class="k">public</span> <span class="kt">float</span> <span class="n">backgroundOpacity</span> <span class="p">=</span> <span class="m">0.75f</span><span class="p">;</span>
    <span class="k">public</span> <span class="kt">bool</span> <span class="n">showSoundDirection</span> <span class="p">=</span> <span class="k">true</span><span class="p">;</span>
<span class="p">}</span>

<span class="k">public</span> <span class="k">class</span> <span class="nc">AccessibilityManager</span> <span class="p">:</span> <span class="n">MonoBehaviour</span>
<span class="p">{</span>
    <span class="k">public</span> <span class="n">AccessibilitySettings</span> <span class="n">settings</span><span class="p">;</span>
    <span class="k">public</span> <span class="n">SubtitleView</span> <span class="n">subtitleView</span><span class="p">;</span>

    <span class="k">public</span> <span class="k">void</span> <span class="nf">ApplySettings</span><span class="p">()</span>
    <span class="p">{</span>
        <span class="n">subtitleView</span><span class="p">.</span><span class="n">gameObject</span><span class="p">.</span><span class="nf">SetActive</span><span class="p">(</span><span class="n">settings</span><span class="p">.</span><span class="n">subtitlesEnabled</span><span class="p">);</span>
        <span class="n">subtitleView</span><span class="p">.</span><span class="nf">SetFontSize</span><span class="p">(</span><span class="n">settings</span><span class="p">.</span><span class="n">subtitleSize</span><span class="p">);</span>
        <span class="n">subtitleView</span><span class="p">.</span><span class="nf">SetBackgroundOpacity</span><span class="p">(</span><span class="n">settings</span><span class="p">.</span><span class="n">backgroundOpacity</span><span class="p">);</span>
        <span class="n">subtitleView</span><span class="p">.</span><span class="nf">ShowDirection</span><span class="p">(</span><span class="n">settings</span><span class="p">.</span><span class="n">showSoundDirection</span><span class="p">);</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Bu yaklaşım, değerleri oyun koduna gömmek yerine merkezi ve kaydedilebilir hâle getirir. Aynı model renk paletleri, titreşim yoğunluğu ve kontrol şemaları için genişletilebilir.</p>

<h2 id="son-kontrol-oyuncuyla-test">Son kontrol: Oyuncuyla test</h2>

<p>Simülasyon araçları yararlıdır fakat gerçek kullanıcı testlerinin yerini tutmaz. Farklı ihtiyaçlara sahip oyuncular geliştirme sürecine erken katılmalı, ayarlar ilk açılışta bulunabilir olmalı ve seçeneklerin etkisi anında önizlenebilmelidir. Sonuçta erişilebilir tasarım yalnızca belirli gruplara yardım etmez; gürültülü ortamda altyazı kullanan, küçük ekranda oynayan veya geçici sakatlık yaşayan herkese daha esnek bir deneyim sunar. İyi erişilebilirlik görünmez bir yardımcı gibidir: İhtiyaç duyulduğunda oradadır ve oyuncuyla oyun arasındaki gereksiz duvarları kaldırır.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="oyun geliştirme" /><category term="erişilebilirlik" /><category term="renk körlüğü" /><category term="işitme engeli" /><category term="oyun tasarımı" /><category term="kullanıcı deneyimi" /><summary type="html"><![CDATA[Bir oyunun zorlu olması başka, bazı oyuncular için gereksiz yere oynanamaz olması başkadır. Küçük yazılar, yalnızca renkle aktarılan bilgiler veya altyazısız diyaloglar; geliştiricinin fark etmeden koyduğu engellere dönüşebilir. Erişilebilirlik tasarımı, oyunu basitleştirmek değil, oyuncuların bilgiye farklı yollarla ulaşmasını sağlayarak gerçek oyun deneyimine katılmalarını mümkün kılmaktır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/oyunlarda-erisilebilirlik-tasarimi-80.png" /><media:content medium="image" url="https://program.sonsuz.us/img/oyunlarda-erisilebilirlik-tasarimi-80.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Prosedürel Anlatı ve Dinamik Hikâye Motorları Nasıl Çalışır?</title><link href="https://program.sonsuz.us/posts/prosedurel-anlati-ve-dinamik-hikaye-motorlari-nasil-calisir/" rel="alternate" type="text/html" title="Prosedürel Anlatı ve Dinamik Hikâye Motorları Nasıl Çalışır?" /><published>2026-10-28T00:00:00+00:00</published><updated>2026-10-28T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/prosedurel-anlati-ve-dinamik-hikaye-motorlari-nasil-calisir</id><content type="html" xml:base="https://program.sonsuz.us/posts/prosedurel-anlati-ve-dinamik-hikaye-motorlari-nasil-calisir/"><![CDATA[<p><img src="/img/prosedurel-anlati-ve-26.svg" alt="prosedurel-anlati-ve-26" /></p>

<p>Bir oyunda verdiğiniz masum bir kararın saatler sonra bir krallığın çökmesine yol açtığını düşünün. Bu sonuç önceden yazılmış tek bir senaryodan değil, seçimlerinizi değerlendiren dinamik bir hikâye motorundan doğabilir. Prosedürel anlatı; karakterleri, olayları ve sonuçları belirli kurallar doğrultusunda birleştirerek her oyuncuya farklı bir hikâye deneyimi sunmayı amaçlar.</p>

<p>``</p>

<h2 id="prosedürel-anlatı-nedir">Prosedürel anlatı nedir?</h2>

<p>Geleneksel anlatıda yazar, olayların sırasını büyük ölçüde önceden belirler. Oyuncu bazen farklı yollar seçse de bunlar çoğunlukla elle yazılmış dallardır. Prosedürel anlatıda ise yazar yalnızca olayları değil, <strong>olay üretme kurallarını</strong> da tasarlar.</p>

<p>Bir hikâye motorunun kararını basitçe şöyle modelleyebiliriz:</p>

\[S_{t+1} = F(S_t, A_t, R)\]

<p>Burada $S_t$ mevcut dünya durumunu, $A_t$ oyuncunun eylemini, $R$ anlatı kurallarını ve $S_{t+1}$ yeni durumu temsil eder. Örneğin oyuncu bir tüccarı soyarsa para miktarı artabilir; fakat itibar düşer, muhafızların şüphe seviyesi yükselir ve tüccarın ailesi ileride intikam görevi başlatabilir.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Hikâye yapısı</th>
      <th>Avantajı</th>
      <th>Riski</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Doğrusal anlatı</td>
      <td>Sabit olay sırası</td>
      <td>Güçlü tempo ve dramatik kontrol</td>
      <td>Düşük tekrar oynanabilirlik</td>
    </tr>
    <tr>
      <td>Dallanan anlatı</td>
      <td>Önceden yazılmış seçim yolları</td>
      <td>Anlamlı ve kontrollü kararlar</td>
      <td>Dal sayısı hızla büyür</td>
    </tr>
    <tr>
      <td>Prosedürel anlatı</td>
      <td>Kurallarla üretilen olaylar</td>
      <td>Yüksek çeşitlilik</td>
      <td>Tutarsız veya anlamsız sonuçlar</td>
    </tr>
    <tr>
      <td>Hibrit sistem</td>
      <td>Yazılmış sahneler ve dinamik kurallar</td>
      <td>Kontrol ile özgürlük arasında denge</td>
      <td>Tasarımı ve testi zordur</td>
    </tr>
  </tbody>
</table>

<h2 id="durum-değişkenleri-ve-koşullar">Durum değişkenleri ve koşullar</h2>

<p>Dinamik hikâye motorlarının hafızası, durum değişkenlerinden oluşur. İtibar, korku, sadakat, kaynak miktarı ve karakter ilişkileri bu değişkenlere örnektir. Motor, uygun olayları seçerken koşulları kontrol eder.</p>

<p>Aşağıdaki Python örneği, dünya durumuna göre yeni bir anlatı olayı seçer:</p>

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

<span class="k">def</span> <span class="nf">uygun_olaylari_bul</span><span class="p">(</span><span class="n">durum</span><span class="p">,</span> <span class="n">olaylar</span><span class="p">):</span>
    <span class="n">uygunlar</span> <span class="o">=</span> <span class="p">[]</span>

    <span class="k">for</span> <span class="n">olay</span> <span class="ow">in</span> <span class="n">olaylar</span><span class="p">:</span>
        <span class="n">kosullar</span> <span class="o">=</span> <span class="n">olay</span><span class="p">[</span><span class="sh">"</span><span class="s">kosullar</span><span class="sh">"</span><span class="p">]</span>
        <span class="k">if</span> <span class="nf">all</span><span class="p">(</span><span class="n">durum</span><span class="p">.</span><span class="nf">get</span><span class="p">(</span><span class="n">anahtar</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="n">deger</span>
               <span class="k">for</span> <span class="n">anahtar</span><span class="p">,</span> <span class="n">deger</span> <span class="ow">in</span> <span class="n">kosullar</span><span class="p">.</span><span class="nf">items</span><span class="p">()):</span>
            <span class="n">uygunlar</span><span class="p">.</span><span class="nf">append</span><span class="p">(</span><span class="n">olay</span><span class="p">)</span>

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

<span class="k">def</span> <span class="nf">olay_sec</span><span class="p">(</span><span class="n">durum</span><span class="p">,</span> <span class="n">olaylar</span><span class="p">):</span>
    <span class="n">uygunlar</span> <span class="o">=</span> <span class="nf">uygun_olaylari_bul</span><span class="p">(</span><span class="n">durum</span><span class="p">,</span> <span class="n">olaylar</span><span class="p">)</span>
    <span class="k">return</span> <span class="n">random</span><span class="p">.</span><span class="nf">choice</span><span class="p">(</span><span class="n">uygunlar</span><span class="p">)</span> <span class="k">if</span> <span class="n">uygunlar</span> <span class="k">else</span> <span class="bp">None</span>

<span class="n">olaylar</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">{</span><span class="sh">"</span><span class="s">ad</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">Köylülerin İsyanı</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">kosullar</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span><span class="sh">"</span><span class="s">korku</span><span class="sh">"</span><span class="p">:</span> <span class="mi">70</span><span class="p">}},</span>
    <span class="p">{</span><span class="sh">"</span><span class="s">ad</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">Kraliyet Daveti</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">kosullar</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span><span class="sh">"</span><span class="s">itibar</span><span class="sh">"</span><span class="p">:</span> <span class="mi">60</span><span class="p">}},</span>
    <span class="p">{</span><span class="sh">"</span><span class="s">ad</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">Gizemli Tüccar</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">kosullar</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span><span class="sh">"</span><span class="s">altin</span><span class="sh">"</span><span class="p">:</span> <span class="mi">20</span><span class="p">}}</span>
<span class="p">]</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">uygun_olaylari_bul</code> fonksiyonu, koşulları sağlanan olayları filtreler. <code class="language-plaintext highlighter-rouge">olay_sec</code> ise bunlardan birini rastgele seçer. Gerçek bir motorda rastgelelik genellikle ağırlıklıdır; önemli olayların seçilme ihtimali daha yüksek tutulabilir.</p>

<p>Bir olayın puanı şu şekilde hesaplanabilir:</p>

\[P(o) = w_rR + w_dD + w_cC - w_tT\]

<p>Burada $R$ rastgelelik, $D$ dramatik değer, $C$ mevcut durumla uyum ve $T$ yakın zamanda tekrar edilme cezasıdır. $w$ katsayıları tasarımcının hangi özelliğe önem verdiğini belirler.</p>

<h2 id="anlamlı-seçim-nasıl-üretilir">Anlamlı seçim nasıl üretilir?</h2>

<p>Her seçimin dünyayı değiştirmesi gerekmez; ancak oyuncu, kararının fark edildiğini hissetmelidir. İyi bir sistem üç katmanda tepki verir:</p>

<ol>
  <li><strong>Anlık sonuç:</strong> Karakter hemen kızar veya ödül verir.</li>
  <li><strong>Sistemsel sonuç:</strong> İtibar, ekonomi ya da ilişki değeri değişir.</li>
  <li><strong>Gecikmiş sonuç:</strong> Eski karar, saatler sonra yeni bir görev veya düşman üretir.</li>
</ol>

<p>Buradaki en büyük tehlike, sayısız ama yüzeysel seçenek sunmaktır. Beş anlamsız düğme yerine, bedeli açık olmayan iki güçlü seçenek genellikle daha etkilidir. Ayrıca sistemin tamamen kontrolsüz olması komik tutarsızlıklar doğurabilir: Dün ölen kralın bugün oyuncuya mektup göndermesi gibi!</p>

<h2 id="tasarımcı-hâlâ-hikâyenin-yazarı-mı">Tasarımcı hâlâ hikâyenin yazarı mı?</h2>

<p>Evet; fakat artık yalnızca sahneleri değil, olasılık uzayını da yazar. Karakterlerin hedeflerini, dünyanın sınırlarını ve hangi olayların birlikte anlamlı olduğunu tanımlar. Böylece motor doğaçlama yaparken temadan kopmaz.</p>

<p>Başarılı bir dinamik hikâye motoru, matematiksel kurallar ile insan yaratıcılığını birleştirir. Amaç sonsuz içerik üretmek değil, oyuncunun seçimlerinin hatırlandığına ve dünyanın gerçekten karşılık verdiğine inanmasını sağlamaktır.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="prosedürel anlatı" /><category term="oyun geliştirme" /><category term="dinamik hikâye" /><category term="yapay zekâ" /><category term="oyuncu seçimi" /><category term="durum makineleri" /><summary type="html"><![CDATA[Bir oyunda verdiğiniz masum bir kararın saatler sonra bir krallığın çökmesine yol açtığını düşünün. Bu sonuç önceden yazılmış tek bir senaryodan değil, seçimlerinizi değerlendiren dinamik bir hikâye motorundan doğabilir. Prosedürel anlatı; karakterleri, olayları ve sonuçları belirli kurallar doğrultusunda birleştirerek her oyuncuya farklı bir hikâye deneyimi sunmayı amaçlar.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/prosedurel-anlati-ve-26.png" /><media:content medium="image" url="https://program.sonsuz.us/img/prosedurel-anlati-ve-26.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Saniyelerle Yarışmak: Speedrun Kültürü ve Glitch Ustalığı</title><link href="https://program.sonsuz.us/posts/saniyelerle-yarismak-speedrun-kulturu-ve-glitch-ustaligi/" rel="alternate" type="text/html" title="Saniyelerle Yarışmak: Speedrun Kültürü ve Glitch Ustalığı" /><published>2026-10-28T00:00:00+00:00</published><updated>2026-10-28T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/saniyelerle-yarismak-speedrun-kulturu-ve-glitch-ustaligi</id><content type="html" xml:base="https://program.sonsuz.us/posts/saniyelerle-yarismak-speedrun-kulturu-ve-glitch-ustaligi/"><![CDATA[<p>Bir oyunu bitirmek çoğu oyuncu için hikâyeyi keşfetmek, görevleri tamamlamak ve son düşmanı yenmek demektir. Speedrunner içinse oyun; ölçülebilen, parçalarına ayrılabilen ve mümkün olan en kısa sürede çözülebilen dev bir optimizasyon problemidir. Duvarların içinden geçmek, ara sahneleri atlamak veya fizik motorunu şaşırtmak hile gibi görünebilir; fakat speedrun topluluklarında bunlar çoğu zaman yıllarca araştırılan teknik becerilerdir.</p>

<p>``</p>

<h2 id="speedrun-yalnızca-hızlı-oynamak-değildir">Speedrun yalnızca hızlı oynamak değildir</h2>

<p>Speedrun, belirlenmiş kurallar altında bir oyunu ya da oyun bölümünü en kısa sürede tamamlama yarışıdır. Oyuncular rotalarını tekrar tekrar deneyerek hareketleri, kaynak kullanımını ve savaşları optimize eder. Bu süreç matematiksel olarak bir maliyet minimizasyonuna benzetilebilir:</p>

\[T_{toplam} = T_{hareket} + T_{savaş} + T_{yükleme} + T_{hata}\]

<p>Amaç, toplam süreyi küçültmektir. Bir kısayol hareket süresini 20 saniye azaltırken başarısız olma riski nedeniyle ortalama 30 saniye kaybettiriyorsa rekor denemesi için uygun olmayabilir. Bu nedenle oyuncular yalnızca tekniğin teorik kazancını değil, başarı olasılığını da değerlendirir:</p>

\[E(T) = p \cdot T_{başarılı} + (1-p) \cdot T_{başarısız}\]

<p>Buradaki $p$, hareketin başarı ihtimalidir. Dünya rekoru peşindeki oyuncu düşük olasılıklı bir yöntemi seçebilirken maraton yayınındaki oyuncu daha güvenli bir rota kullanabilir.</p>

<h2 id="glitch-nasıl-keşfedilir">Glitch nasıl keşfedilir?</h2>

<p>Glitch, oyunun kodu ile oyuncunun eylemleri arasındaki beklenmeyen etkileşimdir. Keşif bazen tesadüfen gerçekleşir: Oyuncu zıplarken menüyü açar ve karakter bir kapının arkasına ışınlanır. Topluluk daha sonra olayı yeniden üretmeye çalışır, gerekli koşulları belirler ve bulguları kare kare inceler.</p>

<p>Bir glitch’in geliştirilmesi genellikle şu aşamalardan geçer:</p>

<ol>
  <li><strong>Gözlem:</strong> Beklenmeyen davranış fark edilir.</li>
  <li><strong>Yeniden üretim:</strong> Aynı sonucun hangi girdilerle oluştuğu aranır.</li>
  <li><strong>Modelleme:</strong> Kamera, çarpışma ve bellek gibi sistemlerin rolü incelenir.</li>
  <li><strong>Optimizasyon:</strong> Daha hızlı ve güvenilir uygulama geliştirilir.</li>
  <li><strong>Belgeleme:</strong> Video, zaman damgası ve rehber toplulukla paylaşılır.</li>
</ol>

<p>Yani meşhur kısayol, çoğunlukla tek bir kişinin şans eseri bulduğu numaradan ziyade kolektif bir araştırma ürünüdür.</p>

<table>
  <thead>
    <tr>
      <th>Teknik</th>
      <th>Temel fikir</th>
      <th style="text-align: right">Olası kazanç</th>
      <th>Risk</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Duvar geçişi</td>
      <td>Çarpışma sınırını aşmak</td>
      <td style="text-align: right">Yüksek</td>
      <td>Bölüm dışında kalmak</td>
    </tr>
    <tr>
      <td>Menü atlaması</td>
      <td>Oyun durumlarını yanlış sırada tetiklemek</td>
      <td style="text-align: right">Orta</td>
      <td>Kaydın bozulması</td>
    </tr>
    <tr>
      <td>Hız depolama</td>
      <td>Fizik değerini sonraki harekete taşımak</td>
      <td style="text-align: right">Yüksek</td>
      <td>Hassas zamanlama</td>
    </tr>
    <tr>
      <td>Güvenli rota</td>
      <td>Glitch kullanmadan optimize yürümek</td>
      <td style="text-align: right">Düşük</td>
      <td>Genellikle az</td>
    </tr>
  </tbody>
</table>

<h2 id="kareler-girdiler-ve-ölçüm">Kareler, girdiler ve ölçüm</h2>

<p>60 FPS çalışan bir oyunda tek kare yaklaşık olarak $1/60$ saniye, yani 16,67 milisaniyedir. Bir hareket yalnızca iki karelik pencerede yapılabiliyorsa oyuncunun doğru girdiyi yaklaşık 33 milisaniyelik aralıkta vermesi gerekir. Bu yüzden speedrunner’lar kayıtlarını analiz eden küçük araçlar kullanır.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">splitler</span> <span class="o">=</span> <span class="p">[</span><span class="mf">42.18</span><span class="p">,</span> <span class="mf">39.72</span><span class="p">,</span> <span class="mf">41.05</span><span class="p">,</span> <span class="mf">38.91</span><span class="p">]</span>
<span class="n">hedef</span> <span class="o">=</span> <span class="mf">40.00</span>

<span class="k">for</span> <span class="n">bolum</span><span class="p">,</span> <span class="n">sure</span> <span class="ow">in</span> <span class="nf">enumerate</span><span class="p">(</span><span class="n">splitler</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
    <span class="n">fark</span> <span class="o">=</span> <span class="n">sure</span> <span class="o">-</span> <span class="n">hedef</span>
    <span class="n">durum</span> <span class="o">=</span> <span class="sh">"</span><span class="s">yavaş</span><span class="sh">"</span> <span class="k">if</span> <span class="n">fark</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="sh">"</span><span class="s">hızlı</span><span class="sh">"</span>
    <span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Bölüm </span><span class="si">{</span><span class="n">bolum</span><span class="si">}</span><span class="s">: </span><span class="si">{</span><span class="nf">abs</span><span class="p">(</span><span class="n">fark</span><span class="p">)</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"> sn </span><span class="si">{</span><span class="n">durum</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<p>Bu Python örneği, bölüm sürelerini hedef değerle karşılaştırır. Gerçek analiz araçları aynı mantığı kişisel en iyi dereceler, ortalamalar ve rota alternatifleri üzerinde uygular.</p>

<h2 id="glitch-kullanmak-hile-midir">Glitch kullanmak hile midir?</h2>

<p>Cevap kategoriye bağlıdır. <strong>Any%</strong> kategorisi oyunu izin verilen her yöntemle bitirmeyi hedefler. <strong>Glitchless</strong> kategorisi belirli hataları yasaklar. <strong>100%</strong> ise tanımlanan tüm içeriklerin tamamlanmasını ister. Kuralları topluluk belirler; emülatör, mod, makro veya dışarıdan kod müdahalesi çoğunlukla yasaktır.</p>

<p>Speedrun kültürünü ilginç yapan şey, oyuncuların oyunu bozarken aslında onu olağanüstü ayrıntılı biçimde öğrenmesidir. Geliştiricinin kurduğu dünya bir laboratuvara, kontrolcü deney aracına, her başarısız deneme de yeni bir veri noktasına dönüşür. Ekranda birkaç saniyelik kısayol görünür; arkasında ise yüzlerce saatlik merak, iş birliği ve ustalık vardır.</p>

<p><img src="/img/saniyelerle-yarismak-speedrun-44.svg" alt="saniyelerle-yarismak-speedrun-44" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="speedrun" /><category term="glitch" /><category term="oyun geliştirme" /><category term="oyun kültürü" /><category term="algoritma" /><category term="performans" /><summary type="html"><![CDATA[Bir oyunu bitirmek çoğu oyuncu için hikâyeyi keşfetmek, görevleri tamamlamak ve son düşmanı yenmek demektir. Speedrunner içinse oyun; ölçülebilen, parçalarına ayrılabilen ve mümkün olan en kısa sürede çözülebilen dev bir optimizasyon problemidir. Duvarların içinden geçmek, ara sahneleri atlamak veya fizik motorunu şaşırtmak hile gibi görünebilir; fakat speedrun topluluklarında bunlar çoğu zaman yıllarca araştırılan teknik becerilerdir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/saniyelerle-yarismak-speedrun-44.png" /><media:content medium="image" url="https://program.sonsuz.us/img/saniyelerle-yarismak-speedrun-44.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Telemedicine Platformlarında Düşük Gecikmeli Gerçek Zamanlı Video Altyapısı</title><link href="https://program.sonsuz.us/posts/telemedicine-platformlarinda-dusuk-gecikmeli-gercek-zamanli-video-altyapisi/" rel="alternate" type="text/html" title="Telemedicine Platformlarında Düşük Gecikmeli Gerçek Zamanlı Video Altyapısı" /><published>2026-10-28T00:00:00+00:00</published><updated>2026-10-28T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/telemedicine-platformlarinda-dusuk-gecikmeli-gercek-zamanli-video-altyapisi</id><content type="html" xml:base="https://program.sonsuz.us/posts/telemedicine-platformlarinda-dusuk-gecikmeli-gercek-zamanli-video-altyapisi/"><![CDATA[<p>Uzaktan muayenede görüntünün birkaç saniye geriden gelmesi yalnızca can sıkıcı değildir; doktor ile hastanın doğal iletişimini bozabilir ve görsel belirtilerin değerlendirilmesini zorlaştırabilir. Telemedicine platformları bu nedenle videoyu basitçe karşı tarafa göndermek yerine gecikme, görüntü kalitesi, ağ kararlılığı, güvenlik ve ölçeklenebilirlik arasında sürekli denge kuran gerçek zamanlı iletişim altyapıları kullanır.</p>

<p>``</p>

<h2 id="temel-teknoloji-webrtc">Temel teknoloji: WebRTC</h2>

<p>Modern telemedicine uygulamalarının büyük bölümü <strong>WebRTC</strong> teknolojisinden yararlanır. WebRTC, tarayıcılar ve mobil uygulamalar arasında eklenti gerektirmeden gerçek zamanlı ses, video ve veri aktarımı sağlar. İletişim mümkün olduğunda eşler arası, yani <strong>P2P</strong> kurulur. Böylece medya paketleri gereksiz bir uygulama sunucusu turu yapmaz.</p>

<p>Bir görüşmenin yaklaşık uçtan uca gecikmesi şöyle modellenebilir:</p>

\[T_{toplam} = T_{yakalama} + T_{kodlama} + T_{ağ} + T_{çözme} + T_{oynatma}\]

<p>Burada kamera görüntüsünün alınması, sıkıştırılması, ağ üzerinden taşınması, çözülmesi ve ekranda gösterilmesi ayrı ayrı gecikme üretir. Akıcı bir görüşme için toplam gecikmenin genellikle 300 milisaniyenin altında tutulması hedeflenir.</p>

<table>
  <thead>
    <tr>
      <th>Aktarım yaklaşımı</th>
      <th style="text-align: right">Tipik gecikme</th>
      <th>Avantajı</th>
      <th>Telemedicine uygunluğu</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>WebRTC</td>
      <td style="text-align: right">100–500 ms</td>
      <td>Gerçek zamanlı ve etkileşimli</td>
      <td>Çok yüksek</td>
    </tr>
    <tr>
      <td>HLS</td>
      <td style="text-align: right">6–30 sn</td>
      <td>Büyük kitlelere kolay yayın</td>
      <td>Düşük</td>
    </tr>
    <tr>
      <td>RTMP</td>
      <td style="text-align: right">1–5 sn</td>
      <td>Yayın sistemleriyle uyumlu</td>
      <td>Orta-düşük</td>
    </tr>
  </tbody>
</table>

<h2 id="bağlantı-nasıl-kuruluyor">Bağlantı nasıl kuruluyor?</h2>

<p>WebRTC medya aktarımını yönetir ancak tarafların birbirini bulması için bir <strong>signaling sunucusu</strong> gerekir. Bu sunucu SDP adı verilen oturum bilgilerini ve ICE adaylarını aktarır. Ardından STUN sunucusu cihazların genel ağ adreslerini keşfetmesine yardımcı olur. Kurumsal ağ veya sıkı bir güvenlik duvarı doğrudan bağlantıyı engellerse trafik TURN sunucusu üzerinden geçirilir.</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">connection</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">RTCPeerConnection</span><span class="p">({</span>
  <span class="na">iceServers</span><span class="p">:</span> <span class="p">[</span>
    <span class="p">{</span> <span class="na">urls</span><span class="p">:</span> <span class="dl">"</span><span class="s2">stun:stun.example.com:3478</span><span class="dl">"</span> <span class="p">},</span>
    <span class="p">{</span>
      <span class="na">urls</span><span class="p">:</span> <span class="dl">"</span><span class="s2">turn:turn.example.com:3478</span><span class="dl">"</span><span class="p">,</span>
      <span class="na">username</span><span class="p">:</span> <span class="dl">"</span><span class="s2">temporary-user</span><span class="dl">"</span><span class="p">,</span>
      <span class="na">credential</span><span class="p">:</span> <span class="dl">"</span><span class="s2">temporary-password</span><span class="dl">"</span>
    <span class="p">}</span>
  <span class="p">]</span>
<span class="p">});</span>

<span class="kd">const</span> <span class="nx">stream</span> <span class="o">=</span> <span class="k">await</span> <span class="nb">navigator</span><span class="p">.</span><span class="nx">mediaDevices</span><span class="p">.</span><span class="nf">getUserMedia</span><span class="p">({</span>
  <span class="na">video</span><span class="p">:</span> <span class="p">{</span> <span class="na">width</span><span class="p">:</span> <span class="mi">1280</span><span class="p">,</span> <span class="na">height</span><span class="p">:</span> <span class="mi">720</span> <span class="p">},</span>
  <span class="na">audio</span><span class="p">:</span> <span class="p">{</span> <span class="na">echoCancellation</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> <span class="na">noiseSuppression</span><span class="p">:</span> <span class="kc">true</span> <span class="p">}</span>
<span class="p">});</span>

<span class="nx">stream</span><span class="p">.</span><span class="nf">getTracks</span><span class="p">().</span><span class="nf">forEach</span><span class="p">(</span><span class="nx">track</span> <span class="o">=&gt;</span> <span class="nx">connection</span><span class="p">.</span><span class="nf">addTrack</span><span class="p">(</span><span class="nx">track</span><span class="p">,</span> <span class="nx">stream</span><span class="p">));</span>
</code></pre></div></div>

<p>Bu örnek, kamera ve mikrofon akışını alarak WebRTC bağlantısına ekler. Gerçek sistemlerde TURN kimlik bilgileri kısa ömürlü üretilmeli; kaynak koduna sabit parola yazılmamalıdır.</p>

<h2 id="değişken-ağ-koşullarına-uyum">Değişken ağ koşullarına uyum</h2>

<p>Hastalar her zaman güçlü Wi-Fi kullanmaz. Paket kaybı, düşük bant genişliği ve titreşim anlamına gelen <strong>jitter</strong>, görüntüyü bozabilir. Platformlar bu sorunlara uyarlanabilir bit hızıyla karşılık verir. Ağ kötüleştiğinde önce çözünürlük veya kare hızı azaltılır; bağlantı iyileştiğinde kalite yeniden yükseltilir.</p>

<p>Gerekli ham veri miktarı kabaca şu ilişkiyle düşünülebilir:</p>

\[B \propto W \times H \times FPS \times Q\]

<p>$W$ ve $H$ çözünürlüğü, $FPS$ saniyedeki kare sayısını, $Q$ ise kalite katsayısını temsil eder. H.264, VP8, VP9 veya AV1 gibi codec’ler bu ham veriyi sıkıştırır. H.264 geniş cihaz desteği sunarken AV1 daha verimli sıkıştırma sağlayabilir fakat eski cihazlarda daha yüksek işlem yükü oluşturabilir.</p>

<h2 id="sfu-kayıt-ve-ölçeklendirme">SFU, kayıt ve ölçeklendirme</h2>

<p>İki kişilik muayenede P2P yeterli olabilir. Görüşmeye uzman, tercüman veya hasta yakını katıldığında <strong>SFU</strong> kullanmak daha verimlidir. SFU, her katılımcıdan tek akış alır ve uygun kalitedeki katmanları diğer katılımcılara yönlendirir. Simulcast sayesinde istemci aynı videoyu düşük, orta ve yüksek kalite seçenekleriyle gönderebilir.</p>

<p>Sağlık verisi sıradan toplantı verisi değildir. Aktarım DTLS-SRTP ile şifrelenmeli, erişimler yetkilendirilmeli, kayıtlar açık rızaya bağlanmalı ve KVKK gibi düzenlemelere uygun saklanmalıdır. Ayrıca paket kaybı, gidiş-dönüş süresi, bitrate ve bağlantı kopmaları izlenmelidir. Kısacası başarılı bir telemedicine deneyimi yalnızca net görüntü değil; düşük gecikme, güvenli tasarım ve kötü ağlarda bile kontrollü biçimde çalışabilen dayanıklı bir sistem gerektirir.</p>

<p><img src="/img/telemedicine-platformlarinda-dusuk-29.svg" alt="telemedicine-platformlarinda-dusuk-29" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="telemedicine" /><category term="webrtc" /><category term="video" /><category term="düşük-gecikme" /><category term="sağlık-teknolojileri" /><category term="gerçek-zamanlı-iletişim" /><summary type="html"><![CDATA[Uzaktan muayenede görüntünün birkaç saniye geriden gelmesi yalnızca can sıkıcı değildir; doktor ile hastanın doğal iletişimini bozabilir ve görsel belirtilerin değerlendirilmesini zorlaştırabilir. Telemedicine platformları bu nedenle videoyu basitçe karşı tarafa göndermek yerine gecikme, görüntü kalitesi, ağ kararlılığı, güvenlik ve ölçeklenebilirlik arasında sürekli denge kuran gerçek zamanlı iletişim altyapıları kullanır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/telemedicine-platformlarinda-dusuk-29.png" /><media:content medium="image" url="https://program.sonsuz.us/img/telemedicine-platformlarinda-dusuk-29.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>