<?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-30T12:05:51+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">Açık Veri Portalları: Şehir Verisi Vatandaşla Nasıl Buluşur?</title><link href="https://program.sonsuz.us/posts/acik-veri-portallari-sehir-verisi-vatandasla-nasil-bulusur/" rel="alternate" type="text/html" title="Açık Veri Portalları: Şehir Verisi Vatandaşla Nasıl Buluşur?" /><published>2026-10-30T00:00:00+00:00</published><updated>2026-10-30T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/acik-veri-portallari-sehir-verisi-vatandasla-nasil-bulusur</id><content type="html" xml:base="https://program.sonsuz.us/posts/acik-veri-portallari-sehir-verisi-vatandasla-nasil-bulusur/"><![CDATA[<p>Bir şehir her gün devasa miktarda veri üretir: otobüslerin konumu, hava kalitesi, yol çalışmaları, bütçe harcamaları, park doluluk oranları ve hatta hangi mahallede kaç ağaç bulunduğu… Belediyeler bu verileri yalnızca kurum içinde saklamak yerine açık veri portalları ve API’ler aracılığıyla paylaşabilir. Böylece vatandaşlar, araştırmacılar ve yazılımcılar şehrin dijital hazinesinden yararlanarak yeni uygulamalar geliştirebilir.</p>

<p><img src="/img/acik-veri-portallari-40.svg" alt="acik-veri-portallari-40" /></p>

<p>``</p>

<h2 id="açık-veri-nedir">Açık veri nedir?</h2>

<p>Açık veri; herkesin erişebildiği, kullanabildiği, değiştirebildiği ve uygun lisans koşullarıyla yeniden paylaşabildiği veridir. Bir Excel dosyasını belediyenin sitesine yüklemek başlangıç sayılabilir, ancak gerçek anlamda kullanılabilir veri için makine tarafından okunabilir formatlar gerekir.</p>

<p>Bir veri kümesinin faydasını basitçe şöyle düşünebiliriz:</p>

\[F = E \times G \times A\]

<p>Burada $E$ erişilebilirliği, $G$ güncelliği, $A$ ise anlaşılabilirliği temsil eder. Çarpanlardan biri sıfıra yaklaşırsa toplam fayda da düşer. Örneğin güncel olmayan otobüs konumları, teknik olarak erişilebilir olsa bile yolcuyu yanlış durağa koşturabilir!</p>

<table>
  <thead>
    <tr>
      <th>Paylaşım yöntemi</th>
      <th style="text-align: right">Güncellik</th>
      <th style="text-align: right">Yazılımla kullanım</th>
      <th>Uygun senaryo</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>PDF raporu</td>
      <td style="text-align: right">Düşük</td>
      <td style="text-align: right">Zor</td>
      <td>Yıllık faaliyet raporları</td>
    </tr>
    <tr>
      <td>CSV dosyası</td>
      <td style="text-align: right">Orta</td>
      <td style="text-align: right">Kolay</td>
      <td>Bütçe ve istatistik verileri</td>
    </tr>
    <tr>
      <td>REST API</td>
      <td style="text-align: right">Yüksek</td>
      <td style="text-align: right">Çok kolay</td>
      <td>Ulaşım ve sensör verileri</td>
    </tr>
    <tr>
      <td>GeoJSON</td>
      <td style="text-align: right">Yüksek</td>
      <td style="text-align: right">Çok kolay</td>
      <td>Harita ve konum uygulamaları</td>
    </tr>
  </tbody>
</table>

<h2 id="belediye-apisi-nasıl-çalışır">Belediye API’si nasıl çalışır?</h2>

<p>API, belediyenin veri sistemleri ile dışarıdaki uygulamalar arasında kontrollü bir köprü kurar. İstemci belirli bir adrese HTTP isteği gönderir; sunucu çoğunlukla JSON biçiminde yanıt verir. Örneğin <code class="language-plaintext highlighter-rouge">/api/v1/otobusler</code> adresi araç listesini, <code class="language-plaintext highlighter-rouge">/api/v1/otobusler/34</code> adresi ise belirli bir aracı döndürebilir.</p>

<p>Arka planda tipik akış şu şekildedir:</p>

<ol>
  <li>Sensörler veya belediye birimleri ham veriyi üretir.</li>
  <li>ETL süreci veriyi temizler, standartlaştırır ve doğrular.</li>
  <li>Kişisel ya da hassas alanlar anonimleştirilir.</li>
  <li>API katmanı yalnızca paylaşılması uygun alanları sunar.</li>
  <li>Portal; açıklama, lisans, güncelleme tarihi ve örnek sorgular yayımlar.</li>
</ol>

<p>Bir geliştirici, durak verisini Python ile şöyle kullanabilir:</p>

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

<span class="n">url</span> <span class="o">=</span> <span class="sh">'</span><span class="s">https://veri.ornek.bel.tr/api/v1/duraklar</span><span class="sh">'</span>
<span class="n">params</span> <span class="o">=</span> <span class="p">{</span><span class="sh">'</span><span class="s">ilce</span><span class="sh">'</span><span class="p">:</span> <span class="sh">'</span><span class="s">merkez</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">limit</span><span class="sh">'</span><span class="p">:</span> <span class="mi">10</span><span class="p">}</span>

<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="p">.</span><span class="nf">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
<span class="n">response</span><span class="p">.</span><span class="nf">raise_for_status</span><span class="p">()</span>

<span class="k">for</span> <span class="n">durak</span> <span class="ow">in</span> <span class="n">response</span><span class="p">.</span><span class="nf">json</span><span class="p">()[</span><span class="sh">'</span><span class="s">results</span><span class="sh">'</span><span class="p">]:</span>
    <span class="nf">print</span><span class="p">(</span><span class="n">durak</span><span class="p">[</span><span class="sh">'</span><span class="s">ad</span><span class="sh">'</span><span class="p">],</span> <span class="n">durak</span><span class="p">[</span><span class="sh">'</span><span class="s">konum</span><span class="sh">'</span><span class="p">])</span>
</code></pre></div></div>

<p>Bu kod API’ye filtreli bir GET isteği gönderir, bağlantı hatalarını denetler ve dönen ilk on durağın adını ve konumunu yazdırır. Gerçek projelerde sayfalama, önbellekleme ve istek sınırı bilgileri de dikkate alınmalıdır.</p>

<h2 id="şeffaflık-kadar-mahremiyet-de-önemli">Şeffaflık kadar mahremiyet de önemli</h2>

<p>Her belediye verisi açılmamalıdır. Kişilerin adresleri, sağlık bilgileri, araç plakaları veya hareket geçmişleri doğrudan paylaşılırsa açık veri faydadan çok zarar üretebilir. Bu nedenle isim kaldırma tek başına yeterli değildir; farklı veri kümeleri birleştirildiğinde kişinin yeniden tanınması mümkün olabilir.</p>

<table>
  <thead>
    <tr>
      <th>Açılabilecek veri</th>
      <th>Korunması gereken veri</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Mahalle bazlı nüfus istatistiği</td>
      <td>Kişi ve açık adres listesi</td>
    </tr>
    <tr>
      <td>Anlık toplu taşıma konumu</td>
      <td>Bireysel seyahat geçmişi</td>
    </tr>
    <tr>
      <td>Toplam belediye harcaması</td>
      <td>Personelin banka bilgileri</td>
    </tr>
    <tr>
      <td>Ölçüm istasyonu hava kalitesi</td>
      <td>Vatandaşa ait sağlık kaydı</td>
    </tr>
  </tbody>
</table>

<p>API anahtarları, hız sınırlama, anonimleştirme ve erişim kayıtları güvenliğin temel araçlarıdır. Ayrıca veri lisansı açıkça belirtilmelidir; “internette bulunuyor” ifadesi, verinin sınırsızca kullanılabileceği anlamına gelmez.</p>

<h2 id="vatandaş-için-gerçek-değer">Vatandaş için gerçek değer</h2>

<p>İyi tasarlanmış bir portal yalnızca dosya deposu değildir. Veri sözlüğü, sürüm bilgisi, API dokümantasyonu, hata bildirim kanalı ve örnek projeler sunar. Bunun sonucunda erişilebilir rota uygulamaları, mahalle bütçesi panoları, hava kalitesi uyarıları veya boş otopark haritaları geliştirilebilir.</p>

