<?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-30T06:05:42+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">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">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">Akıllı Evde Ortak Dil Arayışı: Cihazlar Birbiriyle Nasıl Konuşuyor?</title><link href="https://program.sonsuz.us/posts/akilli-evde-ortak-dil-arayisi-cihazlar-birbiriyle-nasil-konusuyor/" rel="alternate" type="text/html" title="Akıllı Evde Ortak Dil Arayışı: Cihazlar Birbiriyle Nasıl Konuşuyor?" /><published>2026-10-29T00:00:00+00:00</published><updated>2026-10-29T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/akilli-evde-ortak-dil-arayisi-cihazlar-birbiriyle-nasil-konusuyor</id><content type="html" xml:base="https://program.sonsuz.us/posts/akilli-evde-ortak-dil-arayisi-cihazlar-birbiriyle-nasil-konusuyor/"><![CDATA[<p>Akıllı ampulünüz başka bir markanın hareket sensörünü görmüyor, robot süpürgeniz sesli asistana küsmüş, termostatınız ise yalnızca kendi uygulamasıyla konuşuyor olabilir. Akıllı ev ekosistemlerinde <strong>birlikte çalışabilirlik</strong>, farklı üreticilere ait cihazların ortak bir sistem içinde veri paylaşabilmesi ve birbirini kontrol edebilmesidir. Amaç, evinizi uygulama mezarlığına dönüştürmeden bütün cihazları uyumlu bir ekip hâline getirmektir.</p>

<p>``</p>

<h2 id="birlikte-çalışabilirlik-neden-zor">Birlikte çalışabilirlik neden zor?</h2>

<p>Her akıllı cihaz fiziksel bağlantı, iletişim protokolü ve veri modeli olmak üzere birkaç katmanda çalışır. Wi-Fi veya Thread cihazın ağa nasıl bağlandığını; MQTT, Zigbee ya da Matter mesajların nasıl taşındığını; veri modeli ise bir mesajdaki <code class="language-plaintext highlighter-rouge">temperature</code> değerinin ne anlama geldiğini belirler.</p>

<p>İki cihazın yalnızca aynı kablosuz teknolojiyi kullanması yeterli değildir. İletişimi basitleştirerek şöyle gösterebiliriz:</p>

\[Başarı = Bağlantı \times Protokol\ Uyumu \times Anlamsal\ Uyum\]

<p>Katmanlardan herhangi biri sıfırsa toplam başarı da sıfır olur. Örneğin iki cihaz Wi-Fi kullanabilir, ancak biri üreticiye özel bulut API’siyle, diğeri yerel MQTT mesajlarıyla çalışıyorsa doğrudan anlaşamazlar.</p>

<table>
  <thead>
    <tr>
      <th>Teknoloji</th>
      <th>Temel rolü</th>
      <th>Güçlü yanı</th>
      <th>Sınırlaması</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Wi-Fi</td>
      <td>IP tabanlı bağlantı</td>
      <td>Yüksek hız ve yaygınlık</td>
      <td>Daha fazla enerji tüketimi</td>
    </tr>
    <tr>
      <td>Zigbee</td>
      <td>Düşük güçlü örgü ağ</td>
      <td>Sensörler için verimli</td>
      <td>Genellikle köprü gerektirir</td>
    </tr>
    <tr>
      <td>Thread</td>
      <td>IP tabanlı örgü ağ</td>
      <td>Yerel ve dayanıklı iletişim</td>
      <td>Sınır yönlendirici ister</td>
    </tr>
    <tr>
      <td>Matter</td>
      <td>Ortak uygulama standardı</td>
      <td>Markalar arası kontrol</td>
      <td>Her cihaz özelliğini kapsamayabilir</td>
    </tr>
    <tr>
      <td>MQTT</td>
      <td>Mesajlaşma protokolü</td>
      <td>Hafif ve esnek otomasyon</td>
      <td>Ortak veri modeli zorunlu değildir</td>
    </tr>
  </tbody>
</table>

<h2 id="entegrasyon-yöntemleri">Entegrasyon yöntemleri</h2>

<p>En kolay yöntem, cihazları Google Home, Apple Home, Amazon Alexa veya SmartThings gibi merkezi bir platformda toplamaktır. Platform, üreticilerin bulut servislerine bağlanarak farklı API’leri ortak bir arayüz altında sunar. Kurulumu rahattır; fakat internet kesintileri, abonelik değişiklikleri ve servislerin kapanması sistemi etkileyebilir.</p>

<p>İkinci yöntem <strong>yerel merkez</strong> kullanmaktır. Home Assistant, openHAB veya Hubitat gibi çözümler cihazlarla ev ağı üzerinden haberleşebilir. Böylece komutlar uzak bir sunucuya gidip dönmez. Yaklaşık tepki süresi şu şekilde düşünülebilir:</p>

\[T_{toplam}=T_{ağ}+T_{işleme}+T_{bulut}\]

<p>Yerel otomasyonda $T_{bulut}$ ortadan kalktığı için ışıklar daha hızlı yanar ve internet yokken de çalışabilir. Bunun bedeli, biraz daha fazla kurulum ve bakım gerektirmesidir.</p>

<p>Üçüncü yöntem ise köprü veya adaptör kullanmaktır. Köprü, farklı protokoller arasında tercümanlık yapar. Örneğin bir Zigbee sensöründen gelen hareket bilgisi MQTT konusuna çevrilebilir. Home Assistant için basit bir otomasyon şöyle tanımlanabilir:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">alias</span><span class="pi">:</span> <span class="s">Koridorda hareket algılanınca ışığı aç</span>
<span class="na">trigger</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="na">platform</span><span class="pi">:</span> <span class="s">state</span>
    <span class="na">entity_id</span><span class="pi">:</span> <span class="s">binary_sensor.koridor_hareket</span>
    <span class="na">to</span><span class="pi">:</span> <span class="s1">'</span><span class="s">on'</span>
<span class="na">action</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="na">service</span><span class="pi">:</span> <span class="s">light.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">light.koridor</span>
</code></pre></div></div>

