<?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-28T18:05:47+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">Her Tohumda Yeni Bir Macera: Oyunlarda Prosedürel Üretim</title><link href="https://program.sonsuz.us/posts/her-tohumda-yeni-bir-macera-oyunlarda-prosedurel-uretim/" rel="alternate" type="text/html" title="Her Tohumda Yeni Bir Macera: Oyunlarda Prosedürel Üretim" /><published>2026-10-28T00:00:00+00:00</published><updated>2026-10-28T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/her-tohumda-yeni-bir-macera-oyunlarda-prosedurel-uretim</id><content type="html" xml:base="https://program.sonsuz.us/posts/her-tohumda-yeni-bir-macera-oyunlarda-prosedurel-uretim/"><![CDATA[<p><img src="/img/her-tohumda-yeni-50.svg" alt="her-tohumda-yeni-50" /></p>

<p>Bir oyuna her başladığınızda dağların yer değiştirdiğini, koridorların başka yönlere uzandığını ve hazinelerin hiç beklemediğiniz köşelerde belirdiğini düşünün. Prosedürel üretim, içerikleri geliştiricinin tek tek tasarlaması yerine belirli kurallar ve algoritmalar yardımıyla oluşturan tekniktir. Böylece küçük bir kod parçası, keşfedilecek binlerce farklı dünya üretebilir.</p>

<p>``</p>

<h2 id="rastgelelik-aslında-ne-kadar-rastgele">Rastgelelik Aslında Ne Kadar Rastgele?</h2>

<p>Bilgisayarlar çoğunlukla gerçek anlamda rastgele davranmaz. Bunun yerine <strong>sözde rastgele sayı üreteci</strong> (PRNG) kullanırlar. Üretece verilen başlangıç değerine <strong>seed</strong>, yani tohum denir. Aynı algoritma ve aynı tohum kullanıldığında aynı sayı dizisi, dolayısıyla aynı dünya ortaya çıkar.</p>

<p>Bunu basitçe şöyle ifade edebiliriz:</p>

\[x_{n+1} = (a x_n + c) \bmod m\]

<p>Bu doğrusal eşlik üreteci formülünde $x_n$ mevcut sayı, $a$ çarpan, $c$ artış ve $m$ mod değeridir. İlk $x_0$ değeri ise tohumdur. Bir oyuncu arkadaşına yalnızca <code class="language-plaintext highlighter-rouge">4271</code> tohumunu göndererek aynı zindanı ziyaret etmesini sağlayabilir. Kısacası seed, koskoca dünyanın sıkıştırılmış adresi gibidir.</p>

<h2 id="zindanlar-nasıl-kurulur">Zindanlar Nasıl Kurulur?</h2>

<p>En temel yaklaşım, haritayı duvarlarla doldurup rastgele odalar açmak ve bu odaları koridorlarla bağlamaktır. Ancak tamamen rastgele seçim yapmak; ulaşılamayan odalar, anlamsız geçitler veya kapının arkasında duvar gibi komik sonuçlar doğurabilir. Bu nedenle üretim, doğrulama kurallarıyla birlikte çalışmalıdır.</p>

<table>
  <thead>
    <tr>
      <th>Yöntem</th>
      <th>Güçlü yanı</th>
      <th>Zayıf yanı</th>
      <th>Uygun kullanım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Rastgele odalar</td>
      <td>Basit ve hızlıdır</td>
      <td>Çakışma oluşturabilir</td>
      <td>Klasik zindanlar</td>
    </tr>
    <tr>
      <td>BSP</td>
      <td>Düzenli oda dağılımı sağlar</td>
      <td>Fazla geometrik görünebilir</td>
      <td>Bina ve tesisler</td>
    </tr>
    <tr>
      <td>Hücresel otomat</td>
      <td>Doğal mağaralar üretir</td>
      <td>Bağlantı kontrolü gerekir</td>
      <td>Mağara sistemleri</td>
    </tr>
    <tr>
      <td>Gürültü fonksiyonları</td>
      <td>Akıcı arazi geçişleri sağlar</td>
      <td>İnce ayar ister</td>
      <td>Açık dünyalar</td>
    </tr>
    <tr>
      <td>Wave Function Collapse</td>
      <td>Yerel kurallara uyar</td>
      <td>Çelişkiler pahalı olabilir</td>
      <td>Şehir ve desenler</td>
    </tr>
  </tbody>