<p>Kısacası şehir verisi paylaşıldığında belediye tek üretici olmaktan çıkar; vatandaşlar da çözüm ortağına dönüşür. Doğru standartlar, güncel API’ler ve güçlü mahremiyet kuralları sayesinde açık veri, dijital şehrin vitrini değil çalışan motoru olabilir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="açık veri" /><category term="api" /><category term="belediye" /><category term="akıllı şehir" /><category term="veri güvenliği" /><category term="şehircilik" /><summary type="html"><![CDATA[Bir şehir her gün devasa miktarda veri üretir: otobüslerin konumu, hava kalitesi, yol çalışmaları, bütçe harcamaları, park doluluk oranları ve hatta hangi mahallede kaç ağaç bulunduğu… Belediyeler bu verileri yalnızca kurum içinde saklamak yerine açık veri portalları ve API’ler aracılığıyla paylaşabilir. Böylece vatandaşlar, araştırmacılar ve yazılımcılar şehrin dijital hazinesinden yararlanarak yeni uygulamalar geliştirebilir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/acik-veri-portallari-40.png" /><media:content medium="image" url="https://program.sonsuz.us/img/acik-veri-portallari-40.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Akıllı Aydınlatmada Scene Programlama: Tek Komutla Işık Orkestrası</title><link href="https://program.sonsuz.us/posts/akilli-aydinlatmada-scene-programlama-tek-komutla-isik-orkestrasi/" rel="alternate" type="text/html" title="Akıllı Aydınlatmada Scene Programlama: Tek Komutla Işık Orkestrası" /><published>2026-10-30T00:00:00+00:00</published><updated>2026-10-30T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/akilli-aydinlatmada-scene-programlama-tek-komutla-isik-orkestrasi</id><content type="html" xml:base="https://program.sonsuz.us/posts/akilli-aydinlatmada-scene-programlama-tek-komutla-isik-orkestrasi/"><![CDATA[<p><img src="/img/akilli-aydinlatmada-scene-22.svg" alt="akilli-aydinlatmada-scene-22" /></p>

<p>Bir odadaki beş farklı lambayı film izlemeye uygun hâle getirmek için her birini ayrı ayrı ayarladığınızı düşünün: tavan ışığını kıs, lambaderi mora çevir, LED şeridi yak… Akıllı aydınlatma sistemlerindeki <strong>scene</strong>, yani sahne yaklaşımı, bu küçük kumanda maratonunu tek komuta indirir. “Sinema” sahnesini çağırdığınızda bütün ışıklar önceden belirlenen renk, parlaklık ve geçiş sürelerine senkronize biçimde ulaşır.</p>

<p>``</p>

<h2 id="scene-tam-olarak-nedir">Scene tam olarak nedir?</h2>

<p>Scene, bir veya daha fazla cihazın hedef durumlarını saklayan mantıksal bir anlık görüntüdür. Bir sahne çalıştırıldığında sistem ilgili cihazlara <code class="language-plaintext highlighter-rouge">açık/kapalı</code>, parlaklık, renk sıcaklığı veya RGB değeri gibi komutlar gönderir.</p>

<p>Bir ışığın basitleştirilmiş durumu şöyle gösterilebilir:</p>

\[L_i = (p_i, b_i, r_i, g_i, b_i', t_i)\]

<p>Burada $p_i$ güç durumunu, $b_i$ parlaklığı, $(r_i,g_i,b_i’)$ renk bileşenlerini, $t_i$ ise geçiş süresini temsil eder. Bir sahne de $n$ adet ışığın durum kümesidir:</p>

\[S = \{L_1, L_2, \ldots, L_n\}\]

<p>Yani scene komutu sihir değil; önceden tanımlanmış durumların topluca uygulanmasıdır. Yine de salon bir anda bilim kurgu filmine dönüşünce biraz sihirli görünebilir.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th style="text-align: right">Komut sayısı</th>
      <th>Tutarlılık</th>
      <th>Kullanım örneği</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Tekil kontrol</td>
      <td style="text-align: right">Her ışık için ayrı</td>
      <td>Kullanıcıya bağlı</td>
      <td>Okuma lambasını açmak</td>
    </tr>
    <tr>
      <td>Scene</td>
      <td style="text-align: right">Genellikle tek</td>
      <td>Yüksek</td>
      <td>Sinema veya yemek modu</td>
    </tr>
    <tr>
      <td>Otomasyon</td>
      <td style="text-align: right">Koşula bağlı</td>
      <td>Kurallara bağlı</td>
      <td>Gün batınca sahneyi çağırmak</td>
    </tr>
  </tbody>
</table>

<h2 id="senkronizasyon-nasıl-sağlanır">Senkronizasyon nasıl sağlanır?</h2>

<p>Merkezî sistem önce sahne tanımını okur, ardından komutları ağ üzerinden ampullere veya köprüye iletir. Zigbee gibi ağlarda grup adresleme kullanılıyorsa tek yayın mesajı aynı gruptaki cihazlara ulaşabilir. Wi-Fi tabanlı sistemlerde ise komutlar çoğunlukla ayrı ayrı gönderilir.</p>

<p>Gerçek dünyada “aynı anda” ifadesi yaklaşık bir hedeftir. Cihaz $i$ için toplam gecikme şöyle modellenebilir:</p>

\[T_i = T_{işleme} + T_{ağ} + T_{cihaz}\]

<p>Işıklar arasındaki fark $\Delta T = \max(T_i)-\min(T_i)$ küçüldükçe geçiş daha senkron görünür. Grup mesajları, yerel ağ kullanımı ve ortak geçiş süresi bu farkı azaltır. Bulut üzerinden çalışan çözümlerde internet gecikmesi, orkestraya geç kalan bir trompetçi ekleyebilir.</p>

<h2 id="home-assistant-ile-örnek-sahne">Home Assistant ile örnek sahne</h2>

<p>Aşağıdaki YAML tanımı, üç ışığın hedef özelliklerini saklar. <code class="language-plaintext highlighter-rouge">transition</code> alanı değişimin iki saniyede yumuşak biçimde yapılmasını sağlar.</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">scene</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">Sinema Modu</span>
    <span class="na">entities</span><span class="pi">:</span>
      <span class="na">light.tavan</span><span class="pi">:</span>
        <span class="na">state</span><span class="pi">:</span> <span class="s2">"</span><span class="s">off"</span>
      <span class="na">light.lambader</span><span class="pi">:</span>
        <span class="na">state</span><span class="pi">:</span> <span class="s2">"</span><span class="s">on"</span>
        <span class="na">brightness</span><span class="pi">:</span> <span class="m">65</span>
        <span class="na">rgb_color</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">90</span><span class="pi">,</span> <span class="nv">30</span><span class="pi">,</span> <span class="nv">140</span><span class="pi">]</span>
        <span class="na">transition</span><span class="pi">:</span> <span class="m">2</span>
      <span class="na">light.tv_seridi</span><span class="pi">:</span>
        <span class="na">state</span><span class="pi">:</span> <span class="s2">"</span><span class="s">on"</span>
        <span class="na">brightness</span><span class="pi">:</span> <span class="m">110</span>
        <span class="na">color_temp_kelvin</span><span class="pi">:</span> <span class="m">3000</span>
        <span class="na">transition</span><span class="pi">:</span> <span class="m">2</span>
</code></pre></div></div>

<p>Sahneyi bir otomasyondan, panelden veya sesli asistandan çağırabiliriz:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">service</span><span class="pi">:</span> <span class="s">scene.turn_on</span>
<span class="na">target</span><span class="pi">:</span>
  <span class="na">entity_id</span><span class="pi">:</span> <span class="s">scene.sinema_modu</span>
<span class="na">data</span><span class="pi">:</span>
  <span class="na">transition</span><span class="pi">:</span> <span class="m">2</span>
</code></pre></div></div>

<p>İlk blok <strong>hangi durumun oluşturulacağını</strong>, ikinci blok ise <strong>bu durumun ne zaman uygulanacağını</strong> ifade eder. Bu ayrım önemlidir: Scene durum tarif eder; otomasyon ise tetikleyici ve koşullarla karar verir.</p>

<h2 id="mqtt-ile-kendi-denetleyicini-yazmak">MQTT ile kendi denetleyicini yazmak</h2>

<p>Özel bir IoT projesinde sahne, JSON olarak MQTT konusuna yayınlanabilir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">json</span>
<span class="kn">import</span> <span class="n">paho.mqtt.publish</span> <span class="k">as</span> <span class="n">publish</span>

<span class="n">scene</span> <span class="o">=</span> <span class="p">{</span>
    <span class="sh">"</span><span class="s">group</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">salon</span><span class="sh">"</span><span class="p">,</span>
    <span class="sh">"</span><span class="s">brightness</span><span class="sh">"</span><span class="p">:</span> <span class="mi">35</span><span class="p">,</span>
    <span class="sh">"</span><span class="s">color</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span><span class="sh">"</span><span class="s">r</span><span class="sh">"</span><span class="p">:</span> <span class="mi">80</span><span class="p">,</span> <span class="sh">"</span><span class="s">g</span><span class="sh">"</span><span class="p">:</span> <span class="mi">20</span><span class="p">,</span> <span class="sh">"</span><span class="s">b</span><span class="sh">"</span><span class="p">:</span> <span class="mi">130</span><span class="p">},</span>
    <span class="sh">"</span><span class="s">transition_ms</span><span class="sh">"</span><span class="p">:</span> <span class="mi">2000</span>
<span class="p">}</span>

<span class="n">publish</span><span class="p">.</span><span class="nf">single</span><span class="p">(</span>
    <span class="sh">"</span><span class="s">home/lights/scene</span><span class="sh">"</span><span class="p">,</span>
    <span class="n">payload</span><span class="o">=</span><span class="n">json</span><span class="p">.</span><span class="nf">dumps</span><span class="p">(</span><span class="n">scene</span><span class="p">),</span>
    <span class="n">hostname</span><span class="o">=</span><span class="sh">"</span><span class="s">192.168.1.20</span><span class="sh">"</span>
<span class="p">)</span>
</code></pre></div></div>

<p>Bu kod sahne verisini tek mesaj hâlinde yayımlar. Abone olan denetleyici mesajı ayrıştırıp ilgili ışıklara uygular. Üretim ortamında kimlik doğrulama, TLS, hata kontrolü ve çevrimdışı cihaz yönetimi de eklenmelidir.</p>

<h2 id="sağlam-sahneler-için-ipuçları">Sağlam sahneler için ipuçları</h2>

<ul>
  <li>Cihazları işlevlerine göre gruplandırın.</li>
  <li>Bulut yerine mümkünse yerel kontrol kullanın.</li>
  <li>Tüm ışıklara ortak geçiş süresi verin.</li>
  <li>Erişilemeyen cihazlarda işlemi tamamen durdurmak yerine kalanları çalıştırın.</li>
  <li>Sahnenin mevcut ayarları mı kaydedeceğine, sabit değerler mi kullanacağına karar verin.</li>
</ul>

<p>İyi tasarlanmış bir scene sistemi, karmaşık cihaz ayrıntılarını kullanıcıdan saklar. Kullanıcı yalnızca “Çalışma”, “Parti” veya “Uyku” der; arka plandaki yazılım ise ışık orkestrasının şefliğini üstlenir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Program" /><category term="akıllı aydınlatma" /><category term="scene programlama" /><category term="iot" /><category term="otomasyon" /><category term="mqtt" /><category term="home assistant" /><summary type="html"><![CDATA[Bir odadaki beş farklı lambayı film izlemeye uygun hâle getirmek için her birini ayrı ayrı ayarladığınızı düşünün: tavan ışığını kıs, lambaderi mora çevir, LED şeridi yak… Akıllı aydınlatma sistemlerindeki scene, yani sahne yaklaşımı, bu küçük kumanda maratonunu tek komuta indirir. “Sinema” sahnesini çağırdığınızda bütün ışıklar önceden belirlenen renk, parlaklık ve geçiş sürelerine senkronize biçimde ulaşır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/akilli-aydinlatmada-scene-22.png" /><media:content medium="image" url="https://program.sonsuz.us/img/akilli-aydinlatmada-scene-22.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Akıllı Evin Ortak Dili: Zigbee, Z-Wave ve Matter Karşılaştırması</title><link href="https://program.sonsuz.us/posts/akilli-evin-ortak-dili-zigbee-z-wave-ve-matter-karsilastirmasi/" rel="alternate" type="text/html" title="Akıllı Evin Ortak Dili: Zigbee, Z-Wave ve Matter Karşılaştırması" /><published>2026-10-30T00:00:00+00:00</published><updated>2026-10-30T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/akilli-evin-ortak-dili-zigbee-z-wave-ve-matter-karsilastirmasi</id><content type="html" xml:base="https://program.sonsuz.us/posts/akilli-evin-ortak-dili-zigbee-z-wave-ve-matter-karsilastirmasi/"><![CDATA[<p>Bir hareket sensörü lambaya “Biri geldi!” derken, termostat kombiden yardım ister. Peki farklı markaların cihazları aynı evde birbirini nasıl anlar? Akıllı ev protokolleri, bu dijital apartmanın haberleşme kurallarını belirler. Zigbee, Z-Wave ve Matter ise benzer ihtiyaçları farklı katmanlarda çözer. Doğru seçim, yalnızca kutudaki logoya bakmaktan biraz daha fazlasını gerektirir.</p>

<p>``</p>

<h2 id="önce-katmanları-ayıralım">Önce katmanları ayıralım</h2>

<p>Haberleşmenin iki temel sorusu vardır: “Veriyi nasıl taşıyoruz?” ve “Taşınan veri ne anlama geliyor?” Radyo teknolojisi ilk soruya, uygulama protokolü ikinci soruya yanıt verir. Ortak frekans kullanmak, ortak dili konuşmak anlamına gelmez; cihazların komutları, güvenlik kurallarını ve katılım süreçlerini de anlaması gerekir.</p>

<p>Zigbee ve Z-Wave kendi ağ ve uygulama yapılarını sunar. Matter ise IP üzerinde çalışan bir uygulama standardıdır; veriyi Thread, Wi-Fi veya Ethernet taşıyabilir. Bluetooth LE genellikle ilk kurulumda yardımcı olur, normal Matter haberleşmesinin taşıyıcısı değildir.</p>

<p>Örgü, yani <em>mesh</em> ağlarda mesajlar ara cihazlardan geçebilir. Her atlamanın bağımsız başarı olasılığı $p$ ise, $h$ atlamalı basitleştirilmiş bir yol için $P = p^h$ olur. Örneğin $0.99^3 = 0.970299$. Bu, yeniden denemeleri dışlayan öğretici bir modeldir; gerçek performansı yerleşim, parazit ve alternatif yollar belirler.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Zigbee</th>
      <th>Z-Wave</th>
      <th>Matter</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Temel yaklaşım</td>
      <td>IP dışı cihaz ağı</td>
      <td>IP dışı cihaz ağı</td>
      <td>IP tabanlı uygulama standardı</td>
    </tr>
    <tr>
      <td>Taşıma</td>
      <td>Genellikle 2,4 GHz</td>
      <td>Bölgesel sub-GHz bantları</td>
      <td>Thread, Wi-Fi, Ethernet</td>
    </tr>
    <tr>
      <td>Ağ düzeni</td>
      <td>Mesh</td>
      <td>Klasik ağlarda mesh</td>
      <td>Taşıyıcıya bağlı</td>
    </tr>
    <tr>
      <td>Temel altyapı</td>
      <td>Koordinatör</td>
      <td>Denetleyici</td>
      <td>Matter denetleyicisi</td>
    </tr>
    <tr>
      <td>Güçlü taraf</td>
      <td>Geniş ürün seçeneği</td>
      <td>Bölgesel, düşük frekanslı haberleşme</td>
      <td>Ekosistemler arası ortak dil</td>
    </tr>
  </tbody>
</table>

<h2 id="zigbee-kalabalık-ve-ekonomik-mahalle">Zigbee: Kalabalık ve ekonomik mahalle</h2>

<p>Zigbee, sensörlerden ampullere uzanan geniş ürün çeşitliliğiyle dikkat çeker. Koordinatör ağı oluşturur; yönlendirici cihazlar mesajları aktarır. Pilli uç cihazlar çoğunlukla uyuyarak enerji tasarrufu yapar ve başkalarının mesajlarını taşımaz. Şebekeden beslenen her cihazın yönlendirici olduğunu varsaymamak gerekir.</p>

<p>Dezavantajı, yaygın kullanılan 2,4 GHz bandını Wi-Fi ile paylaşmasıdır. Kanal planlaması önemlidir. Ayrıca “Zigbee destekli” etiketi, her cihazın her merkezde bütün özellikleriyle çalışacağını garanti etmez. Satın almadan önce merkezin uyumluluk listesini kontrol edin.</p>

<h2 id="z-wave-daha-sakin-frekansların-komşusu">Z-Wave: Daha sakin frekansların komşusu</h2>

<p>Z-Wave, bölgeye göre değişen sub-GHz frekanslarını kullanır. Avrupa ürünlerinde sıklıkla 868 MHz çevresi görülür; ABD ürünleri farklı bantlardadır. Bu yüzden yurt dışından alınan cihazın yerel denetleyiciyle ve mevzuatla uyumunu kontrol etmek şarttır.</p>

<p>Düşük frekans, benzer koşullarda yayılım açısından avantaj sağlayabilir; ancak beton duvarları sihirli biçimde ortadan kaldırmaz. Sertifikasyon birlikte çalışabilirliği destekler, yine de denetleyicinin özellik desteği önemlidir. Ayrıca Z-Wave Long Range, klasik mesh yaklaşımından farklı olarak yıldız topolojisi kullanır.</p>

<h2 id="matter-ortak-sözlük-farklı-yollar">Matter: Ortak sözlük, farklı yollar</h2>

<p>Matter’ın büyük vaadi, markalar arasındaki uygulama dilini standartlaştırmaktır. Desteklenen cihazlar Multi-Admin özelliğiyle birden fazla ekosisteme eklenebilir. Ancak uygulamaların sunduğu özellikler, cihaz türü desteği ve Matter sürümleri hâlâ kontrol edilmelidir.</p>

<p>Thread kullanan Matter cihazları, evin diğer IP ağlarına ulaşmak için bir Thread sınır yönlendiricisinden yararlanır. Matter denetleyicisi ise cihazın kurulumu ve yönetimiyle ilgilenir. Bu roller aynı üründe bulunabilir ama aynı şey değildir.</p>

<p>Eski Zigbee veya Z-Wave cihazları kendiliğinden Matter cihazına dönüşmez. Uyumlu bir köprü, yalnızca desteklediği cihaz türlerini ve özelliklerini Matter tarafına sunabilir.</p>

<h2 id="yazılım-tarafında-ortak-komut-modeli">Yazılım tarafında ortak komut modeli</h2>

<p>Bir otomasyon uygulaması, cihazın protokolünü her iş kuralına taşımak yerine adaptör seçimini merkezileştirebilir. Aşağıdaki Python örneği gerçek radyo iletişimi yapmaz; komutun hangi entegrasyona yönlendirileceğini planlar:</p>

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

<span class="nd">@dataclass</span><span class="p">(</span><span class="n">frozen</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">Device</span><span class="p">:</span>
    <span class="n">name</span><span class="p">:</span> <span class="nb">str</span>
    <span class="n">protocol</span><span class="p">:</span> <span class="nb">str</span>
    <span class="n">online</span><span class="p">:</span> <span class="nb">bool</span>

<span class="n">ADAPTERS</span> <span class="o">=</span> <span class="p">{</span>
    <span class="sh">'</span><span class="s">zigbee</span><span class="sh">'</span><span class="p">:</span> <span class="sh">'</span><span class="s">zigbee_gateway</span><span class="sh">'</span><span class="p">,</span>
    <span class="sh">'</span><span class="s">z-wave</span><span class="sh">'</span><span class="p">:</span> <span class="sh">'</span><span class="s">zwave_controller</span><span class="sh">'</span><span class="p">,</span>
    <span class="sh">'</span><span class="s">matter</span><span class="sh">'</span><span class="p">:</span> <span class="sh">'</span><span class="s">matter_controller</span><span class="sh">'</span><span class="p">,</span>
<span class="p">}</span>

<span class="k">def</span> <span class="nf">plan_command</span><span class="p">(</span><span class="n">device</span><span class="p">:</span> <span class="n">Device</span><span class="p">,</span> <span class="n">enabled</span><span class="p">:</span> <span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
    <span class="k">if</span> <span class="ow">not</span> <span class="n">device</span><span class="p">.</span><span class="n">online</span><span class="p">:</span>
        <span class="k">raise</span> <span class="nc">ConnectionError</span><span class="p">(</span><span class="sh">'</span><span class="s">Cihaz çevrimdışı</span><span class="sh">'</span><span class="p">)</span>
    <span class="k">if</span> <span class="n">device</span><span class="p">.</span><span class="n">protocol</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">ADAPTERS</span><span class="p">:</span>
        <span class="k">raise</span> <span class="nc">ValueError</span><span class="p">(</span><span class="sh">'</span><span class="s">Desteklenmeyen protokol</span><span class="sh">'</span><span class="p">)</span>
    <span class="k">return</span> <span class="p">{</span>
        <span class="sh">'</span><span class="s">adapter</span><span class="sh">'</span><span class="p">:</span> <span class="n">ADAPTERS</span><span class="p">[</span><span class="n">device</span><span class="p">.</span><span class="n">protocol</span><span class="p">],</span>
        <span class="sh">'</span><span class="s">device</span><span class="sh">'</span><span class="p">:</span> <span class="n">device</span><span class="p">.</span><span class="n">name</span><span class="p">,</span>
        <span class="sh">'</span><span class="s">action</span><span class="sh">'</span><span class="p">:</span> <span class="sh">'</span><span class="s">set_power</span><span class="sh">'</span><span class="p">,</span>
        <span class="sh">'</span><span class="s">value</span><span class="sh">'</span><span class="p">:</span> <span class="n">enabled</span><span class="p">,</span>
    <span class="p">}</span>

<span class="n">lamp</span> <span class="o">=</span> <span class="nc">Device</span><span class="p">(</span><span class="sh">'</span><span class="s">salon_lambası</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">matter</span><span class="sh">'</span><span class="p">,</span> <span class="bp">True</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="nf">plan_command</span><span class="p">(</span><span class="n">lamp</span><span class="p">,</span> <span class="bp">True</span><span class="p">))</span>
</code></pre></div></div>

<p>Gerçek adaptör, ortak <code class="language-plaintext highlighter-rouge">set_power</code> isteğini cihazın desteklediği komuta çevirir. Kimlik doğrulama, zaman aşımı, yeniden deneme ve durum doğrulaması ayrıca uygulanmalıdır. Böylece otomasyon mantığı, haberleşme ayrıntılarından bağımsız kalır.</p>

<h2 id="hangisini-seçmeli">Hangisini seçmeli?</h2>

<p>Uygun fiyatlı sensör çeşitliliğinde Zigbee, bölgesel frekans avantajında Z-Wave, ekosistemler arası kullanımda Matter güçlü adaylardır. Yeni kurulumda yalnızca protokolü değil, gereken denetleyiciyi, çevrimdışı çalışma davranışını ve güncelleme politikasını da değerlendirin. Güvenli eşleştirme kullanın, yazılımı güncel tutun ve otomasyonlarınızı internet kesildiğinde sınayın. En akıllı ev, internet gidince ev olmayı unutmayan evdir.</p>

<p><img src="/img/akilli-evin-ortak-54.svg" alt="akilli-evin-ortak-54" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="akıllı ev" /><category term="zigbee" /><category term="z-wave" /><category term="matter" /><category term="thread" /><category term="iot" /><summary type="html"><![CDATA[Bir hareket sensörü lambaya “Biri geldi!” derken, termostat kombiden yardım ister. Peki farklı markaların cihazları aynı evde birbirini nasıl anlar? Akıllı ev protokolleri, bu dijital apartmanın haberleşme kurallarını belirler. Zigbee, Z-Wave ve Matter ise benzer ihtiyaçları farklı katmanlarda çözer. Doğru seçim, yalnızca kutudaki logoya bakmaktan biraz daha fazlasını gerektirir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/akilli-evin-ortak-54.png" /><media:content medium="image" url="https://program.sonsuz.us/img/akilli-evin-ortak-54.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">C++ Yapıcılar ve Yıkıcılar: Nesnelerin Doğumundan Vedaya Bellek Yönetimi</title><link href="https://program.sonsuz.us/posts/c-yapicilar-ve-yikicilar-nesnelerin-dogumundan-vedaya-bellek-yonetimi/" rel="alternate" type="text/html" title="C++ Yapıcılar ve Yıkıcılar: Nesnelerin Doğumundan Vedaya Bellek Yönetimi" /><published>2026-10-30T00:00:00+00:00</published><updated>2026-10-30T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/c-yapicilar-ve-yikicilar-nesnelerin-dogumundan-vedaya-bellek-yonetimi</id><content type="html" xml:base="https://program.sonsuz.us/posts/c-yapicilar-ve-yikicilar-nesnelerin-dogumundan-vedaya-bellek-yonetimi/"><![CDATA[<p><img src="/img/c-yapicilar-ve-65.svg" alt="c-yapicilar-ve-65" /></p>

<p>C++ nesnelerini küçük bir atölyenin çalışanları gibi düşünün: İşe başlarken ekipmanlarını hazırlamaları, ayrılırken de masalarını toplamaları gerekir. Yapıcılar nesneyi kullanıma hazırlar; yıkıcılar ise nesnenin sorumluluğundaki kaynakların bırakılmasını sağlar. Bu ikiliyi anlamak, yalnızca bellek sızıntılarını önlemek değil, güvenilir sınıflar tasarlamak için de temel bir adımdır.</p>

<p>``</p>

<h2 id="önce-teori-bellek-ile-nesne-aynı-şey-değildir">Önce teori: Bellek ile nesne aynı şey değildir</h2>

<p>Bir nesne için depolama alanı ayrılması, o nesnenin doğru biçimde kurulmuş olması anlamına gelmez. Yapıcı, üyeleri başlatır ve sınıfın geçerli durum koşullarını oluşturur. Örneğin bir tamponun boyutu ile sahip olduğu depolama alanı birbiriyle uyumlu olmalıdır. Bu koşullara <strong>sınıf değişmezi</strong>, yani invariant denir.</p>

<p>Yıkıcı kaynakları temizler; nesnenin kendi depolama alanının bırakılması ise kullanılan depolama modeline bağlıdır. Dolayısıyla “yıkıcı belleği siler” ifadesi tek başına eksiktir.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Yapıcı</th>
      <th>Yıkıcı</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>İsim</td>
      <td>Sınıf adı</td>
      <td>Sınıf adının önünde <code class="language-plaintext highlighter-rouge">~</code></td>
    </tr>
    <tr>
      <td>Dönüş türü</td>
      <td>Yok</td>
      <td>Yok</td>
    </tr>
    <tr>
      <td>Parametre</td>
      <td>Alabilir</td>
      <td>Alamaz</td>
    </tr>
    <tr>
      <td>Aşırı yükleme</td>
      <td>Yapılabilir</td>
      <td>Yapılamaz</td>
    </tr>
    <tr>
      <td>Temel görev</td>
      <td>Geçerli başlangıç durumu</td>
      <td>Kaynak temizliği</td>
    </tr>
  </tbody>
</table>

<h2 id="yapıcılar-başlangıç-ayarları-önemlidir">Yapıcılar: Başlangıç ayarları önemlidir</h2>

<p>Parametresiz çağrılabilen yapıcıya <strong>varsayılan yapıcı</strong> denir. Parametreli yapıcılar farklı başlangıç seçenekleri sunar. Bir yapıcının başka bir yapıcıyı çağırması ise delegasyon olarak adlandırılır; böylece aynı kurulum mantığını tekrar yazmazsınız.</p>

<p>Üyeleri yapıcı gövdesinde atamak yerine <strong>üye başlatma listesinde</strong> başlatmak genellikle daha doğrudur. Özellikle referans üyeler ve <code class="language-plaintext highlighter-rouge">const</code> üyeler burada başlatılmalıdır. Ayrıca üyeler, listede yazdığınız sırayla değil, sınıf içinde bildirildikleri sırayla başlatılır. Bu ayrıntı, başka bir üyeye bağlı başlangıç değerlerinde kritik önem taşır.</p>

<h2 id="uygulama-kendi-tamponunu-yöneten-sınıf">Uygulama: Kendi tamponunu yöneten sınıf</h2>

<p>Aşağıdaki sınıf, tamsayı dizisini kurulum sırasında edinir ve yıkım sırasında bırakır. Ham işaretçi burada mekanizmayı görünür kılmak için kullanılıyor:</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;cstddef&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;memory&gt;</span><span class="cp">
</span>
<span class="k">class</span> <span class="nc">Tampon</span> <span class="p">{</span>
    <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="n">boyut_</span><span class="p">;</span>
    <span class="kt">int</span><span class="o">*</span> <span class="n">veri_</span><span class="p">;</span>

<span class="nl">public:</span>
    <span class="n">Tampon</span><span class="p">()</span> <span class="o">:</span> <span class="n">Tampon</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span> <span class="p">{}</span>

    <span class="k">explicit</span> <span class="nf">Tampon</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="n">boyut</span><span class="p">)</span>
        <span class="o">:</span> <span class="n">boyut_</span><span class="p">(</span><span class="n">boyut</span><span class="p">),</span> <span class="n">veri_</span><span class="p">(</span><span class="k">new</span> <span class="kt">int</span><span class="p">[</span><span class="n">boyut</span><span class="p">]{})</span> <span class="p">{}</span>

    <span class="n">Tampon</span><span class="p">(</span><span class="k">const</span> <span class="n">Tampon</span><span class="o">&amp;</span><span class="p">)</span> <span class="o">=</span> <span class="k">delete</span><span class="p">;</span>
    <span class="n">Tampon</span><span class="o">&amp;</span> <span class="k">operator</span><span class="o">=</span><span class="p">(</span><span class="k">const</span> <span class="n">Tampon</span><span class="o">&amp;</span><span class="p">)</span> <span class="o">=</span> <span class="k">delete</span><span class="p">;</span>

    <span class="o">~</span><span class="n">Tampon</span><span class="p">()</span> <span class="p">{</span>
        <span class="k">delete</span><span class="p">[]</span> <span class="n">veri_</span><span class="p">;</span>
    <span class="p">}</span>

    <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="n">boyut</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span> <span class="p">{</span>
        <span class="k">return</span> <span class="n">boyut_</span><span class="p">;</span>
    <span class="p">}</span>
<span class="p">};</span>

<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
    <span class="n">Tampon</span> <span class="n">yerel</span><span class="p">;</span>
    <span class="k">auto</span> <span class="n">dinamik</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">make_unique</span><span class="o">&lt;</span><span class="n">Tampon</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">8</span><span class="p">);</span>
    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">yerel</span><span class="p">.</span><span class="n">boyut</span><span class="p">()</span> <span class="o">&lt;&lt;</span> <span class="sc">'\n'</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">Tampon()</code> dört elemanlık kuruluma yönlendirir. <code class="language-plaintext highlighter-rouge">explicit</code>, bir sayının istemeden <code class="language-plaintext highlighter-rouge">Tampon</code> nesnesine dönüştürülmesini engeller. Dizinin sonundaki <code class="language-plaintext highlighter-rouge">{}</code>, tamsayıları sıfırla başlatır. <code class="language-plaintext highlighter-rouge">delete[]</code>, <code class="language-plaintext highlighter-rouge">new[]</code> ile edinilen diziyi doğru biçimde bırakır.</p>

<p>Kopyalama işlemleri özellikle kapatıldı: Varsayılan kopyalama iki nesnenin aynı adresi sahiplenmesine, ardından aynı belleğin iki kez bırakılmasına yol açabilirdi. Bu sınıf taşıma işlemleri de tanımlamadığından, sahipliğin nesneler arasında aktarılmasını desteklemez.</p>

<h2 id="yaşam-süresi-ve-raii">Yaşam süresi ve RAII</h2>

<p><code class="language-plaintext highlighter-rouge">yerel</code>, blok sona erdiğinde otomatik olarak yıkılır. <code class="language-plaintext highlighter-rouge">dinamik</code> ise bir <code class="language-plaintext highlighter-rouge">std::unique_ptr</code> tarafından sahiplenilir; akıllı işaretçi yıkılınca yönettiği <code class="language-plaintext highlighter-rouge">Tampon</code> da yıkılır ve depolama alanı bırakılır. Bu örnekte önce <code class="language-plaintext highlighter-rouge">dinamik</code>, ardından <code class="language-plaintext highlighter-rouge">yerel</code> temizlenir.</p>

<table>
  <thead>
    <tr>
      <th>Kullanım</th>
      <th>Temizlik sorumluluğu</th>
      <th>Risk</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Yerel nesne</td>
      <td>Otomatik kapsam yönetimi</td>
      <td>Genellikle düşük</td>
    </tr>
    <tr>
      <td>Ham <code class="language-plaintext highlighter-rouge">new</code></td>
      <td>Programcı, uygun <code class="language-plaintext highlighter-rouge">delete</code> ile</td>
      <td>Unutulan temizlik</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">std::unique_ptr</code></td>
      <td>Sahiplik nesnesi</td>
      <td>Genellikle düşük</td>
    </tr>
  </tbody>
</table>

<p>Bu yaklaşımın adı <strong>RAII</strong>: Kaynak edinimini nesne kurulmasına, kaynak bırakmayı nesne yıkımına bağlamak. Kaynak yalnızca bellek değildir; dosya, kilit veya bağlantı da olabilir.</p>

<p>Basit bir kaynak sayacıyla hedefi ifade edebiliriz:</p>

\[R_{son} = R_{ilk} + R_{edinilen} - R_{birakilan}\]

<p>Başlangıçta sahip olunan kaynak sayısı sıfırsa, nesnenin işi bittiğinde sonuç yine sıfır olmalıdır. Atölyeden çıkarken masada unutulan tornavida istemiyoruz!</p>

<h2 id="i̇stisnalar-ve-güvenli-tasarım">İstisnalar ve güvenli tasarım</h2>

<p>Yapıcı istisna fırlatırsa nesne tamamen kurulmuş sayılmaz; o nesnenin yıkıcısı çağrılmaz. Ancak başarıyla kurulmuş üyeler ve taban sınıflar temizlenir. Bu yüzden kaynakları akıllı işaretçi veya standart kapsayıcı üyelerde tutmak, yarım kalan kurulumlarda da güvenlik sağlar.</p>

<p>Yıkıcılardan istisna kaçırmaktan kaçının: Özellikle başka bir istisna nedeniyle yığın çözülürken bu durum <code class="language-plaintext highlighter-rouge">std::terminate</code> ile programı sonlandırabilir. Taban sınıf işaretçisi üzerinden türetilmiş nesneleri silecekseniz, taban yıkıcısını <code class="language-plaintext highlighter-rouge">virtual</code> yapın.</p>

<p>Gerçek projelerde bu tampon için çoğunlukla <code class="language-plaintext highlighter-rouge">std::vector&lt;int&gt;</code> tercih edilir. Böylece özel yıkıcı ve sahiplik kodu yazmadan <strong>Rule of Zero</strong> yaklaşımına ulaşılır. En iyi temizlik kodu, çoğu zaman güvenilir bir üyeye devrettiğiniz koddur.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="c++" /><category term="constructors" /><category term="destructors" /><category term="bellek yönetimi" /><category term="raii" /><category term="nesne yaşam döngüsü" /><summary type="html"><![CDATA[C++ nesnelerini küçük bir atölyenin çalışanları gibi düşünün: İşe başlarken ekipmanlarını hazırlamaları, ayrılırken de masalarını toplamaları gerekir. Yapıcılar nesneyi kullanıma hazırlar; yıkıcılar ise nesnenin sorumluluğundaki kaynakların bırakılmasını sağlar. Bu ikiliyi anlamak, yalnızca bellek sızıntılarını önlemek değil, güvenilir sınıflar tasarlamak için de temel bir adımdır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/c-yapicilar-ve-65.png" /><media:content medium="image" url="https://program.sonsuz.us/img/c-yapicilar-ve-65.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">İlaç Keşfinde Moleküler Simülasyon: Proteinlerle Dijital Prova</title><link href="https://program.sonsuz.us/posts/ilac-kesfinde-molekuler-simulasyon-proteinlerle-dijital-prova/" rel="alternate" type="text/html" title="İlaç Keşfinde Moleküler Simülasyon: Proteinlerle Dijital Prova" /><published>2026-10-30T00:00:00+00:00</published><updated>2026-10-30T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/ilac-kesfinde-molekuler-simulasyon-proteinlerle-dijital-prova</id><content type="html" xml:base="https://program.sonsuz.us/posts/ilac-kesfinde-molekuler-simulasyon-proteinlerle-dijital-prova/"><![CDATA[<p>Bir ilaç adayını laboratuvarda sınamadan önce, hedef proteinle bilgisayar ortamında buluşturabilir miyiz? Evet; üstelik yalnızca birbirlerine yakışıp yakışmadıklarına değil, nasıl hareket ettiklerine de bakabiliriz. Moleküler simülasyon, ilaç keşfinin dijital prova sahnesidir. Ancak alkış alan bir prova, gerçek gösterinin mutlaka başarılı olacağı anlamına gelmez.</p>

<p><img src="/img/ilac-kesfinde-molekuler-40.svg" alt="ilac-kesfinde-molekuler-40" /></p>

<p>``</p>

<h2 id="önce-hedefi-ve-molekülü-tanıyalım">Önce hedefi ve molekülü tanıyalım</h2>

<p>İlaç adayının bağlandığı moleküle <strong>hedef</strong>, aday küçük moleküle ise çoğunlukla <strong>ligand</strong> denir. Protein üzerindeki bağlanma cebi; geometrisi, elektrik yükleri ve suyla ilişkisi nedeniyle bazı ligandları diğerlerinden daha iyi karşılar. Buradaki mesele yalnızca anahtarın kilide sığması değildir: Kilit esner, anahtar döner ve aradaki su molekülleri pazarlığa katılır.</p>

<p>Önce deneysel veya tahmini bir protein yapısı hazırlanır. Eksik atomlar, protonlanma durumları, önemli su molekülleri ve gerekiyorsa metal iyonları değerlendirilir. Ligandın üç boyutlu geometrisi ve yükleri hazırlanır. Yanlış protonlanma, hesaplamanın sonucunu değiştirebilir; bilgisayar, yanlış hazırlanmış girdiyi büyük bir özgüvenle işlemekten çekinmez.</p>

<h2 id="i̇lk-eleme-moleküler-kenetlenme">İlk eleme: Moleküler kenetlenme</h2>

<p><strong>Moleküler kenetlenme</strong>, yani docking, ligandın bağlanma cebindeki olası yerleşimlerini araştırır. Arama algoritması konum, yönelim ve dönebilen bağları değiştirir; puanlama fonksiyonu ise temasları değerlendirir. Hidrojen bağları, hidrofobik etkileşimler ve sterik çakışmalar bu değerlendirmede rol oynar.</p>

<p>Docking, binlerce adayı hızla daraltabilir. Fakat verdiği skor, ölçülmüş bağlanma afinitesi veya kesin bir serbest enerji değildir. Farklı yazılımların skorlarını doğrudan aynı terazide tartmak da güvenilir olmaz.</p>

<table>
  <thead>
    <tr>
      <th>Yöntem</th>
      <th>Temel soru</th>
      <th>Başlıca sınır</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Docking</td>
      <td>Ligand nereye yerleşebilir?</td>
      <td>Esneklik ve çözücü yaklaşık ele alınır</td>
    </tr>
    <tr>
      <td>Moleküler dinamik</td>
      <td>Kompleks zamanla nasıl davranır?</td>
      <td>Örnekleme pahalıdır</td>
    </tr>
    <tr>
      <td>Serbest enerji hesabı</td>
      <td>Bağlanma ne kadar elverişlidir?</td>
      <td>Yakınsama dikkatle sınanmalıdır</td>
    </tr>
    <tr>
      <td>Deney</td>
      <td>Gerçekte ne oluyor?</td>
      <td>Zaman ve kaynak gerektirir</td>
    </tr>
  </tbody>
</table>

<h2 id="hareket-başlasın-moleküler-dinamik">Hareket başlasın: Moleküler dinamik</h2>

<p>Moleküler dinamikte atomlar, bir <strong>kuvvet alanının</strong> tanımladığı potansiyel enerjiye göre hareket eder. Bağların gerilmesi, açıların değişmesi, elektrostatik ve van der Waals etkileşimleri birlikte hesaplanır. Kuvvet, enerjinin konuma göre değişiminden elde edilir:</p>

\[\mathbf{F}_i=-\nabla_i U\]

<p>Newton denklemleri küçük zaman adımlarıyla çözülür. Böylece tek bir görüntü yerine bir yörünge oluşur. Protein nefes alır gibi kıpırdar; ligand bazı temasları kaybederken yenilerini kurabilir. Termostat, sistemin sıcaklığını hedef değer çevresinde tutmaya yardımcı olur.</p>

<p>Aşağıdaki OpenMM örneği, önceden hazırlanmış, su ve iyon içeren periyodik bir AMBER kompleksini çalıştırır. Protein ve ligandın uyumlu kuvvet alanı parametreleri dosyalarda bulunmalıdır; kod parametre üretmez.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">openmm</span> <span class="kn">import</span> <span class="n">LangevinMiddleIntegrator</span>
<span class="kn">from</span> <span class="n">openmm.app</span> <span class="kn">import</span> <span class="p">(</span>
    <span class="n">AmberPrmtopFile</span><span class="p">,</span> <span class="n">AmberInpcrdFile</span><span class="p">,</span> <span class="n">Simulation</span><span class="p">,</span>
    <span class="n">PME</span><span class="p">,</span> <span class="n">HBonds</span><span class="p">,</span> <span class="n">DCDReporter</span>
<span class="p">)</span>
<span class="kn">from</span> <span class="n">openmm.unit</span> <span class="kn">import</span> <span class="n">kelvin</span><span class="p">,</span> <span class="n">picosecond</span><span class="p">,</span> <span class="n">nanometer</span>

<span class="n">prmtop</span> <span class="o">=</span> <span class="nc">AmberPrmtopFile</span><span class="p">(</span><span class="sh">"</span><span class="s">complex.prmtop</span><span class="sh">"</span><span class="p">)</span>
<span class="n">inpcrd</span> <span class="o">=</span> <span class="nc">AmberInpcrdFile</span><span class="p">(</span><span class="sh">"</span><span class="s">complex.inpcrd</span><span class="sh">"</span><span class="p">)</span>
<span class="n">system</span> <span class="o">=</span> <span class="n">prmtop</span><span class="p">.</span><span class="nf">createSystem</span><span class="p">(</span>
    <span class="n">nonbondedMethod</span><span class="o">=</span><span class="n">PME</span><span class="p">,</span>
    <span class="n">nonbondedCutoff</span><span class="o">=</span><span class="mf">1.0</span> <span class="o">*</span> <span class="n">nanometer</span><span class="p">,</span>
    <span class="n">constraints</span><span class="o">=</span><span class="n">HBonds</span>
<span class="p">)</span>
<span class="n">integrator</span> <span class="o">=</span> <span class="nc">LangevinMiddleIntegrator</span><span class="p">(</span>
    <span class="mi">300</span> <span class="o">*</span> <span class="n">kelvin</span><span class="p">,</span> <span class="mi">1</span> <span class="o">/</span> <span class="n">picosecond</span><span class="p">,</span> <span class="mf">0.002</span> <span class="o">*</span> <span class="n">picosecond</span>
<span class="p">)</span>
<span class="n">sim</span> <span class="o">=</span> <span class="nc">Simulation</span><span class="p">(</span><span class="n">prmtop</span><span class="p">.</span><span class="n">topology</span><span class="p">,</span> <span class="n">system</span><span class="p">,</span> <span class="n">integrator</span><span class="p">)</span>
<span class="n">sim</span><span class="p">.</span><span class="n">context</span><span class="p">.</span><span class="nf">setPositions</span><span class="p">(</span><span class="n">inpcrd</span><span class="p">.</span><span class="n">positions</span><span class="p">)</span>
<span class="n">sim</span><span class="p">.</span><span class="n">context</span><span class="p">.</span><span class="nf">setPeriodicBoxVectors</span><span class="p">(</span><span class="o">*</span><span class="n">inpcrd</span><span class="p">.</span><span class="n">boxVectors</span><span class="p">)</span>
<span class="n">sim</span><span class="p">.</span><span class="nf">minimizeEnergy</span><span class="p">()</span>
<span class="n">sim</span><span class="p">.</span><span class="n">context</span><span class="p">.</span><span class="nf">setVelocitiesToTemperature</span><span class="p">(</span><span class="mi">300</span> <span class="o">*</span> <span class="n">kelvin</span><span class="p">)</span>
<span class="n">sim</span><span class="p">.</span><span class="nf">step</span><span class="p">(</span><span class="mi">10000</span><span class="p">)</span>
<span class="n">sim</span><span class="p">.</span><span class="n">reporters</span><span class="p">.</span><span class="nf">append</span><span class="p">(</span><span class="nc">DCDReporter</span><span class="p">(</span><span class="sh">"</span><span class="s">trajectory.dcd</span><span class="sh">"</span><span class="p">,</span> <span class="mi">1000</span><span class="p">))</span>
<span class="n">sim</span><span class="p">.</span><span class="nf">step</span><span class="p">(</span><span class="mi">250000</span><span class="p">)</span>
</code></pre></div></div>

<p>Enerji minimizasyonu kötü temasları azaltır; ardından kısa bir ön dengeleme yapılır. Son bölüm, iki femtosaniyelik adımlarla <strong>0,5 nanosaniyelik</strong> yörünge üretir. Bu yalnızca teknik bir başlangıçtır; güvenilir analiz için daha kapsamlı dengeleme, daha uzun koşular ve bağımsız tekrarlar gerekir.</p>

<h2 id="yörüngeden-karar-çıkarmak">Yörüngeden karar çıkarmak</h2>

<p>Ligandın yer değiştirmesi, hidrojen bağlarının devamlılığı ve cebin şekil değişimleri incelenebilir. Ancak düşük RMSD, tek başına güçlü bağlanmanın kanıtı değildir. Ayrıca proteinin genel hareketini ayırmadan hesaplanan ligand RMSD değerleri yanıltıcı olabilir.</p>

<p>Bağlanma termodinamiği için standart serbest enerji önemlidir:</p>

\[\Delta G^\circ=RT\ln(K_d/C^\circ)\]

<p>Burada $K_d$ ayrışma sabiti, $C^\circ$ standart derişimdir. Daha küçük $K_d$, daha elverişli bağlanmaya karşılık gelir. Benzer adayların farklarını inceleyen FEP gibi yöntemler güçlüdür; fakat yeterli örnekleme ve belirsizlik analizi şarttır.</p>

<h2 id="son-söz-laboratuvarın">Son söz laboratuvarın</h2>

<p>İyi bağlanmak, mutlaka iyi ilaç olmak değildir. Adayın proteini gerçekten baskılayıp baskılamadığı, başka hedeflere bağlanması, hücreye erişmesi, metabolizması ve toksisitesi ayrıca değerlendirilir. Simülasyon sonuçları biyokimyasal, hücresel ve gerektiğinde ileri deneylerle doğrulanmalıdır.</p>

<p>En verimli yaklaşım, docking ile elemek, dinamikle davranışı incelemek ve uygun adaylarda serbest enerji hesaplarına ilerlemektir. Parametreleri, yazılım sürümlerini ve tekrar koşullarını kaydetmek de sonuçları yeniden üretilebilir kılar. Bilgisayar burada sihirli ilaç makinesi değil; yanlış adaylara harcanan emeği azaltan, doğru deneyleri tasarlamaya yardımcı olan meraklı bir araştırma ortağıdır.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="ilaç keşfi" /><category term="moleküler simülasyon" /><category term="moleküler dinamik" /><category term="biyoinformatik" /><category term="python" /><category term="hesaplamalı kimya" /><summary type="html"><![CDATA[Bir ilaç adayını laboratuvarda sınamadan önce, hedef proteinle bilgisayar ortamında buluşturabilir miyiz? Evet; üstelik yalnızca birbirlerine yakışıp yakışmadıklarına değil, nasıl hareket ettiklerine de bakabiliriz. Moleküler simülasyon, ilaç keşfinin dijital prova sahnesidir. Ancak alkış alan bir prova, gerçek gösterinin mutlaka başarılı olacağı anlamına gelmez.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/ilac-kesfinde-molekuler-40.png" /><media:content medium="image" url="https://program.sonsuz.us/img/ilac-kesfinde-molekuler-40.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Markowitz Modeliyle Portföy Optimizasyonu: Risk ve Getiriyi Kodla Dengelemek</title><link href="https://program.sonsuz.us/posts/markowitz-modeliyle-portfoy-optimizasyonu-risk-ve-getiriyi-kodla-dengelemek/" rel="alternate" type="text/html" title="Markowitz Modeliyle Portföy Optimizasyonu: Risk ve Getiriyi Kodla Dengelemek" /><published>2026-10-30T00:00:00+00:00</published><updated>2026-10-30T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/markowitz-modeliyle-portfoy-optimizasyonu-risk-ve-getiriyi-kodla-dengelemek</id><content type="html" xml:base="https://program.sonsuz.us/posts/markowitz-modeliyle-portfoy-optimizasyonu-risk-ve-getiriyi-kodla-dengelemek/"><![CDATA[<p>Yatırım dünyasında herkes yüksek getiri ister; fakat kimse geceleri portföyünün eridiğini düşünerek uyanmak istemez. Markowitz modeli, bu iki isteği matematiksel bir çerçevede buluşturur. Modelin temel sorusu şudur: Belirli bir getiri düzeyine ulaşırken riski nasıl en aza indirebiliriz? Gelin modern portföy teorisinin kalbine inip bu problemi Python ile çözelim.</p>

<p>``</p>

<h2 id="markowitz-modelinin-temel-fikri">Markowitz modelinin temel fikri</h2>

<p>Harry Markowitz tarafından geliştirilen modern portföy teorisi, yatırım araçlarını yalnızca tek tek değerlendirmez. Varlıkların birbirleriyle nasıl hareket ettiğini de hesaba katar. Çünkü iki riskli varlık, fiyatları farklı yönlerde hareket ediyorsa birlikte daha dengeli bir portföy oluşturabilir.</p>

<p>Bir portföyde $n$ adet varlık bulunduğunu düşünelim. Her varlığa ayrılan oranı $w_i$ ile gösterirsek ağırlıkların toplamı genellikle şöyle sınırlandırılır:</p>

\[\sum_{i=1}^{n} w_i = 1\]

<p>Açığa satışa izin verilmiyorsa ayrıca $w_i \geq 0$ koşulu uygulanır. Portföyün beklenen getirisi:</p>

\[E(R_p) = \mathbf{w}^T\boldsymbol{\mu}\]

<p>Portföy riski, yani varyansı ise kovaryans matrisi kullanılarak hesaplanır:</p>

\[\sigma_p^2 = \mathbf{w}^T\Sigma\mathbf{w}\]

<p>Burada $\boldsymbol{\mu}$ beklenen getiriler vektörü, $\Sigma$ kovaryans matrisi ve $\mathbf{w}$ portföy ağırlıklarıdır. Standart sapma için varyansın karekökü alınır.</p>

<table>
  <thead>
    <tr>
      <th>Kavram</th>
      <th>Ne anlatır?</th>
      <th>Portföydeki etkisi</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Beklenen getiri</td>
      <td>Geçmiş veya tahmini ortalama kazanç</td>
      <td>Yükseldikçe kazanç potansiyeli artar</td>
    </tr>
    <tr>
      <td>Varyans</td>
      <td>Getirilerin ortalamadan sapması</td>
      <td>Yüksekse belirsizlik büyür</td>
    </tr>
    <tr>
      <td>Kovaryans</td>
      <td>İki varlığın birlikte hareketi</td>
      <td>Düşük veya negatifse çeşitlendirme sağlar</td>
    </tr>
    <tr>
      <td>Ağırlık</td>
      <td>Varlığa ayrılan sermaye oranı</td>
      <td>Risk-getiri profilini belirler</td>
    </tr>
  </tbody>
</table>

<h2 id="python-ile-minimum-varyanslı-portföy">Python ile minimum varyanslı portföy</h2>

<p>Aşağıdaki örnekte yıllık beklenen getirileri ve kovaryans matrisini doğrudan tanımlıyoruz. Gerçek projelerde bunlar günlük fiyat verilerinden hesaplanabilir.</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="kn">from</span> <span class="n">scipy.optimize</span> <span class="kn">import</span> <span class="n">minimize</span>

<span class="n">returns</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">array</span><span class="p">([</span><span class="mf">0.12</span><span class="p">,</span> <span class="mf">0.18</span><span class="p">,</span> <span class="mf">0.10</span><span class="p">,</span> <span class="mf">0.15</span><span class="p">])</span>

<span class="n">covariance</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">array</span><span class="p">([</span>
    <span class="p">[</span><span class="mf">0.040</span><span class="p">,</span> <span class="mf">0.010</span><span class="p">,</span> <span class="mf">0.008</span><span class="p">,</span> <span class="mf">0.012</span><span class="p">],</span>
    <span class="p">[</span><span class="mf">0.010</span><span class="p">,</span> <span class="mf">0.090</span><span class="p">,</span> <span class="mf">0.006</span><span class="p">,</span> <span class="mf">0.020</span><span class="p">],</span>
    <span class="p">[</span><span class="mf">0.008</span><span class="p">,</span> <span class="mf">0.006</span><span class="p">,</span> <span class="mf">0.025</span><span class="p">,</span> <span class="mf">0.009</span><span class="p">],</span>
    <span class="p">[</span><span class="mf">0.012</span><span class="p">,</span> <span class="mf">0.020</span><span class="p">,</span> <span class="mf">0.009</span><span class="p">,</span> <span class="mf">0.060</span><span class="p">]</span>
<span class="p">])</span>

<span class="n">asset_count</span> <span class="o">=</span> <span class="nf">len</span><span class="p">(</span><span class="n">returns</span><span class="p">)</span>
<span class="n">initial_weights</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="n">asset_count</span><span class="p">)</span> <span class="o">/</span> <span class="n">asset_count</span>

<span class="k">def</span> <span class="nf">portfolio_variance</span><span class="p">(</span><span class="n">weights</span><span class="p">):</span>
    <span class="k">return</span> <span class="n">weights</span><span class="p">.</span><span class="n">T</span> <span class="o">@</span> <span class="n">covariance</span> <span class="o">@</span> <span class="n">weights</span>

<span class="n">constraints</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">{</span><span class="sh">'</span><span class="s">type</span><span class="sh">'</span><span class="p">:</span> <span class="sh">'</span><span class="s">eq</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">fun</span><span class="sh">'</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">w</span><span class="p">:</span> <span class="n">np</span><span class="p">.</span><span class="nf">sum</span><span class="p">(</span><span class="n">w</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">}</span>
<span class="p">]</span>

<span class="n">bounds</span> <span class="o">=</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="o">*</span> <span class="n">asset_count</span>

<span class="n">result</span> <span class="o">=</span> <span class="nf">minimize</span><span class="p">(</span>
    <span class="n">portfolio_variance</span><span class="p">,</span>
    <span class="n">initial_weights</span><span class="p">,</span>
    <span class="n">method</span><span class="o">=</span><span class="sh">'</span><span class="s">SLSQP</span><span class="sh">'</span><span class="p">,</span>
    <span class="n">bounds</span><span class="o">=</span><span class="n">bounds</span><span class="p">,</span>
    <span class="n">constraints</span><span class="o">=</span><span class="n">constraints</span>
<span class="p">)</span>

<span class="n">weights</span> <span class="o">=</span> <span class="n">result</span><span class="p">.</span><span class="n">x</span>
<span class="n">portfolio_return</span> <span class="o">=</span> <span class="n">weights</span> <span class="o">@</span> <span class="n">returns</span>
<span class="n">portfolio_risk</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">sqrt</span><span class="p">(</span><span class="nf">portfolio_variance</span><span class="p">(</span><span class="n">weights</span><span class="p">))</span>

<span class="nf">print</span><span class="p">(</span><span class="sh">'</span><span class="s">Ağırlıklar:</span><span class="sh">'</span><span class="p">,</span> <span class="n">np</span><span class="p">.</span><span class="nf">round</span><span class="p">(</span><span class="n">weights</span><span class="p">,</span> <span class="mi">3</span><span class="p">))</span>
<span class="nf">print</span><span class="p">(</span><span class="sh">'</span><span class="s">Beklenen getiri:</span><span class="sh">'</span><span class="p">,</span> <span class="nf">round</span><span class="p">(</span><span class="n">portfolio_return</span><span class="p">,</span> <span class="mi">3</span><span class="p">))</span>
<span class="nf">print</span><span class="p">(</span><span class="sh">'</span><span class="s">Risk:</span><span class="sh">'</span><span class="p">,</span> <span class="nf">round</span><span class="p">(</span><span class="n">portfolio_risk</span><span class="p">,</span> <span class="mi">3</span><span class="p">))</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">portfolio_variance</code> fonksiyonu optimizasyonun küçültmeye çalıştığı hedefi temsil eder. <code class="language-plaintext highlighter-rouge">constraints</code>, sermayenin tamamının kullanılmasını; <code class="language-plaintext highlighter-rouge">bounds</code> ise hiçbir varlığın negatif ağırlık almamasını sağlar. SLSQP algoritması, eşitlik ve sınır koşulları içeren bu tür problemlerde oldukça kullanışlıdır.</p>

<h2 id="hedef-getiri-ve-etkin-sınır">Hedef getiri ve etkin sınır</h2>

<p>Minimum varyanslı portföy güvenlidir; ancak beklenen getirisi yatırımcı için yetersiz kalabilir. Örneğin en az %14 getiri istiyorsak ikinci bir koşul ekleyebiliriz:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">target_return</span> <span class="o">=</span> <span class="mf">0.14</span>
<span class="n">constraints</span><span class="p">.</span><span class="nf">append</span><span class="p">({</span>
    <span class="sh">'</span><span class="s">type</span><span class="sh">'</span><span class="p">:</span> <span class="sh">'</span><span class="s">eq</span><span class="sh">'</span><span class="p">,</span>
    <span class="sh">'</span><span class="s">fun</span><span class="sh">'</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">w</span><span class="p">:</span> <span class="n">w</span> <span class="o">@</span> <span class="n">returns</span> <span class="o">-</span> <span class="n">target_return</span>
<span class="p">})</span>

<span class="n">result</span> <span class="o">=</span> <span class="nf">minimize</span><span class="p">(</span>
    <span class="n">portfolio_variance</span><span class="p">,</span>
    <span class="n">initial_weights</span><span class="p">,</span>
    <span class="n">method</span><span class="o">=</span><span class="sh">'</span><span class="s">SLSQP</span><span class="sh">'</span><span class="p">,</span>
    <span class="n">bounds</span><span class="o">=</span><span class="n">bounds</span><span class="p">,</span>
    <span class="n">constraints</span><span class="o">=</span><span class="n">constraints</span>
<span class="p">)</span>
</code></pre></div></div>

<p>Farklı hedef getiriler için optimizasyonu tekrarladığımızda <strong>etkin sınır</strong> ortaya çıkar. Bu eğri üzerindeki her portföy, aynı getiri seviyesindeki alternatiflerden daha düşük riske sahiptir.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Amaç</th>
      <th>Uygun yatırımcı profili</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Minimum varyans</td>
      <td>Riski mümkün olduğunca azaltmak</td>
      <td>Temkinli</td>
    </tr>
    <tr>
      <td>Hedef getirili optimizasyon</td>
      <td>Belirli getiride en düşük riski bulmak</td>
      <td>Dengeli</td>
    </tr>
    <tr>
      <td>Maksimum Sharpe oranı</td>
      <td>Risk başına getiriyi artırmak</td>
      <td>Performans odaklı</td>
    </tr>
  </tbody>
</table>

<p>Markowitz modeli güçlüdür ama kusursuz değildir: geçmiş getirilerin geleceği temsil ettiği, korelasyonların sabit kaldığı ve işlem maliyetlerinin önemsiz olduğu varsayılır. Bu nedenle sonuçları kesin reçete değil, karar destek aracı olarak görmek gerekir. Sağlam veri, periyodik yeniden dengeleme ve ağırlık sınırları eklendiğinde model, portföyünüz için matematik bilen bir yardımcı pilota dönüşebilir.</p>

<p><img src="/img/markowitz-modeliyle-portfoy-49.svg" alt="markowitz-modeliyle-portfoy-49" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Program" /><category term="portföy optimizasyonu" /><category term="markowitz modeli" /><category term="python" /><category term="finans" /><category term="risk yönetimi" /><category term="scipy" /><summary type="html"><![CDATA[Yatırım dünyasında herkes yüksek getiri ister; fakat kimse geceleri portföyünün eridiğini düşünerek uyanmak istemez. Markowitz modeli, bu iki isteği matematiksel bir çerçevede buluşturur. Modelin temel sorusu şudur: Belirli bir getiri düzeyine ulaşırken riski nasıl en aza indirebiliriz? Gelin modern portföy teorisinin kalbine inip bu problemi Python ile çözelim.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/markowitz-modeliyle-portfoy-49.png" /><media:content medium="image" url="https://program.sonsuz.us/img/markowitz-modeliyle-portfoy-49.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Mikroskop Görüntülerinde Kanser Hücrelerini Bilgisayarla Tespit Etmek</title><link href="https://program.sonsuz.us/posts/mikroskop-goruntulerinde-kanser-hucrelerini-bilgisayarla-tespit-etmek/" rel="alternate" type="text/html" title="Mikroskop Görüntülerinde Kanser Hücrelerini Bilgisayarla Tespit Etmek" /><published>2026-10-30T00:00:00+00:00</published><updated>2026-10-30T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/mikroskop-goruntulerinde-kanser-hucrelerini-bilgisayarla-tespit-etmek</id><content type="html" xml:base="https://program.sonsuz.us/posts/mikroskop-goruntulerinde-kanser-hucrelerini-bilgisayarla-tespit-etmek/"><![CDATA[<p>Mikroskop altında yüzlerce hücreyi tek tek incelemek, samanlıkta iğne aramaya benzeyebilir. Bilgisayarlı görüntü analizi ise şüpheli hücreleri otomatik biçimde işaretleyerek araştırmacılara ve patologlara yardımcı olur. Gelin, bir mikroskop görüntüsünün piksellerden hücre adaylarına, oradan da sınıflandırma sonucuna uzanan yolculuğunu inceleyelim.</p>

<p><img src="/img/mikroskop-goruntulerinde-kanser-62.svg" alt="mikroskop-goruntulerinde-kanser-62" /></p>

<p>``</p>

<h2 id="problem-aslında-nedir">Problem aslında nedir?</h2>

<p>Kanser hücreleri sağlıklı hücrelerden çekirdek büyüklüğü, şekil düzensizliği, kromatin yoğunluğu ve hücre bölünme hızı gibi özelliklerle ayrılabilir. Ancak boyama yöntemi, mikroskop ışığı ve doku türü değiştikçe görüntünün görünümü de değişir. Dolayısıyla bilgisayar yalnızca “koyu renkli olan kanserdir” gibi basit bir kuralla güvenilir sonuç üretemez.</p>

<p>Tipik bir sistem dört aşamadan oluşur:</p>

<ol>
  <li>Görüntünün renk ve gürültü bakımından düzeltilmesi</li>
  <li>Hücre veya çekirdeklerin bölütlenmesi</li>
  <li>Her hücreden açıklayıcı özelliklerin çıkarılması</li>
  <li>Hücrenin normal ya da anormal olarak sınıflandırılması</li>
</ol>

<table>
  <thead>
    <tr>
      <th>Aşama</th>
      <th>Amaç</th>
      <th>Örnek yöntem</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Ön işleme</td>
      <td>Görüntü farklılıklarını azaltmak</td>
      <td>Gaussian filtre, renk normalizasyonu</td>
    </tr>
    <tr>
      <td>Bölütleme</td>
      <td>Hücre sınırlarını bulmak</td>
      <td>Otsu eşikleme, watershed, U-Net</td>
    </tr>
    <tr>
      <td>Özellik çıkarımı</td>
      <td>Hücreyi sayılarla tanımlamak</td>
      <td>Alan, çevre, doku, yuvarlaklık</td>
    </tr>
    <tr>
      <td>Sınıflandırma</td>
      <td>Anormallik olasılığı üretmek</td>
      <td>SVM, rastgele orman, CNN</td>
    </tr>
  </tbody>
</table>

<h2 id="hücreyi-matematikle-anlatmak">Hücreyi matematikle anlatmak</h2>

<p>Bir hücrenin alanı $A$, çevresi $P$ ile gösterilsin. Şeklin ne kadar dairesel olduğunu ölçmek için şu değer kullanılabilir:</p>

\[C = \frac{4\pi A}{P^2}\]

<p>Kusursuz bir dairede $C$ değeri 1’e yaklaşır. Girintili çıkıntılı hücrelerde ise küçülür. Bunun yanında çekirdeğin ortalama parlaklığı, renk dağılımı ve komşularına göre büyüklüğü de modele verilebilir.</p>

<p>Sınıflandırıcı çoğu zaman $p(y=1\mid x)$, yani özellikleri $x$ olan hücrenin anormal olma olasılığını hesaplar. Olasılık belirlenen eşiği aşarsa hücre şüpheli kabul edilir. Eşiği düşürmek daha fazla şüpheli hücre yakalar; fakat yanlış alarm sayısını da artırır.</p>

<h2 id="basit-bir-prototip">Basit bir prototip</h2>

<p>Aşağıdaki Python örneği, gri tonlamalı görüntüde koyu çekirdekleri ayırır, küçük gürültüleri temizler ve büyük hücre adaylarını işaretler. Bu kod klinik tanı sistemi değil, temel görüntü işleme mantığını gösteren bir başlangıçtı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="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">hucreler.png</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="c1"># Gürültüyü azaltarak eşikleme sonucunu daha kararlı yapar.
</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"># Otsu yöntemi uygun eşik değerini görüntüden otomatik hesaplar.
</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="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="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="n">area</span> <span class="o">&gt;</span> <span class="mi">250</span><span class="p">:</span>  <span class="c1"># Örnek amaçlı şüpheli büyüklük sınırı
</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">cv2</span><span class="p">.</span><span class="nf">boundingRect</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">rectangle</span><span class="p">(</span><span class="n">image</span><span class="p">,</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="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="n">w</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="n">h</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">),</span> <span class="mi">2</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">isaretli_hucreler.png</span><span class="sh">"</span><span class="p">,</span> <span class="n">image</span><span class="p">)</span>
</code></pre></div></div>

<p>Gerçek dokularda hücreler üst üste binebilir. Böyle durumlarda watershed algoritması veya piksel düzeyinde öğrenen U-Net gibi derin öğrenme modelleri daha başarılıdır. Yine de derin modeller daha fazla etiketli veri, güçlü donanım ve dikkatli doğrulama gerektirir.</p>

<h2 id="başarıyı-doğru-ölçmek">Başarıyı doğru ölçmek</h2>

<p>Kanser taramasında yalnızca doğruluk değerine bakmak yanıltıcıdır. Bin hücrenin yalnızca onu anormalse, her hücreye “normal” diyen model yüzde 99 doğruluk elde eder ama hiçbir vakayı bulamaz.</p>

<table>
  <thead>
    <tr>
      <th>Metrik</th>
      <th>Yanıtladığı soru</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Duyarlılık</td>
      <td>Anormal hücrelerin kaçını yakaladık?</td>
    </tr>
    <tr>
      <td>Özgüllük</td>
      <td>Normal hücrelerin kaçını doğru eledik?</td>
    </tr>
    <tr>
      <td>Kesinlik</td>
      <td>İşaretlenen hücrelerin kaçı gerçekten anormal?</td>
    </tr>
    <tr>
      <td>F1 skoru</td>
      <td>Duyarlılık ve kesinlik dengeli mi?</td>
    </tr>
  </tbody>
</table>

<p>Veriler hasta bazında ayrılmalıdır; aynı hastaya ait benzer görüntülerin hem eğitim hem test kümesine girmesi veri sızıntısına yol açar. Ayrıca farklı laboratuvarlardan alınan örneklerle harici doğrulama yapılmalıdır.</p>

<p>Sonuç olarak bilgisayar, patoloğun yerini alan sihirli bir doktor değil; yorucu tarama işini hızlandıran dikkatli bir asistandır. Güvenilir bir sistem için kaliteli etiketler, açıklanabilir sonuçlar, mahremiyet koruması ve uzman denetimi vazgeçilmezdir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Proje" /><category term="yapay zeka" /><category term="görüntü işleme" /><category term="kanser araştırmaları" /><category term="makine öğrenmesi" /><category term="opencv" /><category term="mikroskopi" /><summary type="html"><![CDATA[Mikroskop altında yüzlerce hücreyi tek tek incelemek, samanlıkta iğne aramaya benzeyebilir. Bilgisayarlı görüntü analizi ise şüpheli hücreleri otomatik biçimde işaretleyerek araştırmacılara ve patologlara yardımcı olur. Gelin, bir mikroskop görüntüsünün piksellerden hücre adaylarına, oradan da sınıflandırma sonucuna uzanan yolculuğunu inceleyelim.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/mikroskop-goruntulerinde-kanser-62.png" /><media:content medium="image" url="https://program.sonsuz.us/img/mikroskop-goruntulerinde-kanser-62.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Protein Katlanması ve AlphaFold: Aminoasitlerden Üç Boyutlu Haritalara</title><link href="https://program.sonsuz.us/posts/protein-katlanmasi-ve-alphafold-aminoasitlerden-uc-boyutlu-haritalara/" rel="alternate" type="text/html" title="Protein Katlanması ve AlphaFold: Aminoasitlerden Üç Boyutlu Haritalara" /><published>2026-10-30T00:00:00+00:00</published><updated>2026-10-30T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/protein-katlanmasi-ve-alphafold-aminoasitlerden-uc-boyutlu-haritalara</id><content type="html" xml:base="https://program.sonsuz.us/posts/protein-katlanmasi-ve-alphafold-aminoasitlerden-uc-boyutlu-haritalara/"><![CDATA[<p>Bir proteinin aminoasit dizisini okumak, katlanmış bir origaminin yapım talimatlarını görmek gibidir: Harfler elinizdedir, ama ortaya çıkacak şekil henüz görünmez. AlphaFold, bu harflerden üç boyutlu yapıya uzanan köprüyü kurar. Peki bilgisayar, biyolojinin bu zorlu bulmacasını nasıl çözer ve tahminlerine ne kadar güvenebiliriz?
``</p>

<h2 id="önce-mesele-katlanmak-neden-zor">Önce mesele: Katlanmak neden zor?</h2>

<p>Proteinler, aminoasitlerin peptit bağlarıyla birleştiği zincirlerdir. Ancak görevlerini yalnızca dizileriyle değil, uzaydaki şekilleriyle yerine getirirler. Bir enzimin aktif bölgesi, doğru geometri oluşmadığında anahtarı olmayan kilide benzeyebilir.</p>

<p>Zincirin omurgası dönebilir; yan zincirler, hidrojen bağları, elektrostatik etkileşimler ve hidrofobik etki olası yapıları belirler. Yüz aminoasitli bir zincirde her aminoasit için yalnızca üç seçenek varsaysak bile $3^{100}$ kombinasyon çıkar. Bu, gerçek konformasyon uzayının basitleştirilmiş bir benzetimidir; yine de neden bütün seçenekleri deneyemediğimizi gösterir.</p>

<p>Termodinamik açıdan önemli büyüklük Gibbs serbest enerjisidir: $G = H - TS$. Burada $H$ entalpi, $T$ sıcaklık, $S$ entropidir. Ancak proteinler çözücüleriyle birlikte değerlendirilir; düşük serbest enerji fikri, tek başına pratik bir katlanma algoritması sağlamaz.</p>

<h2 id="alphafold-hangi-kestirme-yolu-kullanıyor">AlphaFold hangi kestirme yolu kullanıyor?</h2>

<p>AlphaFold, bütün fiziksel hareketleri sırayla simüle etmek yerine, bilinen yapılardan öğrenilmiş ilişkilerle yapısal tahmin üretir. Özellikle AlphaFold 2, aminoasit dizisini çoklu dizi hizalamalarıyla birlikte işler. Evrim boyunca beraber değişen konumlar, uzayda yakınlık veya işlevsel bağlantı hakkında ipuçları taşıyabilir.</p>

<p>Sinir ağı, dizi ve aminoasit çiftleri arasındaki ilişkileri işler; ardından geometrik modüller üç boyutlu koordinatlar üretir. Tahminin tekrar ağa verilmesi, yani geri besleme, yapının iyileştirilmesine yardımcı olur. Bu süreç, proteinin gerçek zamanda nasıl katlandığını gösteren bir film değildir.</p>

<p>AlphaFold 3 ise difüzyon temelli yaklaşımıyla proteinlerin yanında nükleik asitler ve çeşitli ligandlarla oluşan komplekslerin modellenmesini genişletir. Yine de bir kompleks tahmini, gerçek bağlanmanın deneysel kanıtı sayılmaz.</p>

<h2 id="güven-puanı-model-nerede-tereddüt-ediyor">Güven puanı: Model nerede tereddüt ediyor?</h2>

<p>Bir yapı dosyası güzel görünüyor diye bütünüyle doğru kabul edilmemelidir. AlphaFold 2 çıktılarındaki pLDDT, aminoasit başına yerel güveni özetler. Aşağıdaki sınırlar, kesin doğruluk garantileri değil, pratik yorumlama rehberleridir.</p>

<table>
  <thead>
    <tr>
      <th>pLDDT aralığı</th>
      <th>Genel yorum</th>
      <th>Pratik yaklaşım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>90–100</td>
      <td>Çok yüksek yerel güven</td>
      <td>Yerel yapıyı ayrıntılı incele</td>
    </tr>
    <tr>
      <td>70–90</td>
      <td>Genellikle güvenilir</td>
      <td>İnce ayrıntılarda dikkatli ol</td>
    </tr>
    <tr>
      <td>50–70</td>
      <td>Düşük güven</td>
      <td>Güçlü sonuç çıkarmaktan kaçın</td>
    </tr>
    <tr>
      <td>0–50</td>
      <td>Çok düşük güven</td>
      <td>Düzensizlik olasılığını değerlendir</td>
    </tr>
  </tbody>
</table>

<p>Düşük güven mutlaka yanlış tahmin anlamına gelmez; bölge gerçekten esnek veya düzensiz olabilir. Ayrıca iki alanın kendi içindeki yapısı güvenilirken birbirlerine göre konumları belirsiz kalabilir. PAE, bu göreli konum belirsizliğini değerlendirmeye yardımcı olur.</p>

<h2 id="python-ile-tahmini-sorgulayalım">Python ile tahmini sorgulayalım</h2>

<p>Şimdi modeli çalıştırmak yerine çıktısını analiz edelim. <a href="https://alphafold.ebi.ac.uk/">AlphaFold Protein Structure Database</a> üzerinden PDB biçiminde bir yapı indirip <code class="language-plaintext highlighter-rouge">model.pdb</code> olarak kaydedin. Bağımlılığı kurun:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pip <span class="nb">install </span>biopython
</code></pre></div></div>

<p>Aşağıdaki kod, her zincirde standart aminoasitlerin alfa karbonlarını bulur, ortalama pLDDT değerini hesaplar ve düşük güvenli konumları listeler:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">statistics</span> <span class="kn">import</span> <span class="n">mean</span>
<span class="kn">from</span> <span class="n">Bio.PDB</span> <span class="kn">import</span> <span class="n">PDBParser</span><span class="p">,</span> <span class="n">is_aa</span>

<span class="n">structure</span> <span class="o">=</span> <span class="nc">PDBParser</span><span class="p">(</span><span class="n">QUIET</span><span class="o">=</span><span class="bp">True</span><span class="p">).</span><span class="nf">get_structure</span><span class="p">(</span><span class="sh">'</span><span class="s">af</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">model.pdb</span><span class="sh">'</span><span class="p">)</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">structure</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>

<span class="k">for</span> <span class="n">chain</span> <span class="ow">in</span> <span class="n">model</span><span class="p">:</span>
    <span class="n">scores</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="n">uncertain</span> <span class="o">=</span> <span class="p">[]</span>

    <span class="k">for</span> <span class="n">residue</span> <span class="ow">in</span> <span class="n">chain</span><span class="p">:</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="nf">is_aa</span><span class="p">(</span><span class="n">residue</span><span class="p">,</span> <span class="n">standard</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> <span class="ow">or</span> <span class="sh">'</span><span class="s">CA</span><span class="sh">'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">residue</span><span class="p">:</span>
            <span class="k">continue</span>

        <span class="n">score</span> <span class="o">=</span> <span class="n">residue</span><span class="p">[</span><span class="sh">'</span><span class="s">CA</span><span class="sh">'</span><span class="p">].</span><span class="nf">get_bfactor</span><span class="p">()</span>
        <span class="n">scores</span><span class="p">.</span><span class="nf">append</span><span class="p">(</span><span class="n">score</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">score</span> <span class="o">&lt;</span> <span class="mi">70</span><span class="p">:</span>
            <span class="n">uncertain</span><span class="p">.</span><span class="nf">append</span><span class="p">(</span><span class="n">residue</span><span class="p">.</span><span class="nb">id</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>

    <span class="k">if</span> <span class="n">scores</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">Zincir </span><span class="si">{</span><span class="n">chain</span><span class="p">.</span><span class="nb">id</span><span class="si">}</span><span class="s">: ortalama pLDDT=</span><span class="si">{</span><span class="nf">mean</span><span class="p">(</span><span class="n">scores</span><span class="p">)</span><span class="si">:</span><span class="p">.</span><span class="mi">1</span><span class="n">f</span><span class="si">}</span><span class="sh">'</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">Düşük güvenli konumlar: </span><span class="si">{</span><span class="n">uncertain</span><span class="si">}</span><span class="sh">'</span><span class="p">)</span>
</code></pre></div></div>

<p>Buradaki kritik ayrıntı, AlphaFold veritabanından indirilen bu PDB dosyalarında pLDDT değerlerinin B-faktörü alanında saklanmasıdır. Deneysel PDB dosyalarında aynı alan farklı anlam taşır; kodu rastgele bir dosyaya uygulamak güven puanı üretmez. Konumlar, ekleme kodlarını da koruyacak şekilde gösterilir. Ortalama puan ise birkaç sorunlu bölgeyi gizleyebilir; listeyi ayrıca inceleyin.</p>

<h2 id="tahminden-bilimsel-sonuca-geçerken">Tahminden bilimsel sonuca geçerken</h2>

<p>Proteinler tek bir donmuş heykel değildir. Ortam, bağlanma ortakları ve kimyasal değişiklikler yapılarını etkileyebilir. Bir tahmin, alternatif konformasyonları veya hastalıkla ilişkili bir mutasyonun bütün sonuçlarını otomatik olarak açıklamaz. Özellikle ilaç tasarımında, güvenilir görünen bir cep bile molekülün gerçekten bağlanacağını garanti etmez.</p>

<p>İyi bir çalışma akışı; doğru diziyi seçmek, güven ölçülerini incelemek, bilinen deneysel verilerle karşılaştırmak ve gerektiğinde laboratuvar doğrulaması planlamaktır. AlphaFold deneyleri gereksiz kılmaz; daha hedefli deneyler tasarlamamızı sağlar. Bilgisayar haritayı çizer, biyoloji ise arazinin hâlâ sürprizlerle dolu olduğunu hatırlatır.</p>

<p><img src="/img/protein-katlanmasi-ve-15.svg" alt="protein-katlanmasi-ve-15" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="alphafold" /><category term="protein-katlanması" /><category term="biyoinformatik" /><category term="yapay-zeka" /><category term="python" /><category term="yapısal-biyoloji" /><summary type="html"><![CDATA[Bir proteinin aminoasit dizisini okumak, katlanmış bir origaminin yapım talimatlarını görmek gibidir: Harfler elinizdedir, ama ortaya çıkacak şekil henüz görünmez. AlphaFold, bu harflerden üç boyutlu yapıya uzanan köprüyü kurar. Peki bilgisayar, biyolojinin bu zorlu bulmacasını nasıl çözer ve tahminlerine ne kadar güvenebiliriz?]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/protein-katlanmasi-ve-15.png" /><media:content medium="image" url="https://program.sonsuz.us/img/protein-katlanmasi-ve-15.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Raspberry Pi ile Açık Kaynak Akıllı Ev Sistemi Kurma</title><link href="https://program.sonsuz.us/posts/raspberry-pi-ile-acik-kaynak-akilli-ev-sistemi-kurma/" rel="alternate" type="text/html" title="Raspberry Pi ile Açık Kaynak Akıllı Ev Sistemi Kurma" /><published>2026-10-30T00:00:00+00:00</published><updated>2026-10-30T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/raspberry-pi-ile-acik-kaynak-akilli-ev-sistemi-kurma</id><content type="html" xml:base="https://program.sonsuz.us/posts/raspberry-pi-ile-acik-kaynak-akilli-ev-sistemi-kurma/"><![CDATA[<p><img src="/img/raspberry-pi-ile-21.svg" alt="raspberry-pi-ile-21" /></p>

<p>Akıllı lambalar, sıcaklık sensörleri ve uzaktan kontrol edilen prizler oldukça kullanışlıdır; fakat farklı markalara ait ürünler çoğu zaman ayrı uygulamalar, bulut üyelikleri ve kapalı protokoller kullanır. Raspberry Pi merkezli bir sistem kurarak verilerinizi evinizde tutabilir, cihazları tek panelden yönetebilir ve otomasyon kurallarını özgürce geliştirebilirsiniz. Üstelik sisteminiz internet bağlantısı kesildiğinde bile çalışmaya devam edebilir.</p>

<p>``</p>

<h2 id="sistemin-temel-mantığı">Sistemin Temel Mantığı</h2>

<p>Akıllı ev sistemini üç katmanlı bir yapı olarak düşünebiliriz: sensörler çevreyi gözlemler, merkezi yazılım verileri işler, eyleyiciler ise fiziksel değişiklikleri gerçekleştirir. Örneğin sıcaklık sensörü ölçüm yapar, Raspberry Pi bu değeri belirlenen eşikle karşılaştırır ve gerekirse röleyle vantilatörü çalıştırır.</p>

<p>Basit bir sıcaklık otomasyonu şu mantıkla ifade edilebilir:</p>

\[u(t)=\begin{cases}1, &amp; T(t)&gt;T_{eşik} \\ 0, &amp; T(t)\leq T_{eşik}\end{cases}\]

<p>Burada $T(t)$ ölçülen sıcaklığı, $T_{eşik}$ belirlediğimiz sınırı, $u(t)$ ise cihazın açık veya kapalı durumunu temsil eder. Sensör değerleri eşik çevresinde dalgalanıyorsa cihaz sürekli açılıp kapanabilir. Bunu önlemek için açma ve kapatma sıcaklıklarını farklı seçen <strong>histerezis</strong> yaklaşımı kullanılabilir.</p>

<h2 id="açık-kaynak-ve-ticari-sistem-karşılaştırması">Açık Kaynak ve Ticari Sistem Karşılaştırması</h2>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Raspberry Pi sistemi</th>
      <th>Ticari sistem</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Veri saklama</td>
      <td>Yerel ve kullanıcı kontrolünde</td>
      <td>Genellikle bulutta</td>
    </tr>
    <tr>
      <td>Özelleştirme</td>
      <td>Çok yüksek</td>
      <td>Üreticiyle sınırlı</td>
    </tr>
    <tr>
      <td>İlk kurulum</td>
      <td>Teknik bilgi gerektirir</td>
      <td>Genellikle kolaydır</td>
    </tr>
    <tr>
      <td>İnternetsiz çalışma</td>
      <td>Yapılandırmaya bağlı olarak tam</td>
      <td>Her üründe bulunmaz</td>
    </tr>
    <tr>
      <td>Bakım</td>
      <td>Kullanıcı sorumluluğunda</td>
      <td>Üretici desteği mevcut</td>
    </tr>
  </tbody>
</table>

<p>Bu özgürlük biraz sorumluluk getirir. Güncellemeleri takip etmek, yedek almak ve elektrik güvenliğine dikkat etmek sistem sahibinin görevidir.</p>

<h2 id="gerekli-donanım-ve-yazılım">Gerekli Donanım ve Yazılım</h2>

<p>Başlangıç için Raspberry Pi 4 veya 5, güvenilir bir güç adaptörü, microSD kart ve ağ bağlantısı yeterlidir. Ortam verisi toplamak için BME280; lambaları ya da düşük voltajlı cihazları kontrol etmek için optik izolasyonlu röle modülü kullanılabilir. Şebeke gerilimiyle deneyiminiz yoksa 230 V bağlantılara doğrudan müdahale etmeyin; sertifikalı akıllı prizleri veya bir elektrik uzmanını tercih edin.</p>

<p>Yazılım tarafında <strong>Home Assistant</strong> kontrol panelini ve otomasyon motorunu sağlar. <strong>Mosquitto MQTT</strong> cihazlar arasında hafif mesajlaşma sunarken <strong>Node-RED</strong> sürükle-bırak yöntemiyle akış hazırlamayı kolaylaştırır.</p>

<p>MQTT yapısında sensörler bir konuya mesaj yayımlar, ilgilenen uygulamalar o konuya abone olur. Örneğin sıcaklık verisi <code class="language-plaintext highlighter-rouge">ev/salon/sicaklik</code> konusunda taşınabilir. Böylece sensör, veriyi kimin kullanacağını bilmek zorunda kalmaz.</p>

<h2 id="python-ile-sensör-verisi-yayımlamak">Python ile Sensör Verisi Yayımlamak</h2>

<p>Önce gerekli paketleri kurun:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pip <span class="nb">install </span>paho-mqtt adafruit-circuitpython-bme280
</code></pre></div></div>

<p>Aşağıdaki örnek, BME280 sensöründen sıcaklığı okuyup her 30 saniyede MQTT sunucusuna gönderir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">time</span>
<span class="kn">import</span> <span class="n">board</span>
<span class="kn">import</span> <span class="n">adafruit_bme280</span>
<span class="kn">from</span> <span class="n">paho.mqtt.client</span> <span class="kn">import</span> <span class="n">Client</span>

<span class="n">sensor</span> <span class="o">=</span> <span class="n">adafruit_bme280</span><span class="p">.</span><span class="nc">Adafruit_BME280_I2C</span><span class="p">(</span><span class="n">board</span><span class="p">.</span><span class="nc">I2C</span><span class="p">())</span>
<span class="n">mqtt</span> <span class="o">=</span> <span class="nc">Client</span><span class="p">()</span>
<span class="n">mqtt</span><span class="p">.</span><span class="nf">username_pw_set</span><span class="p">(</span><span class="sh">'</span><span class="s">sensor</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">guclu-parola</span><span class="sh">'</span><span class="p">)</span>
<span class="n">mqtt</span><span class="p">.</span><span class="nf">connect</span><span class="p">(</span><span class="sh">'</span><span class="s">192.168.1.20</span><span class="sh">'</span><span class="p">,</span> <span class="mi">1883</span><span class="p">)</span>

<span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
    <span class="n">temperature</span> <span class="o">=</span> <span class="nf">round</span><span class="p">(</span><span class="n">sensor</span><span class="p">.</span><span class="n">temperature</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
    <span class="n">mqtt</span><span class="p">.</span><span class="nf">publish</span><span class="p">(</span><span class="sh">'</span><span class="s">ev/salon/sicaklik</span><span class="sh">'</span><span class="p">,</span> <span class="n">temperature</span><span class="p">,</span> <span class="n">retain</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="sa">f</span><span class="sh">'</span><span class="s">Yayımlanan sıcaklık: </span><span class="si">{</span><span class="n">temperature</span><span class="si">}</span><span class="s"> °C</span><span class="sh">'</span><span class="p">)</span>
    <span class="n">time</span><span class="p">.</span><span class="nf">sleep</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">retain=True</code>, son ölçümün MQTT sunucusunda tutulmasını sağlar. Böylece Home Assistant yeniden başladığında yeni ölçümü beklemeden mevcut değeri görebilir.</p>

<h2 id="güvenli-ve-sağlam-bir-kurulum">Güvenli ve Sağlam Bir Kurulum</h2>

<p>MQTT sunucusunu parolasız bırakmayın, Raspberry Pi için sabit IP ayırın ve sistemi düzenli olarak güncelleyin. Dışarıdan erişim gerekiyorsa doğrudan port açmak yerine WireGuard gibi bir VPN kullanın. Ayrıca microSD kart bozulmalarına karşı yapılandırma dosyalarını başka bir diske yedekleyin.</p>

<p>Projeyi önce tek oda ve tek sensörle başlatmak en sağlıklı yaklaşımdır. Sistem kararlı çalıştıkça hareket algılama, enerji takibi, su kaçağı uyarısı ve gün batımına bağlı aydınlatma gibi özellikler ekleyebilirsiniz. Sonuçta yalnızca uzaktan kumandalı bir ev değil, davranışlarını sizin belirlediğiniz yerel, geliştirilebilir ve gerçekten size ait bir otomasyon platformu elde edersiniz.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Proje" /><category term="raspberry pi" /><category term="akıllı ev" /><category term="iot" /><category term="mqtt" /><category term="python" /><category term="ev otomasyonu" /><summary type="html"><![CDATA[Akıllı lambalar, sıcaklık sensörleri ve uzaktan kontrol edilen prizler oldukça kullanışlıdır; fakat farklı markalara ait ürünler çoğu zaman ayrı uygulamalar, bulut üyelikleri ve kapalı protokoller kullanır. Raspberry Pi merkezli bir sistem kurarak verilerinizi evinizde tutabilir, cihazları tek panelden yönetebilir ve otomasyon kurallarını özgürce geliştirebilirsiniz. Üstelik sisteminiz internet bağlantısı kesildiğinde bile çalışmaya devam edebilir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/raspberry-pi-ile-21.png" /><media:content medium="image" url="https://program.sonsuz.us/img/raspberry-pi-ile-21.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Şehrin Sinir Sistemi: Akıllı Şehirlerde Sensör Ağları Nasıl Çalışır?</title><link href="https://program.sonsuz.us/posts/sehrin-sinir-sistemi-akilli-sehirlerde-sensor-aglari-nasil-calisir/" rel="alternate" type="text/html" title="Şehrin Sinir Sistemi: Akıllı Şehirlerde Sensör Ağları Nasıl Çalışır?" /><published>2026-10-30T00:00:00+00:00</published><updated>2026-10-30T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/sehrin-sinir-sistemi-akilli-sehirlerde-sensor-aglari-nasil-calisir</id><content type="html" xml:base="https://program.sonsuz.us/posts/sehrin-sinir-sistemi-akilli-sehirlerde-sensor-aglari-nasil-calisir/"><![CDATA[<p>Bir şehir konuşabilseydi, sabah trafiğinden yakınır, öğleden sonra hava kalitesini sorar, gece de biraz sessizlik isterdi. Sensör ağları, bu konuşmayı sayılara çevirir. Ancak mesele sokaklara cihaz yerleştirmek değildir: Ölçümlerin güvenilir biçimde toplanması, bağlamıyla değerlendirilmesi ve doğru kararlara dönüşmesi gerekir. Gelin, şehrin görünmez sinir sisteminin nasıl çalıştığını inceleyelim.</p>

<p>``</p>

<h2 id="ölçümden-karara-uzanan-yol">Ölçümden karara uzanan yol</h2>

<p>Akıllı şehir altyapısında temel zincir <strong>sensör → ağ geçidi → veri platformu → analiz → uygulama</strong> şeklindedir. Sensör fiziksel dünyayı ölçer; ağ geçidi cihazları internete bağlar; platform veriyi saklar ve işler. Son aşamada bir trafik panosu güncellenebilir veya belediyenin inceleme ekibine bildirim gönderilebilir.</p>

<p>Buradaki kritik ayrım, <strong>ölçüm ile yorumun aynı şey olmamasıdır</strong>. Yüksek parçacık ölçümü kirlenmeye işaret edebilir; ancak nem, cihazın konumu ve kalibrasyon durumu değerlendirilmeden kesin sonuca varılamaz.</p>

<table>
  <thead>
    <tr>
      <th>Veri türü</th>
      <th>Yaygın ölçüm yöntemi</th>
      <th>Üretilen bilgi</th>
      <th>Başlıca sınırlama</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Trafik</td>
      <td>Radar, manyetik sensör, kamera</td>
      <td>Araç sayısı, hız, doluluk</td>
      <td>Yerleşim ve görüş koşulları</td>
    </tr>
    <tr>
      <td>Hava kalitesi</td>
      <td>Optik parçacık, elektrokimyasal gaz sensörü</td>
      <td>PM2.5, PM10, NO₂</td>
      <td>Nem ve kalibrasyon sapması</td>
    </tr>
    <tr>
      <td>Gürültü</td>
      <td>Kalibre edilmiş mikrofon</td>
      <td>A-ağırlıklı ses seviyesi</td>
      <td>Rüzgâr ve mikrofon konumu</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/sehrin-sinir-sistemi-82.svg" alt="sehrin-sinir-sistemi-82" /></p>

<h2 id="sayıların-arkasındaki-fizik">Sayıların arkasındaki fizik</h2>

<p>Trafik akışı, belirli sürede geçen araç sayısıyla ifade edilebilir: $q=N/\Delta t$. Örneğin beş dakikada 100 araç geçen noktada akış 20 araç/dakikadır. Fakat akış tek başına sıkışıklığı açıklamaz; hız ve yol doluluğu da gerekir. Az araç, bazen sakin yolu değil, ilerleyemeyen kuyruğu gösterir!</p>

<p>Hava sensörlerinde ham sinyal, kalibrasyon modeliyle konsantrasyona dönüştürülür. Basit bir yaklaşım $x_{kalibre}=ax_{ham}+b$ olabilir; gerçek sistemlerde sıcaklık ve nem de modele katılır. Düşük maliyetli cihazlar geniş kapsama sağlar, fakat referans istasyonlarla karşılaştırılmadan resmî ölçümün yerine geçirilmemelidir.</p>

<p>Gürültüde ise desibel logaritmiktir. Eşit süreli, A-ağırlıklı eşdeğer seviye ölçümlerini birleştirirken aritmetik ortalama yerine enerji ortalaması kullanılır:</p>

\[L_{Aeq}=10\log_{10}\left(\frac{1}{n}\sum_{i=1}^{n}10^{L_{A,i}/10}\right)\]

<p>Yani iki gürültü değerini toplayıp ikiye bölmek, fizik açısından her zaman doğru cevap değildir.</p>

<h2 id="veriler-şehir-boyunca-nasıl-taşınır">Veriler şehir boyunca nasıl taşınır?</h2>

<p>Düşük veri hacimli, pil ile çalışan cihazlarda LoRaWAN; daha yüksek kapasite veya farklı kapsama ihtiyaçlarında hücresel bağlantılar tercih edilebilir. Kameralar ise çoğunlukla daha güçlü bağlantılara ihtiyaç duyar. Uç cihazda araç sayısını hesaplayıp yalnızca sayımı göndermek, görüntü taşımaktan daha ekonomik ve mahremiyet dostudur.</p>

<p>Ağ geçidi, bağlantı kesildiğinde ölçümleri tamponlayabilir. MQTT gibi protokoller mesaj taşımayı kolaylaştırır; ancak mesajın alınması, ölçümün doğru olduğunu garanti etmez. Her kayıtta sensör kimliği, ölçüm zamanı, birim, konum ve kalite bilgisi bulunmalıdır.</p>

<p>Platform, olay zamanına göre pencereler oluşturur. Geç gelen kayıtlar için tolerans tanımlar; tekrar gönderilen mesajları benzersiz kimliklerle ayıklar. Böylece bağlantı kesintisi, araç sayısını yanlışlıkla ikiye katlamaz.</p>

<h2 id="python-ile-dakikalık-pm25-özeti">Python ile dakikalık PM2.5 özeti</h2>

<p>Aşağıdaki örnek, şeması önceden doğrulanmış kayıtlarda geçersiz değerleri eler ve her sensör için dakikalık ortalama üretir. <code class="language-plaintext highlighter-rouge">ts</code>, UTC tabanlı Unix zamanıdır; PM2.5 değerleri aynı birimde olmalıdır.</p>

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


<span class="k">def</span> <span class="nf">minute_pm25</span><span class="p">(</span><span class="n">events</span><span class="p">):</span>
    <span class="n">buckets</span> <span class="o">=</span> <span class="nf">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
    <span class="k">for</span> <span class="n">event</span> <span class="ow">in</span> <span class="n">events</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">event</span><span class="p">.</span><span class="nf">get</span><span class="p">(</span><span class="sh">'</span><span class="s">metric</span><span class="sh">'</span><span class="p">)</span> <span class="o">!=</span> <span class="sh">'</span><span class="s">pm25</span><span class="sh">'</span> <span class="ow">or</span> <span class="n">event</span><span class="p">.</span><span class="nf">get</span><span class="p">(</span><span class="sh">'</span><span class="s">quality</span><span class="sh">'</span><span class="p">)</span> <span class="o">!=</span> <span class="sh">'</span><span class="s">ok</span><span class="sh">'</span><span class="p">:</span>
            <span class="k">continue</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="n">value</span> <span class="o">=</span> <span class="nf">float</span><span class="p">(</span><span class="n">event</span><span class="p">[</span><span class="sh">'</span><span class="s">value</span><span class="sh">'</span><span class="p">])</span>
            <span class="n">minute</span> <span class="o">=</span> <span class="nf">int</span><span class="p">(</span><span class="nf">float</span><span class="p">(</span><span class="n">event</span><span class="p">[</span><span class="sh">'</span><span class="s">ts</span><span class="sh">'</span><span class="p">])</span> <span class="o">//</span> <span class="mi">60</span><span class="p">)</span>
        <span class="nf">except </span><span class="p">(</span><span class="nb">KeyError</span><span class="p">,</span> <span class="nb">TypeError</span><span class="p">,</span> <span class="nb">ValueError</span><span class="p">,</span> <span class="nb">OverflowError</span><span class="p">):</span>
            <span class="k">continue</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="nf">isfinite</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="ow">or</span> <span class="n">value</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
            <span class="k">continue</span>
        <span class="n">buckets</span><span class="p">[(</span><span class="n">event</span><span class="p">[</span><span class="sh">'</span><span class="s">sensor_id</span><span class="sh">'</span><span class="p">],</span> <span class="n">minute</span><span class="p">)].</span><span class="nf">append</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
    <span class="k">return</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="nf">sum</span><span class="p">(</span><span class="n">values</span><span class="p">)</span> <span class="o">/</span> <span class="nf">len</span><span class="p">(</span><span class="n">values</span><span class="p">)</span>
            <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">values</span> <span class="ow">in</span> <span class="n">buckets</span><span class="p">.</span><span class="nf">items</span><span class="p">()}</span>
</code></pre></div></div>

<p>Sensörleri ayrı gruplamak, farklı mahallelerin ölçümlerini yanlışlıkla karıştırmayı önler. Bu ortalama eşit aralıklı örnekleme varsayar; düzensiz örneklerde zaman ağırlıklı hesaplama gerekir. Ayrıca üretim sisteminde eksik veri oranı ve kalibrasyon bilgisi de sonuca eklenmelidir.</p>

<h2 id="güvenilir-şehir-güvenilir-veri">Güvenilir şehir, güvenilir veri</h2>

<p>Veriler zaman serisi depolarında saklanabilir; coğrafi analizlerle mahalle haritalarına dönüştürülebilir. Ancak tek sensör bütün mahalleyi temsil etmeyebilir. Sensör yoğunluğu, yol kenarı etkisi ve yerel koşullar haritanın yorumunu değiştirir. Eksik ölçümleri renkli bir haritada gizlemek yerine belirsizliği göstermek daha dürüsttür.</p>

<p>Cihaz kimlik doğrulaması, şifreli iletişim ve güvenli güncellemeler altyapının temelidir. Gürültü için konuşma kaydetmek yerine cihaz üzerinde seviye hesaplamak tercih edilmelidir. Trafik kameralarında da mümkünse kişisel görüntüler saklanmadan anonim sayımlar üretilmelidir.</p>

<p>Sonuçta akıllı şehir, en fazla sensöre sahip şehir değildir. Verisinin sınırlarını bilen, hataları izleyen ve ölçümleri insanların yaşamını iyileştiren kararlara dönüştüren şehirdir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="akıllı şehir" /><category term="sensör ağları" /><category term="iot" /><category term="veri işleme" /><category term="hava kalitesi" /><category term="trafik" /><summary type="html"><![CDATA[Bir şehir konuşabilseydi, sabah trafiğinden yakınır, öğleden sonra hava kalitesini sorar, gece de biraz sessizlik isterdi. Sensör ağları, bu konuşmayı sayılara çevirir. Ancak mesele sokaklara cihaz yerleştirmek değildir: Ölçümlerin güvenilir biçimde toplanması, bağlamıyla değerlendirilmesi ve doğru kararlara dönüşmesi gerekir. Gelin, şehrin görünmez sinir sisteminin nasıl çalıştığını inceleyelim.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/sehrin-sinir-sistemi-82.png" /><media:content medium="image" url="https://program.sonsuz.us/img/sehrin-sinir-sistemi-82.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>