<p>Bu yapı, sensör ve ampul farklı markalara ait olsa bile platformdaki standart varlık kimlikleri üzerinden çalışır. <code class="language-plaintext highlighter-rouge">trigger</code> olayı izler, <code class="language-plaintext highlighter-rouge">action</code> ise gerçekleşecek komutu belirtir.</p>

<h2 id="matter-her-şeyi-çözüyor-mu">Matter her şeyi çözüyor mu?</h2>

<p>Matter; Apple, Google, Amazon, Samsung ve çok sayıda üreticinin desteklediği ortak bir standarttır. IP tabanlı çalışır, cihazların güvenli biçimde eşleştirilmesini ve birden fazla ekosisteme bağlanmasını kolaylaştırır. <strong>Multi-Admin</strong> özelliği sayesinde aynı ampul hem Apple Home hem de Google Home tarafından yönetilebilir.</p>

<p>Yine de Matter sihirli değnek değildir. Eski cihazlar destek almayabilir; kamera veya robot süpürge gibi ürünlerin gelişmiş özellikleri standartta eksik kalabilir. Üreticiler ayrıca bazı işlevleri kendi uygulamalarına özel tutabilir.</p>

<h2 id="sağlam-bir-ekosistem-için-öneriler">Sağlam bir ekosistem için öneriler</h2>

<p>Cihaz satın alırken yalnızca kutudaki “akıllı” ifadesine değil; yerel API, Matter, Thread, Zigbee ve Home Assistant desteğine bakın. Kritik otomasyonları buluta bağımlı bırakmayın, cihazları ayrı bir IoT ağına yerleştirin ve düzenli güncelleme uygulayın. Mümkünse önce küçük bir uyumluluk haritası hazırlayın. Böylece eviniz, birbirine bağıran cihazlar topluluğu değil, aynı dili konuşan gerçek bir otomasyon sistemi olur.</p>