</table>

<p><strong>BSP</strong> yönteminde harita dikdörtgen bölgelere tekrar tekrar ayrılır. Her yaprak bölgeye bir oda yerleştirilir ve kardeş bölgeler koridorlarla bağlanır. Hücresel otomatta ise her karo, komşularının durumuna göre duvar veya zemin olur. Örneğin bir karonun çevresinde beşten fazla duvar varsa sonraki adımda onun da duvara dönüşmesi mağara benzeri kümeler üretir.</p>

<h2 id="küçük-bir-oda-üreticisi">Küçük Bir Oda Üreticisi</h2>

<p>Aşağıdaki Python örneği, sabit bir tohumla çakışmayan dikdörtgen odalar yerleştirir:</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="n">WIDTH</span><span class="p">,</span> <span class="n">HEIGHT</span> <span class="o">=</span> <span class="mi">40</span><span class="p">,</span> <span class="mi">20</span>
<span class="n">random</span><span class="p">.</span><span class="nf">seed</span><span class="p">(</span><span class="mi">4271</span><span class="p">)</span>
<span class="n">rooms</span> <span class="o">=</span> <span class="p">[]</span>

<span class="k">def</span> <span class="nf">overlaps</span><span class="p">(</span><span class="n">candidate</span><span class="p">):</span>
    <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">h</span> <span class="o">=</span> <span class="n">candidate</span>
    <span class="k">for</span> <span class="n">rx</span><span class="p">,</span> <span class="n">ry</span><span class="p">,</span> <span class="n">rw</span><span class="p">,</span> <span class="n">rh</span> <span class="ow">in</span> <span class="n">rooms</span><span class="p">:</span>
        <span class="n">separated</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="n">w</span> <span class="o">&lt;</span> <span class="n">rx</span> <span class="ow">or</span> <span class="n">rx</span> <span class="o">+</span> <span class="n">rw</span> <span class="o">&lt;</span> <span class="n">x</span> <span class="ow">or</span>
                     <span class="n">y</span> <span class="o">+</span> <span class="n">h</span> <span class="o">&lt;</span> <span class="n">ry</span> <span class="ow">or</span> <span class="n">ry</span> <span class="o">+</span> <span class="n">rh</span> <span class="o">&lt;</span> <span class="n">y</span><span class="p">)</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">separated</span><span class="p">:</span>
            <span class="k">return</span> <span class="bp">True</span>
    <span class="k">return</span> <span class="bp">False</span>

<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nf">range</span><span class="p">(</span><span class="mi">30</span><span class="p">):</span>
    <span class="n">w</span><span class="p">,</span> <span class="n">h</span> <span class="o">=</span> <span class="n">random</span><span class="p">.</span><span class="nf">randint</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="mi">9</span><span class="p">),</span> <span class="n">random</span><span class="p">.</span><span class="nf">randint</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
    <span class="n">x</span> <span class="o">=</span> <span class="n">random</span><span class="p">.</span><span class="nf">randint</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">WIDTH</span> <span class="o">-</span> <span class="n">w</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
    <span class="n">y</span> <span class="o">=</span> <span class="n">random</span><span class="p">.</span><span class="nf">randint</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">HEIGHT</span> <span class="o">-</span> <span class="n">h</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
    <span class="n">candidate</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">h</span><span class="p">)</span>
    <span class="k">if</span> <span class="ow">not</span> <span class="nf">overlaps</span><span class="p">(</span><span class="n">candidate</span><span class="p">):</span>
        <span class="n">rooms</span><span class="p">.</span><span class="nf">append</span><span class="p">(</span><span class="n">candidate</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">Üretilen oda sayısı: </span><span class="si">{</span><span class="nf">len</span><span class="p">(</span><span class="n">rooms</span><span class="p">)</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<p>Kod, otuz yerleştirme denemesi yapar. <code class="language-plaintext highlighter-rouge">overlaps</code> fonksiyonu yeni odanın mevcut odalarla kesişip kesişmediğini denetler. Bu yalnızca ilk adımdır; odaların merkezlerini hesaplayıp en yakın komşuları koridorlarla birleştirmek, zindanı gerçekten oynanabilir hâle getirir.</p>

<h2 id="eğlenceyi-algoritmaya-bırakmamak">Eğlenceyi Algoritmaya Bırakmamak</h2>

<p>Prosedürel üretimin hedefi yalnızca çeşitlilik değildir. Bir seviyenin kalitesi kabaca şu dengeyle düşünülebilir:</p>

\[Q = \alpha V + \beta O - \gamma F\]

<p>Burada $V$ çeşitlilik, $O$ oynanabilirlik ve $F$ adaletsizliktir. Katsayılar oyunun önceliklerini temsil eder. Her harita farklı olsa bile oyuncu çıkışa ulaşamıyorsa algoritma görevini başaramamıştır.</p>

<p>Bu nedenle üretilen içerik; bağlantılılık, zorluk, kaynak dağılımı ve başlangıç güvenliği bakımından test edilmelidir. Başarılı sistemler insan tasarımını ortadan kaldırmaz; tasarımcının kurallarını çoğaltır. Algoritma zarları atar, fakat zarların hangi masada ve hangi kurallarla atılacağına hâlâ geliştirici karar verir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="prosedürel üretim" /><category term="oyun geliştirme" /><category term="algoritma" /><category term="python" /><category term="zindan üretimi" /><category term="rastgelelik" /><summary type="html"><![CDATA[Bir oyuna her başladığınızda dağların yer değiştirdiğini, koridorların başka yönlere uzandığını ve hazinelerin hiç beklemediğiniz köşelerde belirdiğini düşünün. Prosedürel üretim, içerikleri geliştiricinin tek tek tasarlaması yerine belirli kurallar ve algoritmalar yardımıyla oluşturan tekniktir. Böylece küçük bir kod parçası, keşfedilecek binlerce farklı dünya üretebilir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/her-tohumda-yeni-50.png" /><media:content medium="image" url="https://program.sonsuz.us/img/her-tohumda-yeni-50.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Klinik Deney Verilerinde İstatistiksel Analiz: R ile Tedavi Etkinliğini Ölçmek</title><link href="https://program.sonsuz.us/posts/klinik-deney-verilerinde-istatistiksel-analiz-r-ile-tedavi-etkinligini-olcmek/" rel="alternate" type="text/html" title="Klinik Deney Verilerinde İstatistiksel Analiz: R ile Tedavi Etkinliğini Ölçmek" /><published>2026-10-28T00:00:00+00:00</published><updated>2026-10-28T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/klinik-deney-verilerinde-istatistiksel-analiz-r-ile-tedavi-etkinligini-olcmek</id><content type="html" xml:base="https://program.sonsuz.us/posts/klinik-deney-verilerinde-istatistiksel-analiz-r-ile-tedavi-etkinligini-olcmek/"><![CDATA[<p>Yeni bir tedavinin gerçekten işe yarayıp yaramadığını anlamak, birkaç hastanın kendini daha iyi hissettiğini gözlemlemekten çok daha fazlasını gerektirir. Randomize kontrollü çalışmalar, tedavinin etkisini karşılaştırılabilir gruplar üzerinden ölçerken istatistiksel analiz yazılımları da ham verileri bilimsel kanıta dönüştürür. Bu süreçte R, SAS, Stata ve Python gibi araçlar araştırmacıların güçlü yardımcılarıdır; ancak yazılım ne kadar gelişmiş olursa olsun, yanlış tasarlanmış bir deneyi sihirli biçimde düzeltemez.</p>

<p><img src="/img/klinik-deney-verilerinde-68.svg" alt="klinik-deney-verilerinde-68" /></p>

<p>``</p>
<h2 id="randomizasyon-neden-önemlidir">Randomizasyon neden önemlidir?</h2>

<p>Randomize kontrollü çalışmada katılımcılar genellikle yeni tedavi ve kontrol gruplarına rastgele atanır. Randomizasyonun amacı yaş, hastalık şiddeti ve yaşam tarzı gibi sonucu etkileyebilecek özellikleri gruplar arasında dengelemektir. Böylece gözlenen farkın tedaviden kaynaklandığı iddiası daha güvenilir hâle gelir.</p>

<p>Basit bir sürekli sonuç için tedavi etkisi şöyle ifade edilebilir:</p>

\[\Delta = \bar{X}_{tedavi} - \bar{X}_{kontrol}\]

<p>Burada $\Delta$, iki grubun ortalama sonuçları arasındaki farktır. Örneğin düşük skorun daha iyi olduğu bir ağrı ölçeğinde negatif bir $\Delta$, yeni tedavinin lehine olabilir. Bununla birlikte etki büyüklüğü tek başına yeterli değildir; belirsizliği göstermek için güven aralığı da raporlanmalıdır:</p>

\[GA_{95\%} = \hat{\Delta} \pm 1.96 \times SE(\hat{\Delta})\]

<p>Güven aralığı hem etkinin olası yönünü hem de klinik açıdan anlamlı değerlerle uyumunu değerlendirmeye yardımcı olur.</p>

<h2 id="hangi-yazılım-ne-sunar">Hangi yazılım ne sunar?</h2>

<table>
  <thead>
    <tr>
      <th>Yazılım</th>
      <th>Güçlü yönü</th>
      <th>Dikkat edilmesi gereken</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>R</td>
      <td>Ücretsiz, geniş paket ekosistemi, tekrarlanabilir analiz</td>
      <td>Kodlama bilgisi gerektirir</td>
    </tr>
    <tr>
      <td>SAS</td>
      <td>Klinik araştırmalarda yaygın, doğrulama araçları güçlü</td>
      <td>Lisans maliyeti yüksektir</td>
    </tr>
    <tr>
      <td>Stata</td>
      <td>İstatistiksel komutları anlaşılır, veri yönetimi pratiktir</td>
      <td>Bazı özelleştirmeler sınırlı kalabilir</td>
    </tr>
    <tr>
      <td>Python</td>
      <td>Veri işleme ve makine öğrenmesinde esnektir</td>
      <td>Klinik raporlama iş akışları ek kurulum isteyebilir</td>
    </tr>
  </tbody>
</table>

<p>Araç seçimi yalnızca popülerliğe göre yapılmamalıdır. Düzenleyici gereksinimler, ekibin deneyimi, denetlenebilirlik ve analizlerin yeniden üretilebilmesi birlikte değerlendirilmelidir.</p>

<h2 id="r-ile-örnek-etkinlik-analizi">R ile örnek etkinlik analizi</h2>

<p>Aşağıdaki örnekte <code class="language-plaintext highlighter-rouge">sonuc</code> değişkeninin yüksek olması daha iyi klinik sonucu temsil etsin. Kod, grupları özetler ve bağımsız iki örneklem t-testi uygular:</p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">library</span><span class="p">(</span><span class="n">dplyr</span><span class="p">)</span><span class="w">

</span><span class="n">veri</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">read.csv</span><span class="p">(</span><span class="s2">"klinik_deney.csv"</span><span class="p">)</span><span class="w">

</span><span class="n">veri</span><span class="w"> </span><span class="o">%&gt;%</span><span class="w">
  </span><span class="n">group_by</span><span class="p">(</span><span class="n">grup</span><span class="p">)</span><span class="w"> </span><span class="o">%&gt;%</span><span class="w">
  </span><span class="n">summarise</span><span class="p">(</span><span class="w">
    </span><span class="n">katilimci</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n</span><span class="p">(),</span><span class="w">
    </span><span class="n">ortalama</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mean</span><span class="p">(</span><span class="n">sonuc</span><span class="p">,</span><span class="w"> </span><span class="n">na.rm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">TRUE</span><span class="p">),</span><span class="w">
    </span><span class="n">standart_sapma</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sd</span><span class="p">(</span><span class="n">sonuc</span><span class="p">,</span><span class="w"> </span><span class="n">na.rm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">TRUE</span><span class="p">)</span><span class="w">
  </span><span class="p">)</span><span class="w">

</span><span class="n">model</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">t.test</span><span class="p">(</span><span class="n">sonuc</span><span class="w"> </span><span class="o">~</span><span class="w"> </span><span class="n">grup</span><span class="p">,</span><span class="w"> </span><span class="n">data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">veri</span><span class="p">)</span><span class="w">
</span><span class="n">print</span><span class="p">(</span><span class="n">model</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<p>Özet tablo her gruptaki katılımcı sayısını, ortalamayı ve değişkenliği gösterir. <code class="language-plaintext highlighter-rouge">t.test()</code> ise ortalama farkına ilişkin hipotez testini ve güven aralığını üretir. Fakat normal dağılım, bağımsızlık ve aykırı değerler gibi varsayımlar kontrol edilmeden sonuçlara güvenilmemelidir.</p>

<table>
  <thead>
    <tr>
      <th>Ölçüt</th>
      <th>Yanıtladığı soru</th>
      <th>Yaygın hata</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Etki büyüklüğü</td>
      <td>Tedavi ne kadar fark oluşturdu?</td>
      <td>Yalnızca p-değerine bakmak</td>
    </tr>
    <tr>
      <td>Güven aralığı</td>
      <td>Tahmin ne kadar belirsiz?</td>
      <td>Geniş aralığı görmezden gelmek</td>
    </tr>
    <tr>
      <td>p-değeri</td>
      <td>Veri, sıfır etki varsayımıyla ne kadar uyumlu?</td>
      <td>Etkinin büyüklüğü sanmak</td>
    </tr>
    <tr>
      <td>Klinik anlamlılık</td>
      <td>Fark hasta açısından önemli mi?</td>
      <td>İstatistiksel anlamlılıkla eşitlemek</td>
    </tr>
  </tbody>
</table>

<h2 id="itt-eksik-veri-ve-güvenlik">ITT, eksik veri ve güvenlik</h2>

<p>Birincil analiz çoğunlukla <strong>tedavi niyetine göre analiz</strong> (ITT) yaklaşımını izler: Katılımcılar, tedaviyi tamamlamasalar bile randomize edildikleri grupta değerlendirilir. Bu yaklaşım randomizasyonun sağladığı dengeyi korur. Eksik sonuçların silinmesi ise yanlılığa yol açabileceğinden çoklu atama veya karma etkili modeller gibi yöntemler önceden hazırlanmış analiz planında tanımlanmalıdır.</p>

<p>Etkinlik kadar advers olaylar, tedaviyi bırakma oranları ve ciddi güvenlik sinyalleri de incelenir. Sonuç olarak iyi bir klinik analiz; doğru yazılım, önceden kayıtlı hipotezler, şeffaf kod, uygun istatistiksel model ve klinik uzmanlığın ortak ürünüdür. Bilgisayar hesabı hızlandırır, fakat bilimsel muhakemenin yerini alamaz.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="klinik-deney" /><category term="istatistik" /><category term="r-programlama" /><category term="veri-analizi" /><category term="randomize-kontrollü-çalışma" /><category term="biyostatistik" /><summary type="html"><![CDATA[Yeni bir tedavinin gerçekten işe yarayıp yaramadığını anlamak, birkaç hastanın kendini daha iyi hissettiğini gözlemlemekten çok daha fazlasını gerektirir. Randomize kontrollü çalışmalar, tedavinin etkisini karşılaştırılabilir gruplar üzerinden ölçerken istatistiksel analiz yazılımları da ham verileri bilimsel kanıta dönüştürür. Bu süreçte R, SAS, Stata ve Python gibi araçlar araştırmacıların güçlü yardımcılarıdır; ancak yazılım ne kadar gelişmiş olursa olsun, yanlış tasarlanmış bir deneyi sihirli biçimde düzeltemez.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/klinik-deney-verilerinde-68.png" /><media:content medium="image" url="https://program.sonsuz.us/img/klinik-deney-verilerinde-68.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Kozmik Samanlıkta İğne Aramak: SETI ve Radyo Sinyal İşleme</title><link href="https://program.sonsuz.us/posts/kozmik-samanlikta-igne-aramak-seti-ve-radyo-sinyal-isleme/" rel="alternate" type="text/html" title="Kozmik Samanlıkta İğne Aramak: SETI ve Radyo Sinyal İşleme" /><published>2026-10-28T00:00:00+00:00</published><updated>2026-10-28T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/kozmik-samanlikta-igne-aramak-seti-ve-radyo-sinyal-isleme</id><content type="html" xml:base="https://program.sonsuz.us/posts/kozmik-samanlikta-igne-aramak-seti-ve-radyo-sinyal-isleme/"><![CDATA[<p>Gökyüzüne çevrilmiş bir radyo teleskop, yalnızca yıldızları dinlemez; yıldırımlardan uydulara, pulsarlardan mikrodalga fırınlara kadar sayısız kaynağın oluşturduğu dev bir elektromanyetik kalabalığı kaydeder. SETI’nin, yani Dünya Dışı Akıllı Yaşam Araştırması’nın temel problemi de bu kozmik gürültü içinde yapay olabilecek kadar düzenli, dar bantlı veya tekrarlayan sinyalleri bulmaktır. Kısacası mesele sadece “uzaylıları dinlemek” değil, olağanüstü zor bir veri ayıklama problemidir.</p>

<p>``</p>

<h2 id="radyo-teleskop-gerçekte-ne-kaydeder">Radyo teleskop gerçekte ne kaydeder?</h2>

<p>Bir radyo teleskop, belirli zamanlarda ölçülen elektriksel gerilim örnekleri üretir. Ham zaman serisini kabaca şöyle modelleyebiliriz:</p>

\[x(t) = s(t) + n(t) + r(t)\]

<p>Burada $s(t)$ aradığımız göksel sinyal, $n(t)$ doğal ve elektronik gürültü, $r(t)$ ise radyo frekansı girişimidir (RFI). Cep telefonu baz istasyonları, GPS uyduları ve radar sistemleri RFI oluşturabilir. İşin eğlenceli kısmı şudur: İlk bakışta “uzaylı mesajı” gibi görünen güçlü bir çizgi, yakındaki bir cihazın paraziti çıkabilir.</p>

<p>Sinyalin gücünü değerlendirmek için sinyal-gürültü oranı kullanılır:</p>

\[\mathrm{SNR} = \frac{P_{sinyal}}{P_{gürültü}}\]

<p>SNR yükseldikçe algılama kolaylaşır; ancak zayıf bir sinyal, uzun süre gözlemlenip örnekler birleştirilerek görünür hâle getirilebilir.</p>

<h2 id="zaman-alanından-frekans-alanına">Zaman alanından frekans alanına</h2>

<p>Ham örneklerde düzen görmek zordur. Bu nedenle Hızlı Fourier Dönüşümü (FFT), sinyali zaman alanından frekans alanına taşır. Sonuç çoğunlukla zaman, frekans ve güç eksenlerinden oluşan bir <strong>spektrogram</strong> olarak incelenir.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Gösterdiği bilgi</th>
      <th>SETI açısından kullanım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Zaman serisi</td>
      <td>Genliğin zamana göre değişimi</td>
      <td>Darbe ve tekrar arama</td>
    </tr>
    <tr>
      <td>Güç spektrumu</td>
      <td>Enerjinin frekans dağılımı</td>
      <td>Dar bantlı taşıyıcı bulma</td>
    </tr>
    <tr>
      <td>Spektrogram</td>
      <td>Frekansın zamanla değişimi</td>
      <td>Doppler kaymasını izleme</td>
    </tr>
    <tr>
      <td>Korelasyon</td>
      <td>İki örüntünün benzerliği</td>
      <td>Bilinen şablonları arama</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/kozmik-samanlikta-igne-91.svg" alt="kozmik-samanlikta-igne-91" /></p>

<p>Uzak bir verici tek frekansta yayın yapsa bile gezegenlerin dönmesi ve yörünge hareketleri Doppler kaymasına yol açar. Gözlenen frekans yaklaşık olarak</p>

\[f' = f\left(1 + \frac{v}{c}\right)\]

<p>biçiminde değişir. Burada $v$ göreli radyal hız, $c$ ışık hızıdır. Spektrogramda bu etki düz bir çizgi yerine eğimli bir iz oluşturabilir.</p>

<h2 id="basit-bir-dar-bant-sinyali-arama">Basit bir dar bant sinyali arama</h2>

<p>Aşağıdaki Python örneği, gürültülü bir zaman serisinin spektrumunu hesaplar ve en güçlü frekans bileşenini bulur:</p>

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

<span class="n">ornekleme_hizi</span> <span class="o">=</span> <span class="mi">4096</span>
<span class="n">sure</span> <span class="o">=</span> <span class="mi">2</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">arange</span><span class="p">(</span><span class="n">ornekleme_hizi</span> <span class="o">*</span> <span class="n">sure</span><span class="p">)</span> <span class="o">/</span> <span class="n">ornekleme_hizi</span>

<span class="c1"># 730 Hz yapay sinyali beyaz gürültü içine saklıyoruz.
</span><span class="n">veri</span> <span class="o">=</span> <span class="mf">0.25</span> <span class="o">*</span> <span class="n">np</span><span class="p">.</span><span class="nf">sin</span><span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="p">.</span><span class="n">pi</span> <span class="o">*</span> <span class="mi">730</span> <span class="o">*</span> <span class="n">t</span><span class="p">)</span>
<span class="n">veri</span> <span class="o">+=</span> <span class="n">np</span><span class="p">.</span><span class="n">random</span><span class="p">.</span><span class="nf">normal</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="nf">len</span><span class="p">(</span><span class="n">t</span><span class="p">))</span>

<span class="c1"># Pencereleme, spektral sızıntıyı azaltır.
</span><span class="n">pencere</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">hanning</span><span class="p">(</span><span class="nf">len</span><span class="p">(</span><span class="n">veri</span><span class="p">))</span>
<span class="n">spektrum</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">abs</span><span class="p">(</span><span class="n">np</span><span class="p">.</span><span class="n">fft</span><span class="p">.</span><span class="nf">rfft</span><span class="p">(</span><span class="n">veri</span> <span class="o">*</span> <span class="n">pencere</span><span class="p">))</span> <span class="o">**</span> <span class="mi">2</span>
<span class="n">frekanslar</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="n">fft</span><span class="p">.</span><span class="nf">rfftfreq</span><span class="p">(</span><span class="nf">len</span><span class="p">(</span><span class="n">veri</span><span class="p">),</span> <span class="mi">1</span> <span class="o">/</span> <span class="n">ornekleme_hizi</span><span class="p">)</span>

<span class="n">tepe</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">argmax</span><span class="p">(</span><span class="n">spektrum</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span> <span class="o">+</span> <span class="mi">1</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Aday frekans: </span><span class="si">{</span><span class="n">frekanslar</span><span class="p">[</span><span class="n">tepe</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"> Hz</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<p>Bu yöntem öğretici olsa da gerçek gözlemlerde milyonlarca frekans kanalı ve saatlerce kayıt bulunur. Ayrıca tek bir güçlü tepe, keşif ilan etmek için kesinlikle yeterli değildir.</p>

<h2 id="bir-sinyal-ne-zaman-aday-olur">Bir sinyal ne zaman aday olur?</h2>

<p>SETI işlem hatları adayları çeşitli testlerden geçirir:</p>

<ol>
  <li>Sinyal teleskop gökyüzünden ayrıldığında kaybolmalı, hedefe dönüldüğünde tekrar görünmelidir.</li>
  <li>Aynı sinyal farklı yönlerde eşzamanlı görülüyorsa muhtemelen yerel RFI’dır.</li>
  <li>Doppler sürüklenmesi fiziksel olarak makul olmalıdır.</li>
  <li>Bağımsız teleskopların doğrulaması aranmalıdır.</li>
  <li>Tekrarlanabilirlik, tek seferlik heyecandan daha değerlidir.</li>
</ol>

<p>Makine öğrenmesi de spektrogram görüntülerini sınıflandırmak ve alışılmadık örüntüleri sıralamak için kullanılabilir. Fakat model, eğitim verisindeki insan yapımı parazitleri öğrenip önyargılı sonuçlar üretebilir. Bu yüzden otomasyon adayları azaltır; nihai bilimsel yorumun yerini almaz.</p>

<p>SETI, sabır ile istatistiğin buluştuğu bir alandır. Anlamlı bir sinyal bulunmasa bile geliştirilen FFT, filtreleme, anomali tespiti ve büyük veri teknikleri astronomiden haberleşmeye kadar pek çok alana katkı sağlar. Kozmik samanlık çok büyük olabilir; fakat arama araçlarımız her geçen gün daha keskin hâle geliyor.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="seti" /><category term="sinyal işleme" /><category term="radyo astronomi" /><category term="python" /><category term="veri analizi" /><category term="uzay" /><summary type="html"><![CDATA[Gökyüzüne çevrilmiş bir radyo teleskop, yalnızca yıldızları dinlemez; yıldırımlardan uydulara, pulsarlardan mikrodalga fırınlara kadar sayısız kaynağın oluşturduğu dev bir elektromanyetik kalabalığı kaydeder. SETI’nin, yani Dünya Dışı Akıllı Yaşam Araştırması’nın temel problemi de bu kozmik gürültü içinde yapay olabilecek kadar düzenli, dar bantlı veya tekrarlayan sinyalleri bulmaktır. Kısacası mesele sadece “uzaylıları dinlemek” değil, olağanüstü zor bir veri ayıklama problemidir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/kozmik-samanlikta-igne-91.png" /><media:content medium="image" url="https://program.sonsuz.us/img/kozmik-samanlikta-igne-91.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></feed>