<p><img src="/img/akilli-evde-ortak-16.svg" alt="akilli-evde-ortak-16" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="akıllı ev" /><category term="interoperability" /><category term="matter" /><category term="zigbee" /><category term="mqtt" /><category term="iot" /><summary type="html"><![CDATA[Akıllı ampulünüz başka bir markanın hareket sensörünü görmüyor, robot süpürgeniz sesli asistana küsmüş, termostatınız ise yalnızca kendi uygulamasıyla konuşuyor olabilir. Akıllı ev ekosistemlerinde birlikte çalışabilirlik, farklı üreticilere ait cihazların ortak bir sistem içinde veri paylaşabilmesi ve birbirini kontrol edebilmesidir. Amaç, evinizi uygulama mezarlığına dönüştürmeden bütün cihazları uyumlu bir ekip hâline getirmektir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/akilli-evde-ortak-16.png" /><media:content medium="image" url="https://program.sonsuz.us/img/akilli-evde-ortak-16.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Akıllı Kilitlerde Güvenli Uzaktan Açma: Kimlik Doğrulama ve Şifreleme</title><link href="https://program.sonsuz.us/posts/akilli-kilitlerde-guvenli-uzaktan-acma-kimlik-dogrulama-ve-sifreleme/" rel="alternate" type="text/html" title="Akıllı Kilitlerde Güvenli Uzaktan Açma: Kimlik Doğrulama ve Şifreleme" /><published>2026-10-29T00:00:00+00:00</published><updated>2026-10-29T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/akilli-kilitlerde-guvenli-uzaktan-acma-kimlik-dogrulama-ve-sifreleme</id><content type="html" xml:base="https://program.sonsuz.us/posts/akilli-kilitlerde-guvenli-uzaktan-acma-kimlik-dogrulama-ve-sifreleme/"><![CDATA[<p>Telefonunuzdaki düğmeye dokunduğunuzda kilometrelerce uzaktaki bir kapının açılması sihir gibi görünebilir. Oysa perde arkasında cihaz kimliği, kriptografik anahtarlar, zaman damgaları ve tek kullanımlık mesajlar birlikte çalışır. Amaç yalnızca doğru komutu kilide ulaştırmak değil; komutun gerçekten yetkili kişiden geldiğini, değiştirilmediğini ve daha önce kullanılmış bir kaydın tekrarı olmadığını kanıtlamaktır.</p>

<p>``</p>

<h2 id="uzaktan-açma-isteği-nasıl-ilerler">Uzaktan açma isteği nasıl ilerler?</h2>

<p>Tipik bir sistemde telefon doğrudan kilide bağlanmak yerine üreticinin sunucusuyla haberleşir. Kullanıcı önce parola, biyometri veya geçiş anahtarıyla oturum açar. Sunucu kullanıcının ilgili kapıyı açma yetkisini denetler ve kilide imzalanmış bir komut gönderir. Kilit, komutun doğruluğunu kendi içindeki güvenli anahtarla kontrol ettikten sonra motoru çalıştırır.</p>

<p>Bu süreç üç temel soruya cevap vermelidir:</p>

<ol>
  <li><strong>Kim gönderdi?</strong> Kimlik doğrulama bunu belirler.</li>
  <li><strong>Mesaj değiştirildi mi?</strong> Bütünlük kontrolü bunu gösterir.</li>
  <li><strong>İçeriği başkası okuyabilir mi?</strong> Şifreleme gizliliği sağlar.</li>
</ol>

<p>Kimlik doğrulama ile yetkilendirme aynı şey değildir. Kimlik doğrulama, “Bu kişi Ayşe mi?” sorusunu; yetkilendirme ise “Ayşe bu kapıyı şu anda açabilir mi?” sorusunu cevaplar. Örneğin temizlik görevlisinin hesabı gerçek olabilir, fakat erişimi yalnızca 09.00–11.00 arasında geçerli olabilir.</p>

<h2 id="şifreleme-hangi-katmanlarda-kullanılır">Şifreleme hangi katmanlarda kullanılır?</h2>

<p>Telefon, sunucu ve kilit arasındaki ağ trafiği genellikle TLS ile korunur. Böylece ortak Wi-Fi ağındaki saldırgan komutu okuyamaz veya değiştiremez. Ancak yalnızca bağlantı şifrelemesine güvenmek yeterli değildir. Açma komutunun ayrıca dijital imza ya da HMAC ile doğrulanması, aradaki sunucu veya ağ katmanlarına karşı ek güvence sağlar.</p>

<table>
  <thead>
    <tr>
      <th>Yöntem</th>
      <th>Temel amacı</th>
      <th>Akıllı kilitte örnek</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>AES</td>
      <td>Veriyi gizlemek</td>
      <td>Yerel kayıtları şifrelemek</td>
    </tr>
    <tr>
      <td>HMAC</td>
      <td>Kaynak ve bütünlüğü doğrulamak</td>
      <td>Açma komutunu onaylamak</td>
    </tr>
    <tr>
      <td>Dijital imza</td>
      <td>Özel anahtar sahibini kanıtlamak</td>
      <td>Sunucunun komut imzalaması</td>
    </tr>
    <tr>
      <td>TLS</td>
      <td>İletişim kanalını korumak</td>
      <td>Telefon-sunucu bağlantısı</td>
    </tr>
  </tbody>
</table>

<p>HMAC kabaca şu şekilde ifade edilir:</p>

\[HMAC(K,m)=H((K'\oplus opad)\parallel H((K'\oplus ipad)\parallel m))\]

<p>Burada $K$ gizli anahtar, $m$ ise mesajdır. Anahtarı bilmeyen saldırgan geçerli doğrulama kodunu pratikte üretemez.</p>

<h2 id="tekrar-saldırısı-neden-tehlikelidir">Tekrar saldırısı neden tehlikelidir?</h2>

<p>Bir saldırgan şifreli paketi okuyamasa bile paketi kaydedip daha sonra yeniden gönderebilir. Buna <strong>replay saldırısı</strong> denir. Savunma için her isteğe rastgele bir <code class="language-plaintext highlighter-rouge">nonce</code>, kısa son kullanma süresi ve benzersiz işlem kimliği eklenir. Kilit daha önce gördüğü nonce değerlerini reddeder.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">hmac</span><span class="p">,</span> <span class="n">hashlib</span><span class="p">,</span> <span class="n">time</span><span class="p">,</span> <span class="n">secrets</span>

<span class="n">key</span> <span class="o">=</span> <span class="sa">b</span><span class="sh">"</span><span class="s">cihaz-icin-gizli-anahtar</span><span class="sh">"</span>
<span class="n">nonce</span> <span class="o">=</span> <span class="n">secrets</span><span class="p">.</span><span class="nf">token_hex</span><span class="p">(</span><span class="mi">16</span><span class="p">)</span>
<span class="n">expires</span> <span class="o">=</span> <span class="nf">int</span><span class="p">(</span><span class="n">time</span><span class="p">.</span><span class="nf">time</span><span class="p">())</span> <span class="o">+</span> <span class="mi">30</span>
<span class="n">message</span> <span class="o">=</span> <span class="sa">f</span><span class="sh">"</span><span class="s">OPEN|front-door|</span><span class="si">{</span><span class="n">nonce</span><span class="si">}</span><span class="s">|</span><span class="si">{</span><span class="n">expires</span><span class="si">}</span><span class="sh">"</span><span class="p">.</span><span class="nf">encode</span><span class="p">()</span>
<span class="n">signature</span> <span class="o">=</span> <span class="n">hmac</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">hashlib</span><span class="p">.</span><span class="n">sha256</span><span class="p">).</span><span class="nf">hexdigest</span><span class="p">()</span>
</code></pre></div></div>

<p>Bu örnek, kapı kimliğiyle birlikte rastgele nonce ve 30 saniyelik geçerlilik süresi içeren bir mesaj üretir. HMAC, mesajın değiştirilip değiştirilmediğini denetlemeyi sağlar. Gerçek bir üründe anahtar kaynak koda yazılmaz; secure element, TPM benzeri güvenli donanım veya işletim sisteminin anahtar kasasında tutulur.</p>

<p>256 bitlik ideal bir anahtarı rastgele tahmin etmenin tek denemedeki başarı olasılığı $1/2^{256}$ seviyesindedir. Fakat güçlü matematik, kötü anahtar yönetimini kurtaramaz. Aynı anahtarın bütün kilitlerde kullanılması, güncelleme imzalarının doğrulanmaması veya hata ayıklama portlarının açık bırakılması sistemi savunmasız yapabilir.</p>

<h2 id="güvenli-tasarımın-tamamlayıcı-parçaları">Güvenli tasarımın tamamlayıcı parçaları</h2>

<p>Akıllı kilit güvenliği; çok faktörlü kimlik doğrulama, erişim süresi sınırları, başarısız denemelerde hız kısıtlama, imzalı yazılım güncellemeleri ve denetlenebilir olay kayıtlarıyla tamamlanır. İnternet kesildiğinde sistemin nasıl davranacağı da önceden belirlenmelidir. Acil çıkış güvenliği korunurken dışarıdan yetkisiz girişe izin verilmemelidir.</p>

<p>Kısacası güvenli bir akıllı kilit, sadece “şifreli bağlantı kullanan motorlu kapı” değildir. Kimlik, yetki, mesaj bütünlüğü, anahtar saklama ve fiziksel güvenlik birlikte tasarlandığında uzaktan açma işlemi hem kullanışlı hem de güvenilir hale gelir.</p>

<p><img src="/img/akilli-kilitlerde-guvenli-79.svg" alt="akilli-kilitlerde-guvenli-79" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="akıllı kilit" /><category term="siber güvenlik" /><category term="kimlik doğrulama" /><category term="şifreleme" /><category term="iot" /><category term="hmac" /><summary type="html"><![CDATA[Telefonunuzdaki düğmeye dokunduğunuzda kilometrelerce uzaktaki bir kapının açılması sihir gibi görünebilir. Oysa perde arkasında cihaz kimliği, kriptografik anahtarlar, zaman damgaları ve tek kullanımlık mesajlar birlikte çalışır. Amaç yalnızca doğru komutu kilide ulaştırmak değil; komutun gerçekten yetkili kişiden geldiğini, değiştirilmediğini ve daha önce kullanılmış bir kaydın tekrarı olmadığını kanıtlamaktır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/akilli-kilitlerde-guvenli-79.png" /><media:content medium="image" url="https://program.sonsuz.us/img/akilli-kilitlerde-guvenli-79.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Akıllı Priz Verisiyle Elektrik Faturasını Küçültme Rehberi</title><link href="https://program.sonsuz.us/posts/akilli-priz-verisiyle-elektrik-faturasini-kucultme-rehberi/" rel="alternate" type="text/html" title="Akıllı Priz Verisiyle Elektrik Faturasını Küçültme Rehberi" /><published>2026-10-29T00:00:00+00:00</published><updated>2026-10-29T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/akilli-priz-verisiyle-elektrik-faturasini-kucultme-rehberi</id><content type="html" xml:base="https://program.sonsuz.us/posts/akilli-priz-verisiyle-elektrik-faturasini-kucultme-rehberi/"><![CDATA[<p><img src="/img/akilli-priz-verisiyle-23.svg" alt="akilli-priz-verisiyle-23" /></p>

<p>Elektrik faturası bazen evde görünmez bir canavar dolaşıyormuş hissi verir: Buzdolabı sessizce çalışır, televizyon bekleme modunda enerji tüketir, elektrikli ısıtıcı ise bütçeyi adeta közler. Akıllı prizler bu canavarı görünür hâle getirir. Cihaz bazında güç ve enerji ölçümü yaparak hangi cihazın ne zaman, ne kadar tükettiğini anlamamızı; tahminlere değil, verilere dayalı tasarruf kararları almamızı sağlar.</p>

<p>``</p>

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

<p>Tipik bir akıllı priz belirli aralıklarla gerilim, akım ve aktif güç değerlerini kaydeder. Bazı modeller güç faktörü, frekans ve toplam enerji tüketimi de sunar. Temel elektrik ilişkisi şöyledir:</p>

\[P = V \times I \times \cos(\varphi)\]

<p>Burada $P$ aktif gücü (W), $V$ gerilimi, $I$ akımı ve $\cos(\varphi)$ güç faktörünü gösterir. Bir cihazın tükettiği enerji ise gücün zaman boyunca birikimidir:</p>

\[E = \sum_{i=1}^{n} \frac{P_i \times \Delta t_i}{1000}\]

<p>$P_i$ watt, $\Delta t_i$ saat cinsindeyse sonuç kilovatsaat, yani kWh olur. Faturanın enerji kısmını yaklaşık hesaplamak için $E$ değeri birim fiyatla çarpılır.</p>

<table>
  <thead>
    <tr>
      <th>Veri</th>
      <th style="text-align: right">Birim</th>
      <th>Bize ne anlatır?</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Gerilim</td>
      <td style="text-align: right">V</td>
      <td>Şebeke seviyesini ve dalgalanmaları</td>
    </tr>
    <tr>
      <td>Aktif güç</td>
      <td style="text-align: right">W</td>
      <td>Cihazın o andaki tüketimini</td>
    </tr>
    <tr>
      <td>Enerji</td>
      <td style="text-align: right">kWh</td>
      <td>Zaman içinde biriken tüketimi</td>
    </tr>
    <tr>
      <td>Güç faktörü</td>
      <td style="text-align: right">0–1</td>
      <td>Elektriğin ne kadar verimli kullanıldığını</td>
    </tr>
    <tr>
      <td>Zaman damgası</td>
      <td style="text-align: right">Tarih/saat</td>
      <td>Kullanım alışkanlıklarını ve pik saatleri</td>
    </tr>
  </tbody>
</table>

<h2 id="ham-veriden-anlamlı-sonuca">Ham veriden anlamlı sonuca</h2>

<p>Akıllı priz kayıtları önce temizlenmelidir. Eksik ölçümler, tekrarlanan satırlar ve gerçek dışı sıçramalar analizi yanıltabilir. Örneğin normalde 100 W çeken bir televizyonun bir saniyeliğine 30.000 W görünmesi büyük olasılıkla ölçüm veya iletişim hatasıdır.</p>

<p>Temiz veride şu göstergeler özellikle değerlidir:</p>

<ul>
  <li><strong>Baz yük:</strong> Cihaz kapalı sanılırken devam eden tüketim.</li>
  <li><strong>Pik güç:</strong> Cihazın ulaştığı en yüksek güç seviyesi.</li>
  <li><strong>Çalışma süresi:</strong> Gücün belirlenen eşiğin üzerinde kaldığı süre.</li>
  <li><strong>Günlük enerji:</strong> Gün boyunca biriken kWh miktarı.</li>
  <li><strong>Kullanım deseni:</strong> Cihazın hangi saatlerde ve ne sıklıkta çalıştığı.</li>
</ul>

<p>Aşağıdaki Python örneği, CSV dosyasındaki ölçümlerden günlük enerji ve maliyet üretir:</p>

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

<span class="n">BIRIM_FIYAT</span> <span class="o">=</span> <span class="mf">2.60</span>  <span class="c1"># Örnek TL/kWh
</span>
<span class="n">veri</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nf">read_csv</span><span class="p">(</span><span class="sh">"</span><span class="s">priz_verisi.csv</span><span class="sh">"</span><span class="p">,</span> <span class="n">parse_dates</span><span class="o">=</span><span class="p">[</span><span class="sh">"</span><span class="s">zaman</span><span class="sh">"</span><span class="p">])</span>
<span class="n">veri</span> <span class="o">=</span> <span class="n">veri</span><span class="p">.</span><span class="nf">sort_values</span><span class="p">(</span><span class="sh">"</span><span class="s">zaman</span><span class="sh">"</span><span class="p">).</span><span class="nf">drop_duplicates</span><span class="p">(</span><span class="sh">"</span><span class="s">zaman</span><span class="sh">"</span><span class="p">)</span>

<span class="c1"># Ölçümler arasındaki süreyi saate çevirir.
</span><span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">sure_saat</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">zaman</span><span class="sh">"</span><span class="p">].</span><span class="nf">diff</span><span class="p">().</span><span class="n">dt</span><span class="p">.</span><span class="nf">total_seconds</span><span class="p">()</span> <span class="o">/</span> <span class="mi">3600</span>
<span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">sure_saat</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">sure_saat</span><span class="sh">"</span><span class="p">].</span><span class="nf">clip</span><span class="p">(</span><span class="n">lower</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>

<span class="c1"># Watt-saat hesabını kWh değerine dönüştürür.
</span><span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">enerji_kwh</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">guc_watt</span><span class="sh">"</span><span class="p">]</span> <span class="o">*</span> <span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">sure_saat</span><span class="sh">"</span><span class="p">]</span> <span class="o">/</span> <span class="mi">1000</span>
<span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">gun</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">zaman</span><span class="sh">"</span><span class="p">].</span><span class="n">dt</span><span class="p">.</span><span class="n">date</span>

<span class="n">ozet</span> <span class="o">=</span> <span class="n">veri</span><span class="p">.</span><span class="nf">groupby</span><span class="p">(</span><span class="sh">"</span><span class="s">gun</span><span class="sh">"</span><span class="p">)[</span><span class="sh">"</span><span class="s">enerji_kwh</span><span class="sh">"</span><span class="p">].</span><span class="nf">sum</span><span class="p">().</span><span class="nf">to_frame</span><span class="p">()</span>
<span class="n">ozet</span><span class="p">[</span><span class="sh">"</span><span class="s">maliyet_tl</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="n">ozet</span><span class="p">[</span><span class="sh">"</span><span class="s">enerji_kwh</span><span class="sh">"</span><span class="p">]</span> <span class="o">*</span> <span class="n">BIRIM_FIYAT</span>
<span class="nf">print</span><span class="p">(</span><span class="n">ozet</span><span class="p">)</span>
</code></pre></div></div>

<p>Kod, ardışık kayıtlar arasındaki süreyi hesaplar ve ölçülen güçle çarpar. Bir saatten uzun veri boşluklarını sınırlamak, eksik kayıtların tüketimi yapay biçimde büyütmesini engeller.</p>

<h2 id="tasarruf-fırsatlarını-sınıflandırmak">Tasarruf fırsatlarını sınıflandırmak</h2>

<p>Her yüksek tüketim gereksiz değildir. Buzdolabının sürekli çalışması normal olabilir; fakat eski bir modelin yeni modele göre iki kat enerji harcaması değişim kararını destekleyebilir.</p>

<table>
  <thead>
    <tr>
      <th>Gözlem</th>
      <th>Olası neden</th>
      <th>Uygulanabilecek işlem</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Gece boyunca sabit tüketim</td>
      <td>Bekleme modu</td>
      <td>Zamanlayıcıyla elektriği kesmek</td>
    </tr>
    <tr>
      <td>Uzun ve sık çalışma döngüsü</td>
      <td>Bakım ihtiyacı</td>
      <td>Filtre, conta veya termostat kontrolü</td>
    </tr>
    <tr>
      <td>Pik saatlerde yoğun kullanım</td>
      <td>Kullanım alışkanlığı</td>
      <td>Çalışmayı uygun saatlere taşımak</td>
    </tr>
    <tr>
      <td>Benzer cihazdan yüksek tüketim</td>
      <td>Düşük verimlilik</td>
      <td>Verimli modelle değiştirmeyi değerlendirmek</td>
    </tr>
  </tbody>
</table>

<p>Bir önlemin aylık kazancı yaklaşık olarak</p>

\[Tasarruf = Azaltılan\ kWh \times Birim\ Fiyat\]

<p>formülüyle bulunabilir. Yeni cihaz alınacaksa geri ödeme süresi de $Yatırım\ Maliyeti / Aylık\ Tasarruf$ şeklinde hesaplanır.</p>

<p>Sonuç olarak akıllı priz, tek başına faturayı düşüren sihirli bir düğme değildir; doğru soruları sormayı sağlayan küçük bir veri laboratuvarıdır. En etkili yaklaşım, birkaç hafta ölçüm yapmak, baz tüketimi ve çalışma döngülerini karşılaştırmak, ardından zamanlama, bakım veya cihaz değişimi gibi müdahalelerin sonucunu yeniden ölçmektir. Ölç, değiştir, tekrar ölç: Enerji optimizasyonunun en kısa ve en güvenilir döngüsü budur.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="akıllı priz" /><category term="enerji optimizasyonu" /><category term="veri analizi" /><category term="python" /><category term="iot" /><category term="elektrik tüketimi" /><summary type="html"><![CDATA[Elektrik faturası bazen evde görünmez bir canavar dolaşıyormuş hissi verir: Buzdolabı sessizce çalışır, televizyon bekleme modunda enerji tüketir, elektrikli ısıtıcı ise bütçeyi adeta közler. Akıllı prizler bu canavarı görünür hâle getirir. Cihaz bazında güç ve enerji ölçümü yaparak hangi cihazın ne zaman, ne kadar tükettiğini anlamamızı; tahminlere değil, verilere dayalı tasarruf kararları almamızı sağlar.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/akilli-priz-verisiyle-23.png" /><media:content medium="image" url="https://program.sonsuz.us/img/akilli-priz-verisiyle-23.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Akıllı Sokak Lambaları Hareketle Nasıl Enerji Tasarrufu Sağlıyor?</title><link href="https://program.sonsuz.us/posts/akilli-sokak-lambalari-hareketle-nasil-enerji-tasarrufu-sagliyor/" rel="alternate" type="text/html" title="Akıllı Sokak Lambaları Hareketle Nasıl Enerji Tasarrufu Sağlıyor?" /><published>2026-10-29T00:00:00+00:00</published><updated>2026-10-29T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/akilli-sokak-lambalari-hareketle-nasil-enerji-tasarrufu-sagliyor</id><content type="html" xml:base="https://program.sonsuz.us/posts/akilli-sokak-lambalari-hareketle-nasil-enerji-tasarrufu-sagliyor/"><![CDATA[<p>Gece boyunca tam güçte çalışan sokak lambaları güvenliği artırır; ancak boş bir caddenin saatlerce aydınlatılması ciddi enerji kaybına yol açar. Akıllı aydınlatma sistemleri, yaya ve araç hareketini algılayarak ışık seviyesini gerçek zamanlı biçimde değiştirir. Böylece sokak tamamen karanlık bırakılmadan yalnızca ihtiyaç duyulan yerde ve zamanda yüksek parlaklık sağlanır.</p>

<p>``</p>

<h2 id="sistem-hangi-bileşenlerden-oluşur">Sistem hangi bileşenlerden oluşur?</h2>

<p>Hareket tabanlı bir aydınlatma sistemi yalnızca lambaya bağlanmış basit bir sensörden ibaret değildir. Sensörler, kontrol birimi, haberleşme ağı ve dim edilebilir LED sürücüler birlikte çalışır.</p>

<ul>
  <li><strong>PIR sensörü:</strong> İnsan ve hayvanların yaydığı kızılötesi enerjideki değişimi algılar.</li>
  <li><strong>Mikrodalga radar:</strong> Radyo dalgaları göndererek hareketi ve bazı sistemlerde hızı ölçer.</li>
  <li><strong>Kamera veya görüntü sensörü:</strong> Yaya, bisiklet ve araç sınıflandırması yapabilir.</li>
  <li><strong>Ortam ışığı sensörü:</strong> Sistemin gündüz gereksiz yere çalışmasını engeller.</li>
  <li><strong>Kontrolcü:</strong> Sensör verilerini işleyerek lambanın parlaklık kararını verir.</li>
  <li><strong>Haberleşme modülü:</strong> Komşu lambalarla veya merkezi yönetim platformuyla veri paylaşır.</li>
</ul>

<table>
  <thead>
    <tr>
      <th>Algılama yöntemi</th>
      <th>Güçlü yönü</th>
      <th>Sınırlaması</th>
      <th>Uygun kullanım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>PIR</td>
      <td>Ucuz ve düşük enerji tüketimli</td>
      <td>Araç hızını ölçemez</td>
      <td>Yaya yolları</td>
    </tr>
    <tr>
      <td>Radar</td>
      <td>Yağmur ve karanlıktan az etkilenir</td>
      <td>Daha pahalıdır</td>
      <td>Ana yollar</td>
    </tr>
    <tr>
      <td>Kamera</td>
      <td>Nesne türünü ayırt edebilir</td>
      <td>Gizlilik ve işlem yükü doğurur</td>
      <td>Yoğun kavşaklar</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/akilli-sokak-lambalari-80.svg" alt="akilli-sokak-lambalari-80" /></p>

<h2 id="parlaklık-kararı-nasıl-verilir">Parlaklık kararı nasıl verilir?</h2>

<p>Lambalar genellikle hareket yokken tamamen kapanmaz. Örneğin temel parlaklık yüzde 25 seviyesinde tutulur. Bir yaya algılandığında yüzde 60’a, hızlı bir araç algılandığında ise yüzde 100’e çıkılabilir. Belirli bir bekleme süresinden sonra ışık yumuşak biçimde başlangıç seviyesine döner. Bu geçiş, sürücülerin ani ışık değişiminden rahatsız olmasını da önler.</p>

<p>Basitleştirilmiş bir parlaklık modeli şöyle yazılabilir:</p>

\[L = \min(L_{max}, L_{base} + w_p P + w_v V)\]

<p>Burada $L$ hedef parlaklığı, $L_{base}$ bekleme seviyesini, $P$ yaya varlığını ve $V$ normalize edilmiş araç hızını temsil eder. $w_p$ ile $w_v$ ise belediyenin güvenlik politikasına göre belirlenen ağırlıklardır.</p>

<p>Enerji tüketimi yaklaşık olarak güç ve çalışma süresinin çarpımıdır:</p>

\[E = \sum_{i=1}^{n} P_i \times t_i\]

<p>100 watt gücündeki bir lamba 10 saat tam parlaklıkta çalışırsa 1 kWh tüketir. Aynı lamba gecenin yüzde 70’inde yüzde 25 güçte, kalanında tam güçte çalışırsa yaklaşık $0.475$ kWh tüketir. Gerçek değer LED sürücüsünün verim eğrisine bağlı olsa da tasarruf potansiyeli oldukça açıktır.</p>

<h2 id="basit-bir-kontrol-algoritması">Basit bir kontrol algoritması</h2>

<p>Aşağıdaki Python örneği, algılanan nesneye göre hedef parlaklığı belirler. Gerçek sistemde bu değer PWM sinyaline veya akıllı LED sürücüsüne gönderilebilir.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">hedef_parlaklik</span><span class="p">(</span><span class="n">hareket</span><span class="p">,</span> <span class="n">nesne_turu</span><span class="p">,</span> <span class="n">hiz</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
    <span class="k">if</span> <span class="ow">not</span> <span class="n">hareket</span><span class="p">:</span>
        <span class="k">return</span> <span class="mi">25</span>  <span class="c1"># Güvenlik için düşük bekleme ışığı
</span>
    <span class="k">if</span> <span class="n">nesne_turu</span> <span class="o">==</span> <span class="sh">"</span><span class="s">yaya</span><span class="sh">"</span><span class="p">:</span>
        <span class="k">return</span> <span class="mi">60</span>
    <span class="k">elif</span> <span class="n">nesne_turu</span> <span class="o">==</span> <span class="sh">"</span><span class="s">bisiklet</span><span class="sh">"</span><span class="p">:</span>
        <span class="k">return</span> <span class="mi">75</span>
    <span class="k">elif</span> <span class="n">nesne_turu</span> <span class="o">==</span> <span class="sh">"</span><span class="s">arac</span><span class="sh">"</span><span class="p">:</span>
        <span class="k">return</span> <span class="nf">min</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">70</span> <span class="o">+</span> <span class="n">hiz</span> <span class="o">*</span> <span class="mf">0.5</span><span class="p">)</span>

    <span class="k">return</span> <span class="mi">50</span>

<span class="n">parlaklik</span> <span class="o">=</span> <span class="nf">hedef_parlaklik</span><span class="p">(</span><span class="bp">True</span><span class="p">,</span> <span class="sh">"</span><span class="s">arac</span><span class="sh">"</span><span class="p">,</span> <span class="mi">50</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">Lamba seviyesi: %</span><span class="si">{</span><span class="n">parlaklik</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<p>Algoritmanın yalnızca mevcut lambayı değil, ilerideki birkaç lambayı da etkinleştirmesi önemlidir. Araç bir direğe ulaştığında komşu direklere mesaj gönderilirse aracın önünde hareket eden bir <strong>ışık koridoru</strong> oluşur.</p>

<h2 id="tasarruf-kadar-güvenlik-de-önemli">Tasarruf kadar güvenlik de önemli</h2>

<p>Akıllı aydınlatmada amaç en düşük enerji tüketimini elde etmek değil, güvenlik koşullarını koruyarak gereksiz tüketimi azaltmaktır. Sensör arızaları, yanlış algılamalar, hava koşulları ve ağ kesintileri hesaba katılmalıdır. Haberleşme başarısız olduğunda lambaların güvenli bir sabit seviyeye geçmesi iyi bir yedekleme yaklaşımıdır.</p>

<p>Doğru tasarlanmış sistemler enerji maliyetlerini düşürür, LED ömrünü uzatır ve ışık kirliliğini azaltır. Kısacası geleceğin sokak lambaları yalnızca çevreyi aydınlatmayacak; çevresini gözlemleyip ne kadar ışığa ihtiyaç olduğunu da kendileri hesaplayacaktır.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="akıllı aydınlatma" /><category term="enerji tasarrufu" /><category term="nesnelerin interneti" /><category term="hareket sensörü" /><category term="akıllı şehirler" /><category term="otomasyon" /><summary type="html"><![CDATA[Gece boyunca tam güçte çalışan sokak lambaları güvenliği artırır; ancak boş bir caddenin saatlerce aydınlatılması ciddi enerji kaybına yol açar. Akıllı aydınlatma sistemleri, yaya ve araç hareketini algılayarak ışık seviyesini gerçek zamanlı biçimde değiştirir. Böylece sokak tamamen karanlık bırakılmadan yalnızca ihtiyaç duyulan yerde ve zamanda yüksek parlaklık sağlanır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/akilli-sokak-lambalari-80.png" /><media:content medium="image" url="https://program.sonsuz.us/img/akilli-sokak-lambalari-80.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Belirtilerden Önce Alarm: Makine Öğrenmesiyle Erken Hastalık Risk Tahmini</title><link href="https://program.sonsuz.us/posts/belirtilerden-once-alarm-makine-ogrenmesiyle-erken-hastalik-risk-tahmini/" rel="alternate" type="text/html" title="Belirtilerden Önce Alarm: Makine Öğrenmesiyle Erken Hastalık Risk Tahmini" /><published>2026-10-29T00:00:00+00:00</published><updated>2026-10-29T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/belirtilerden-once-alarm-makine-ogrenmesiyle-erken-hastalik-risk-tahmini</id><content type="html" xml:base="https://program.sonsuz.us/posts/belirtilerden-once-alarm-makine-ogrenmesiyle-erken-hastalik-risk-tahmini/"><![CDATA[<p>Bir hastalığı belirtiler ortaya çıkmadan tahmin etmek bilim kurgu gibi gelebilir. Oysa elektronik sağlık kayıtları, laboratuvar sonuçları, tıbbi görüntüler, genetik veriler ve akıllı saat ölçümleri bir araya geldiğinde makine öğrenmesi önemli risk sinyallerini yakalayabilir. Ancak burada kritik bir ayrım vardır: Model çoğunlukla hastalığa kesin tanı koymaz; belirli bir zaman aralığında hastalığın gelişme olasılığını hesaplar.</p>

<p>``</p>

<h2 id="risk-tahmini-nasıl-çalışır">Risk tahmini nasıl çalışır?</h2>

<p>Makine öğrenmesi, geçmişte sonucu bilinen hasta verilerindeki örüntüleri öğrenir. Örneğin diyabet riskini tahmin eden bir sistem; yaş, vücut kitle indeksi, açlık glukozu, aile öyküsü ve fiziksel aktivite gibi değişkenleri kullanabilir.</p>

<p>Bir hastanın özelliklerini $x$ ile gösterirsek modelin temel amacı şu olasılığı kestirmektir:</p>

\[P(Y=1 \mid X=x)\]

<p>Burada $Y=1$, belirlenen süre içinde hastalığın geliştiği anlamına gelir. Lojistik regresyon gibi açıklanabilir bir model bu olasılığı şöyle hesaplayabilir:</p>

\[P(Y=1)=\frac{1}{1+e^{-(\beta_0+\beta_1x_1+\cdots+\beta_nx_n)}}\]

<p>Katsayılar, her değişkenin risk üzerindeki etkisini temsil eder. Derin öğrenme modelleriyse çok daha karmaşık ilişkileri öğrenebilir; fakat kararlarını açıklamak genellikle daha zordur.</p>

<h2 id="hangi-veriler-erken-sinyal-taşıyabilir">Hangi veriler erken sinyal taşıyabilir?</h2>

<table>
  <thead>
    <tr>
      <th>Veri türü</th>
      <th>Yakalanabilecek sinyal</th>
      <th>Örnek kullanım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Kan testleri</td>
      <td>Küçük biyobelirteç değişimleri</td>
      <td>Diyabet veya böbrek hastalığı riski</td>
    </tr>
    <tr>
      <td>Tıbbi görüntüler</td>
      <td>İnsan gözünün zor seçtiği dokusal örüntüler</td>
      <td>Kanser taraması</td>
    </tr>
    <tr>
      <td>Elektronik kayıtlar</td>
      <td>Tanı, ilaç ve başvuru geçmişi</td>
      <td>Kalp yetmezliği riski</td>
    </tr>
    <tr>
      <td>Giyilebilir cihazlar</td>
      <td>Nabız, uyku ve hareket sapmaları</td>
      <td>Ritim bozukluğu uyarısı</td>
    </tr>
    <tr>
      <td>Genetik veriler</td>
      <td>Kalıtsal yatkınlık</td>
      <td>Bazı kanser türleri</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/belirtilerden-once-alarm-54.svg" alt="belirtilerden-once-alarm-54" /></p>

<p>Tek bir ölçüm yerine zaman içindeki değişim çoğu zaman daha değerlidir. Örneğin nabzın 80 olması tek başına anlamlı olmayabilir; kişinin aylar boyunca 60 civarında seyreden nabzının sürekli 80’e çıkması dikkat çekici olabilir.</p>

<h2 id="basit-bir-risk-modeli">Basit bir risk modeli</h2>

<p>Aşağıdaki örnek, hasta özelliklerinden ikili risk tahmini yapan sade bir Python iş akışıdır:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">sklearn.model_selection</span> <span class="kn">import</span> <span class="n">train_test_split</span>
<span class="kn">from</span> <span class="n">sklearn.preprocessing</span> <span class="kn">import</span> <span class="n">StandardScaler</span>
<span class="kn">from</span> <span class="n">sklearn.pipeline</span> <span class="kn">import</span> <span class="n">make_pipeline</span>
<span class="kn">from</span> <span class="n">sklearn.linear_model</span> <span class="kn">import</span> <span class="n">LogisticRegression</span>
<span class="kn">from</span> <span class="n">sklearn.metrics</span> <span class="kn">import</span> <span class="n">roc_auc_score</span>

<span class="n">X_train</span><span class="p">,</span> <span class="n">X_test</span><span class="p">,</span> <span class="n">y_train</span><span class="p">,</span> <span class="n">y_test</span> <span class="o">=</span> <span class="nf">train_test_split</span><span class="p">(</span>
    <span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">test_size</span><span class="o">=</span><span class="mf">0.2</span><span class="p">,</span> <span class="n">stratify</span><span class="o">=</span><span class="n">y</span><span class="p">,</span> <span class="n">random_state</span><span class="o">=</span><span class="mi">42</span>
<span class="p">)</span>

<span class="n">model</span> <span class="o">=</span> <span class="nf">make_pipeline</span><span class="p">(</span>
    <span class="nc">StandardScaler</span><span class="p">(),</span>
    <span class="nc">LogisticRegression</span><span class="p">(</span><span class="n">class_weight</span><span class="o">=</span><span class="sh">"</span><span class="s">balanced</span><span class="sh">"</span><span class="p">)</span>
<span class="p">)</span>

<span class="n">model</span><span class="p">.</span><span class="nf">fit</span><span class="p">(</span><span class="n">X_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">)</span>
<span class="n">risk_scores</span> <span class="o">=</span> <span class="n">model</span><span class="p">.</span><span class="nf">predict_proba</span><span class="p">(</span><span class="n">X_test</span><span class="p">)[:,</span> <span class="mi">1</span><span class="p">]</span>
<span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">ROC-AUC:</span><span class="sh">"</span><span class="p">,</span> <span class="nf">roc_auc_score</span><span class="p">(</span><span class="n">y_test</span><span class="p">,</span> <span class="n">risk_scores</span><span class="p">))</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">StandardScaler</code>, değişkenleri benzer ölçeklere getirir. <code class="language-plaintext highlighter-rouge">class_weight="balanced"</code> ise hasta sayısının sağlıklı bireylerden çok az olduğu dengesiz veri kümelerinde modele yardımcı olur. <code class="language-plaintext highlighter-rouge">predict_proba</code>, kesin bir etiket yerine risk skoru üretir.</p>

<h2 id="başarı-yalnızca-doğruluk-değildir">Başarı yalnızca doğruluk değildir</h2>

<p>Nadir hastalıklarda herkese “sağlıklı” diyen bir model yüksek doğruluk gösterebilir. Bu nedenle farklı ölçütler birlikte değerlendirilmelidir:</p>

<table>
  <thead>
    <tr>
      <th>Ölçüt</th>
      <th>Yanıtladığı soru</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Duyarlılık</td>
      <td>Gerçek hastaların ne kadarı yakalandı?</td>
    </tr>
    <tr>
      <td>Özgüllük</td>
      <td>Sağlıklı kişilerin ne kadarı doğru elendi?</td>
    </tr>
    <tr>
      <td>Kesinlik</td>
      <td>Riskli denilenlerin ne kadarı gerçekten hastalandı?</td>
    </tr>
    <tr>
      <td>ROC-AUC</td>
      <td>Model riskli ve risksiz kişileri ne kadar ayırabiliyor?</td>
    </tr>
    <tr>
      <td>Kalibrasyon</td>
      <td>Yüzde 20 risk verilen grubun gerçekten yaklaşık yüzde 20’si hastalanıyor mu?</td>
    </tr>
  </tbody>
</table>

<p>Tarama sistemlerinde yanlış negatifler tehlikelidir; ancak çok fazla yanlış pozitif de gereksiz testlere, maliyete ve kaygıya yol açabilir. Bu yüzden karar eşiği klinik bağlama göre belirlenmelidir.</p>

<h2 id="peki-gerçekten-mümkün-mü">Peki gerçekten mümkün mü?</h2>

<p>Evet, bazı hastalıklar için belirtilerden önce anlamlı risk tahmini yapılabilir. Fakat veri kalitesi, farklı topluluklarda doğrulama, mahremiyet, algoritmik önyargı ve klinik denetim vazgeçilmezdir. Bir hastanede başarılı olan model, başka bir bölgede aynı sonucu vermeyebilir.</p>

<p>En sağlıklı yaklaşım, makine öğrenmesini doktorun yerine geçen dijital bir kâhin olarak değil, dikkat edilmesi gereken hastaları önceliklendiren bir erken uyarı sistemi olarak görmektir. Nihai tanı; hekim değerlendirmesi, doğrulayıcı testler ve hastanın klinik öyküsüyle konmalıdır.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="makine öğrenmesi" /><category term="erken teşhis" /><category term="sağlık teknolojileri" /><category term="yapay zeka" /><category term="risk tahmini" /><category term="veri bilimi" /><summary type="html"><![CDATA[Bir hastalığı belirtiler ortaya çıkmadan tahmin etmek bilim kurgu gibi gelebilir. Oysa elektronik sağlık kayıtları, laboratuvar sonuçları, tıbbi görüntüler, genetik veriler ve akıllı saat ölçümleri bir araya geldiğinde makine öğrenmesi önemli risk sinyallerini yakalayabilir. Ancak burada kritik bir ayrım vardır: Model çoğunlukla hastalığa kesin tanı koymaz; belirli bir zaman aralığında hastalığın gelişme olasılığını hesaplar.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/belirtilerden-once-alarm-54.png" /><media:content medium="image" url="https://program.sonsuz.us/img/belirtilerden-once-alarm-54.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>