<?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-10T06:05:40+00:00</updated><id>https://program.sonsuz.us/feed.xml</id><title type="html">SonsuzUs</title><subtitle>Programlama ve Yazılım</subtitle><author><name>Sonsuz Us</name></author><entry><title type="html">Akıllı Bir Kelime Öğrenme Sistemi Nasıl Tasarlanır?</title><link href="https://program.sonsuz.us/posts/akilli-bir-kelime-ogrenme-sistemi-nasil-tasarlanir/" rel="alternate" type="text/html" title="Akıllı Bir Kelime Öğrenme Sistemi Nasıl Tasarlanır?" /><published>2026-10-10T00:00:00+00:00</published><updated>2026-10-10T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/akilli-bir-kelime-ogrenme-sistemi-nasil-tasarlanir</id><content type="html" xml:base="https://program.sonsuz.us/posts/akilli-bir-kelime-ogrenme-sistemi-nasil-tasarlanir/"><![CDATA[<p>Bir kelimeyi bugün öğrenip yarın unutmak beynimizin küçük bir şakasıdır; kötü hafızadan çok, yanlış zamanda tekrar yapmanın sonucudur. AnkiWeb, Mochi ve Mnemosyne gibi sistemler bu sorunu <strong>aralıklı tekrar</strong> algoritmalarıyla çözer. Gelin benzer bir uygulamanın arkasındaki teoriyi, araçların farklı yaklaşımlarını ve çalışır durumdaki basit bir zamanlama algoritmasını birlikte inceleyelim.</p>

<p><img src="/img/akilli-bir-kelime-63.svg" alt="akilli-bir-kelime-63" /></p>

<p>``</p>

<h2 id="aralıklı-tekrar-neden-işe-yarar">Aralıklı tekrar neden işe yarar?</h2>

<p>Hermann Ebbinghaus’un unutma eğrisi, bir bilginin hatırlanma gücünün zamanla üstel biçimde azaldığını öne sürer. Basitleştirilmiş bir model şöyledir:</p>

\[R(t) = e^{-t/S}\]

<p>Burada $R(t)$ hatırlama olasılığını, $t$ son çalışmadan beri geçen süreyi, $S$ ise anının dayanıklılığını temsil eder. Aynı kelimeyi başarıyla hatırladıkça $S$ büyür; böylece tekrarlar arasındaki süre uzatılabilir.</p>

<p>Örneğin “serendipity” kelimesini ilk gün öğrendiğimizi düşünelim. İlk tekrar bir gün sonra, sonraki tekrar üç gün sonra, ardından sekiz veya on gün sonra yapılabilir. Amaç, kartı tamamen unutmadan hemen önce göstermektir. Çok erken tekrar zaman kaybettirir, çok geç tekrar ise öğrenme sürecini başa sarar.</p>

<h2 id="ankiweb-mochi-ve-mnemosyne-karşılaştırması">AnkiWeb, Mochi ve Mnemosyne karşılaştırması</h2>

<p>Bu araçların ortak hedefi aynı olsa da kullanıcı deneyimleri ve veri modelleri farklıdır:</p>

<table>
  <thead>
    <tr>
      <th>Sistem</th>
      <th>Güçlü yönü</th>
      <th>İçerik yaklaşımı</th>
      <th>Kimler için uygun?</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>AnkiWeb</td>
      <td>Geniş eklenti ve deste sistemi</td>
      <td>Ön yüz, arka yüz ve alanlar</td>
      <td>Ayrıntılı kontrol isteyenler</td>
    </tr>
    <tr>
      <td>Mochi</td>
      <td>Temiz arayüz ve Markdown desteği</td>
      <td>Notlar arasında bağlantılar</td>
      <td>Not alma ile ezberi birleştirenler</td>
    </tr>
    <tr>
      <td>Mnemosyne</td>
      <td>Araştırma odaklı sade yapı</td>
      <td>Klasik soru-cevap kartları</td>
      <td>Dikkat dağıtmayan araç arayanlar</td>
    </tr>
  </tbody>
</table>

<p>Anki ekosistem ve özelleştirme konusunda öne çıkar. Mochi, kartları birbirine bağlayarak kişisel bilgi ağı kurmayı kolaylaştırır. Mnemosyne ise daha sade ve akademik bir yaklaşım sunar. Kısacası Anki bir kontrol paneli, Mochi dijital bahçe, Mnemosyne ise sakin bir çalışma masası gibidir.</p>

<h2 id="temel-veri-modeli">Temel veri modeli</h2>

<p>Kendi sistemimizde her kart için kelime, anlam, örnek cümle, tekrar tarihi, kolaylık katsayısı ve tekrar sayısı saklanabilir. Ayrıca öğrenme yönünü değiştirmek yararlıdır: “apple → elma” kartı tanımayı, “elma → apple” kartı ise aktif hatırlamayı ölçer.</p>

<p>Basit bir kart modeli şu alanları içerebilir:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">front</code>: Sorulan kelime veya ipucu</li>
  <li><code class="language-plaintext highlighter-rouge">back</code>: Anlam ve örnek cümle</li>
  <li><code class="language-plaintext highlighter-rouge">interval</code>: Bir sonraki tekrara kalan gün</li>
  <li><code class="language-plaintext highlighter-rouge">ease</code>: Kartın kişisel zorluk katsayısı</li>
  <li><code class="language-plaintext highlighter-rouge">due</code>: Gösterileceği tarih</li>
</ul>

<h2 id="basitleştirilmiş-sm-2-zamanlayıcısı">Basitleştirilmiş SM-2 zamanlayıcısı</h2>

<p>Aşağıdaki Python fonksiyonu, kullanıcının 0 ile 5 arasındaki cevabına göre yeni tekrar aralığını hesaplar:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">schedule_card</span><span class="p">(</span><span class="n">quality</span><span class="p">,</span> <span class="n">repetitions</span><span class="p">,</span> <span class="n">interval</span><span class="p">,</span> <span class="n">ease</span><span class="p">):</span>
    <span class="c1"># 3'ten düşük puan, kartın hatırlanamadığını gösterir.
</span>    <span class="k">if</span> <span class="n">quality</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">:</span>
        <span class="n">repetitions</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">interval</span> <span class="o">=</span> <span class="mi">1</span>
    <span class="k">else</span><span class="p">:</span>
        <span class="n">repetitions</span> <span class="o">+=</span> <span class="mi">1</span>

        <span class="k">if</span> <span class="n">repetitions</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
            <span class="n">interval</span> <span class="o">=</span> <span class="mi">1</span>
        <span class="k">elif</span> <span class="n">repetitions</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
            <span class="n">interval</span> <span class="o">=</span> <span class="mi">6</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">interval</span> <span class="o">=</span> <span class="nf">round</span><span class="p">(</span><span class="n">interval</span> <span class="o">*</span> <span class="n">ease</span><span class="p">)</span>

    <span class="c1"># Başarılı cevap kolaylığı artırır, zor cevap azaltır.
</span>    <span class="n">ease</span> <span class="o">+=</span> <span class="mf">0.1</span> <span class="o">-</span> <span class="p">(</span><span class="mi">5</span> <span class="o">-</span> <span class="n">quality</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="mf">0.08</span> <span class="o">+</span> <span class="p">(</span><span class="mi">5</span> <span class="o">-</span> <span class="n">quality</span><span class="p">)</span> <span class="o">*</span> <span class="mf">0.02</span><span class="p">)</span>
    <span class="n">ease</span> <span class="o">=</span> <span class="nf">max</span><span class="p">(</span><span class="mf">1.3</span><span class="p">,</span> <span class="n">ease</span><span class="p">)</span>

    <span class="k">return</span> <span class="n">repetitions</span><span class="p">,</span> <span class="n">interval</span><span class="p">,</span> <span class="n">ease</span>

<span class="nf">print</span><span class="p">(</span><span class="nf">schedule_card</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mf">2.5</span><span class="p">))</span>
</code></pre></div></div>

<p>Fonksiyon kart unutulduğunda programı sıfırlar; doğru cevaplarda ise mevcut aralığı kolaylık katsayısıyla büyütür. $I_{yeni} = I_{eski} \times E$ ilişkisi, uzun vadede tekrar sayısını ciddi biçimde azaltır. Gerçek bir uygulamada saat dilimi, günlük kart sınırı, gecikmiş tekrarlar ve kullanıcı alışkanlıkları da hesaba katılmalıdır.</p>

<h2 id="i̇yi-bir-sistemin-sırrı">İyi bir sistemin sırrı</h2>

<p>Algoritma tek başına mucize yaratmaz. Kartlar kısa olmalı, tek bir bilgiyi sınamalı ve kelimeyi bağlam içinde göstermelidir. Görsel, ses kaydı ve gerçek bir örnek cümle hatırlamayı güçlendirir. En iyi araç; en gelişmiş formüle sahip olan değil, her gün açmayı unutmadığınız araçtır. Beş dakikalık düzenli tekrar, pazar gecesi yapılan iki saatlik kelime maratonunu çoğu zaman rahatça yener.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Proje" /><category term="kelime öğrenme" /><category term="aralıklı tekrar" /><category term="anki" /><category term="mochi" /><category term="mnemosyne" /><category term="python" /><summary type="html"><![CDATA[Bir kelimeyi bugün öğrenip yarın unutmak beynimizin küçük bir şakasıdır; kötü hafızadan çok, yanlış zamanda tekrar yapmanın sonucudur. AnkiWeb, Mochi ve Mnemosyne gibi sistemler bu sorunu aralıklı tekrar algoritmalarıyla çözer. Gelin benzer bir uygulamanın arkasındaki teoriyi, araçların farklı yaklaşımlarını ve çalışır durumdaki basit bir zamanlama algoritmasını birlikte inceleyelim.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/akilli-bir-kelime-63.png" /><media:content medium="image" url="https://program.sonsuz.us/img/akilli-bir-kelime-63.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Dişli Çarklardan Silikon Çiplere: Bilgisayarın Gelişim Tarihi</title><link href="https://program.sonsuz.us/posts/disli-carklardan-silikon-ciplere-bilgisayarin-gelisim-tarihi/" rel="alternate" type="text/html" title="Dişli Çarklardan Silikon Çiplere: Bilgisayarın Gelişim Tarihi" /><published>2026-10-10T00:00:00+00:00</published><updated>2026-10-10T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/disli-carklardan-silikon-ciplere-bilgisayarin-gelisim-tarihi</id><content type="html" xml:base="https://program.sonsuz.us/posts/disli-carklardan-silikon-ciplere-bilgisayarin-gelisim-tarihi/"><![CDATA[<p>Bugün cebimizde taşıdığımız telefonlar, birkaç on yıl önce odaları dolduran bilgisayarlardan milyonlarca kat daha güçlü. Ancak bu teknolojik yolculuk bir anda başlamadı. Dişli çarklarla çalışan hesap makinelerinden vakum tüplerine, transistörlerden milyarlarca bileşen içeren işlemcilere uzanan bilgisayar tarihi; matematik, mühendislik ve insan merakının ortak ürünüdür.</p>

<p>``</p>

<h2 id="mekanik-hesaplamanın-doğuşu">Mekanik hesaplamanın doğuşu</h2>

<p>Bilgisayarların uzak atalarından biri, 1642 yılında Blaise Pascal tarafından geliştirilen <strong>Pascaline</strong> adlı mekanik hesap makinesiydi. Dişli çarklar kullanan bu cihaz toplama ve çıkarma yapabiliyordu. Gottfried Wilhelm Leibniz ise 1670’lerde sistemi geliştirerek çarpma ve bölme işlemlerini de mekanikleştirdi.</p>

<p>Bu makinelerin temel fikri, sayıları fiziksel konumlarla temsil etmekti. Örneğin bir çarkın on farklı konumu, 0 ile 9 arasındaki rakamlara karşılık geliyordu. Günümüzde aynı yaklaşım elektrik sinyalleriyle uygulanır; ancak on durum yerine çoğunlukla iki durum kullanılır:</p>

\[bit \in \{0,1\}\]

<p>Mekanik sistemlerde hareket eden parçalar bilgiyi taşırken modern bilgisayarlarda bu görevi gerilim seviyeleri üstlenir.</p>

<h2 id="programlanabilir-makine-fikri">Programlanabilir makine fikri</h2>

<p>1800’lerin başında Joseph Marie Jacquard, dokuma tezgâhlarını <strong>delikli kartlarla</strong> kontrol etti. Kartlardaki delikler bir tür komut dizisi oluşturuyordu. Charles Babbage bu fikirden etkilenerek 1837’de <strong>Analitik Makine</strong> tasarımını ortaya koydu.</p>

<p>Babbage’ın makinesi tamamlanamamış olsa da işlem birimi, bellek, giriş ve çıkış gibi modern bilgisayar bileşenlerini teorik olarak içeriyordu. Ada Lovelace ise makinenin Bernoulli sayılarını hesaplaması için bir algoritma hazırladı ve tarihin ilk bilgisayar programcısı kabul edildi.</p>

<h2 id="elektronik-bilgisayarlar-sahneye-çıkıyor">Elektronik bilgisayarlar sahneye çıkıyor</h2>

<p>1940’larda mekanik parçaların yerini röleler ve vakum tüpleri aldı. 1946’da tanıtılan <strong>ENIAC</strong>, yaklaşık 18.000 vakum tüpü kullanıyor ve saniyede binlerce işlem gerçekleştirebiliyordu. Ne var ki devasa boyutlu, enerji oburu ve arızaya yatkındı.</p>

<table>
  <thead>
    <tr>
      <th>Dönem</th>
      <th>Temel teknoloji</th>
      <th>Başlıca avantaj</th>
      <th>Başlıca sorun</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1600–1800</td>
      <td>Dişli çarklar</td>
      <td>Hesabı otomatikleştirme</td>
      <td>Yavaşlık ve aşınma</td>
    </tr>
    <tr>
      <td>1940’lar</td>
      <td>Vakum tüpleri</td>
      <td>Elektronik hız</td>
      <td>Isınma ve yüksek enerji</td>
    </tr>
    <tr>
      <td>1950–1960</td>
      <td>Transistörler</td>
      <td>Küçük boyut, güvenilirlik</td>
      <td>Üretim maliyeti</td>
    </tr>
    <tr>
      <td>1970 sonrası</td>
      <td>Mikroişlemciler</td>
      <td>Yüksek entegrasyon</td>
      <td>Isı ve karmaşıklık</td>
    </tr>
    <tr>
      <td>Günümüz</td>
      <td>Çok çekirdekli çipler</td>
      <td>Paralel işlem</td>
      <td>Güç tüketimi sınırları</td>
    </tr>
  </tbody>
</table>

<h2 id="transistör-ve-mikroişlemci-devrimi">Transistör ve mikroişlemci devrimi</h2>

<p>1947’de transistörün geliştirilmesi bilgisayarları küçülttü, hızlandırdı ve daha güvenilir hâle getirdi. Ardından çok sayıda transistörün aynı yüzeye yerleştirildiği <strong>entegre devreler</strong> ortaya çıktı. 1971’de Intel 4004, ticari açıdan başarılı ilk mikroişlemcilerden biri oldu.</p>

<p>İşlemci performansı kabaca saat frekansı, çekirdek sayısı ve saat başına tamamlanan komut miktarıyla ilişkilendirilebilir:</p>

\[P \approx f \times C \times IPC\]

<p>Burada $f$ frekansı, $C$ çekirdek sayısını, $IPC$ ise döngü başına işlenen komut sayısını temsil eder. Gerçek performans bellek, önbellek ve yazılım tasarımından da etkilenir.</p>

<p>İkili sistemin temel mantığını küçük bir Python örneğiyle görebiliriz:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">ikili_topla</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
    <span class="c1"># Metin biçimindeki ikili sayıları onlu sisteme çevirir.
</span>    <span class="n">toplam</span> <span class="o">=</span> <span class="nf">int</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="o">+</span> <span class="nf">int</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>

    <span class="c1"># Sonucu yeniden ikili gösterime dönüştürür.
</span>    <span class="k">return</span> <span class="nf">bin</span><span class="p">(</span><span class="n">toplam</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>

<span class="nf">print</span><span class="p">(</span><span class="nf">ikili_topla</span><span class="p">(</span><span class="sh">"</span><span class="s">1010</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">0111</span><span class="sh">"</span><span class="p">))</span>  <span class="c1"># 10001
</span></code></pre></div></div>

<p>Bu kod, işlemcideki gerçek mantık kapılarının yaptığı işi soyut düzeyde taklit eder. Donanımda toplama; AND, OR ve XOR gibi devrelerle gerçekleştirilir.</p>

<h2 id="günümüz-paralellik-ve-uzmanlaşma">Günümüz: Paralellik ve uzmanlaşma</h2>

<p>Transistör sayısının yaklaşık iki yılda bir artacağını öngören <strong>Moore Yasası</strong>, onlarca yıl boyunca sektöre yön verdi. Fiziksel küçülmenin zorlaşmasıyla üreticiler yalnızca frekansı artırmak yerine çok çekirdekli mimarilere yöneldi. GPU’lar grafik işlemlerinin yanında yapay zekâ ve bilimsel hesaplama için kullanılmaya başlandı. NPU gibi özel birimler ise belirli görevleri daha az enerjiyle tamamlıyor.</p>

<p>Kısacası bilgisayarın gelişimi, “daha hızlı hesaplama” arzusundan “doğru işi doğru donanımla yapma” anlayışına evrildi. Pascal’ın çarklarından modern işlemcilerin nanometre ölçeğindeki transistörlerine kadar değişmeyen temel amaç ise aynı kaldı: bilgiyi temsil etmek, kurallara göre işlemek ve anlamlı sonuç üretmek.</p>

<p><img src="/img/disli-carklardan-silikon-55.svg" alt="disli-carklardan-silikon-55" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="bilgisayar tarihi" /><category term="işlemci" /><category term="teknoloji" /><category term="programlama" /><category term="donanım" /><category term="yapay zeka" /><summary type="html"><![CDATA[Bugün cebimizde taşıdığımız telefonlar, birkaç on yıl önce odaları dolduran bilgisayarlardan milyonlarca kat daha güçlü. Ancak bu teknolojik yolculuk bir anda başlamadı. Dişli çarklarla çalışan hesap makinelerinden vakum tüplerine, transistörlerden milyarlarca bileşen içeren işlemcilere uzanan bilgisayar tarihi; matematik, mühendislik ve insan merakının ortak ürünüdür.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/disli-carklardan-silikon-55.png" /><media:content medium="image" url="https://program.sonsuz.us/img/disli-carklardan-silikon-55.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Flashcard Arenasında Üç Rakip: Anki, Mnemosyne ve Mochi</title><link href="https://program.sonsuz.us/posts/flashcard-arenasinda-uc-rakip-anki-mnemosyne-ve-mochi/" rel="alternate" type="text/html" title="Flashcard Arenasında Üç Rakip: Anki, Mnemosyne ve Mochi" /><published>2026-10-10T00:00:00+00:00</published><updated>2026-10-10T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/flashcard-arenasinda-uc-rakip-anki-mnemosyne-ve-mochi</id><content type="html" xml:base="https://program.sonsuz.us/posts/flashcard-arenasinda-uc-rakip-anki-mnemosyne-ve-mochi/"><![CDATA[<p>Bir bilgiyi öğrenmek kolay, onu üç ay sonra hatırlamak ise bambaşka bir oyundur. Flashcard uygulamaları bu oyunda beynimize küçük ama düzenli paslar atar. Anki, Mnemosyne ve Mochi aynı temel fikri, yani <strong>aralıklı tekrarı</strong>, farklı arayüzler ve çalışma modelleriyle uygular. Gelin bu üç aracı karşılaştıralım ve kartların neden doğru zamanda karşımıza çıktığını anlayalım.</p>

<p><img src="/img/flashcard-arenasinda-uc-93.svg" alt="flashcard-arenasinda-uc-93" /></p>

<p>``</p>

<h2 id="aralıklı-tekrar-neden-işe-yarar">Aralıklı tekrar neden işe yarar?</h2>

<p>İnsan belleği, kullanılmayan bilgiyi zamanla silikleştirir. Basitleştirilmiş bir unutma eğrisi şu şekilde gösterilebilir:</p>

\[R(t)=e^{-t/S}\]

<p>Burada $R(t)$ bilgiyi hatırlama olasılığı, $t$ son tekrardan beri geçen süre, $S$ ise belleğin dayanıklılığıdır. Bir kartı başarıyla hatırladığımızda $S$ büyür; böylece bir sonraki tekrar daha ileri bir tarihe taşınabilir.</p>

<p>Basit bir planlayıcı, yeni aralığı yaklaşık olarak şöyle hesaplayabilir:</p>

\[I_{yeni}=I_{eski}\times E\times P\]

<p>$I$ tekrar aralığını, $E$ kartın kolaylık katsayısını, $P$ ise kullanıcının verdiği performans puanını temsil eder. Gerçek uygulamalar başarısızlıkları, gecikmiş tekrarları ve öğrenme geçmişini hesaba katan daha gelişmiş modeller kullanır. Dolayısıyla amaç her kartı her gün göstermek değil, <strong>unutmaya yaklaşırken</strong> göstermektir.</p>

<h2 id="üç-uygulama-üç-farklı-karakter">Üç uygulama, üç farklı karakter</h2>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Anki</th>
      <th>Mnemosyne</th>
      <th>Mochi</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Temel yaklaşım</td>
      <td>Güçlü planlama ve özelleştirme</td>
      <td>Sade, akademik odaklı tekrar</td>
      <td>Notlar ile kartları birleştirme</td>
    </tr>
    <tr>
      <td>Kullanım hissi</td>
      <td>Ayrıntılı fakat öğrenme eğrisi yüksek</td>
      <td>Geleneksel ve doğrudan</td>
      <td>Modern ve görsel</td>
    </tr>
    <tr>
      <td>Kart yapısı</td>
      <td>Şablonlar, alanlar ve eklentiler</td>
      <td>Soru-cevap merkezli kartlar</td>
      <td>Markdown tabanlı bağlantılı notlar</td>
    </tr>
    <tr>
      <td>Uygun kullanıcı</td>
      <td>Kontrolü seven yoğun öğrenci</td>
      <td>Dikkat dağıtmayan araç arayan kişi</td>
      <td>Not ağı kurmak isteyen kullanıcı</td>
    </tr>
    <tr>
      <td>Öne çıkan yön</td>
      <td>Geniş ekosistem ve gelişmiş zamanlama</td>
      <td>Açık kaynaklı, yalın deneyim</td>
      <td>Kartlar arasında bağlantı kurabilme</td>
    </tr>
  </tbody>
</table>

<h3 id="anki-ayar-panelini-sevenlerin-laboratuvarı">Anki: Ayar panelini sevenlerin laboratuvarı</h3>

<p>Anki; kart şablonları, etiketler, medya desteği ve eklentileriyle oldukça esnektir. Modern sürümlerde FSRS gibi, geçmiş tekrar verilerinden yararlanarak daha verimli aralıklar üretmeyi amaçlayan zamanlama seçenekleri bulunur. Buna karşılık ilk deste hazırlamak, alanlarla şablonların farkını anlamak ve ayarları düzenlemek başlangıçta yorucu olabilir.</p>

<p>Dil öğrenenler, tıp öğrencileri ve binlerce kart yöneten kullanıcılar için güçlü bir seçenektir. Fakat her ayarı değiştirmek zorunda değilsiniz; varsayılanlarla başlayıp gerçek ihtiyaca göre ilerlemek daha sağlıklıdır.</p>

<h3 id="mnemosyne-gösterişsiz-ama-disiplinli">Mnemosyne: Gösterişsiz ama disiplinli</h3>

<p>Adını Yunan mitolojisindeki hafıza tanrıçasından alan Mnemosyne, aralıklı tekrar dünyasının köklü araçlarındandır. Arayüzü modern uygulamalar kadar parlak görünmeyebilir; buna karşın kart oluşturma ve puanlama akışı nettir. Açık kaynak yaklaşımı ve araştırma odaklı geçmişi önemli avantajlarıdır.</p>

<p>“Not sistemi değil, yalnızca düzgün çalışan bir tekrar aracı istiyorum” diyorsanız Mnemosyne mantıklı bir adaydır. Daha küçük eklenti ekosistemi ve sınırlı görsel cilası ise bazı kullanıcıları Anki veya Mochi’ye yöneltebilir.</p>

<h3 id="mochi-not-alırken-kart-üretmek">Mochi: Not alırken kart üretmek</h3>

<p>Mochi, Markdown notları ile flashcard sistemini aynı ortamda buluşturur. Kartlar arasında bağlantı kurabilmek, tek tek gerçekleri ezberlemek yerine kavram ağı oluşturmayı kolaylaştırır. Özellikle yazılım, tarih veya felsefe gibi ilişkisel konularda bu yaklaşım değerlidir.</p>

<p>Ancak zengin bağlantılar kurmak, otomatik olarak iyi öğrenme anlamına gelmez. Kartlar kısa, açık ve tek bir bilgiyi ölçer durumda olmalıdır. Ayrıca çevrim içi özellikler ve ücretlendirme seçenekleri zamanla değişebileceğinden güncel planlar kontrol edilmelidir.</p>

<h2 id="mini-bir-zamanlayıcı-nasıl-çalışır">Mini bir zamanlayıcı nasıl çalışır?</h2>

<p>Aşağıdaki Python kodu, doğru yanıtta aralığı büyüten, yanlış yanıtta kartı ertesi güne döndüren basitleştirilmiş bir modeldir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">sonraki_aralik</span><span class="p">(</span><span class="n">mevcut_gun</span><span class="p">,</span> <span class="n">puan</span><span class="p">,</span> <span class="n">kolaylik</span><span class="o">=</span><span class="mf">2.2</span><span class="p">):</span>
    <span class="c1"># 0-2 başarısız, 3-5 başarılı kabul edilir.
</span>    <span class="k">if</span> <span class="n">puan</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">:</span>
        <span class="k">return</span> <span class="mi">1</span>

    <span class="n">performans</span> <span class="o">=</span> <span class="mf">0.8</span> <span class="o">+</span> <span class="p">(</span><span class="n">puan</span> <span class="o">-</span> <span class="mi">3</span><span class="p">)</span> <span class="o">*</span> <span class="mf">0.2</span>
    <span class="n">yeni_aralik</span> <span class="o">=</span> <span class="n">mevcut_gun</span> <span class="o">*</span> <span class="n">kolaylik</span> <span class="o">*</span> <span class="n">performans</span>
    <span class="k">return</span> <span class="nf">max</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nf">round</span><span class="p">(</span><span class="n">yeni_aralik</span><span class="p">))</span>

<span class="nf">print</span><span class="p">(</span><span class="nf">sonraki_aralik</span><span class="p">(</span><span class="mi">7</span><span class="p">,</span> <span class="mi">4</span><span class="p">))</span>  <span class="c1"># Yaklaşık 15 gün
</span></code></pre></div></div>

<p>Bu örnek öğreticidir; gerçek planlayıcılar çok daha fazla veri kullanır. Yine de temel fikir açıktır: başarı aralığı büyütür, başarısızlık kartı yaklaştırır.</p>

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

<p>Maksimum özelleştirme ve büyük deste yönetimi için <strong>Anki</strong>, sade ve açık kaynaklı bir çalışma düzeni için <strong>Mnemosyne</strong>, bağlantılı Markdown notlarıyla öğrenmek için <strong>Mochi</strong> öne çıkar. En iyi sistem, en gelişmiş algoritmaya sahip olan değil, her gün açmayı sürdürebildiğiniz sistemdir. Önce 20 kartlık küçük bir deste hazırlayın, bir hafta deneyin ve kararınızı gerçek çalışma alışkanlığınıza göre verin.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Program" /><category term="flashcard" /><category term="anki" /><category term="mnemosyne" /><category term="mochi" /><category term="aralıklı tekrar" /><category term="öğrenme" /><summary type="html"><![CDATA[Bir bilgiyi öğrenmek kolay, onu üç ay sonra hatırlamak ise bambaşka bir oyundur. Flashcard uygulamaları bu oyunda beynimize küçük ama düzenli paslar atar. Anki, Mnemosyne ve Mochi aynı temel fikri, yani aralıklı tekrarı, farklı arayüzler ve çalışma modelleriyle uygular. Gelin bu üç aracı karşılaştıralım ve kartların neden doğru zamanda karşımıza çıktığını anlayalım.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/flashcard-arenasinda-uc-93.png" /><media:content medium="image" url="https://program.sonsuz.us/img/flashcard-arenasinda-uc-93.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Rastgele Soru Üretme Sistemleri: H5P, Moodle Question Bank ve Özel Algoritmalar</title><link href="https://program.sonsuz.us/posts/rastgele-soru-uretme-sistemleri-h5p-moodle-question-bank-ve-ozel-algoritmalar/" rel="alternate" type="text/html" title="Rastgele Soru Üretme Sistemleri: H5P, Moodle Question Bank ve Özel Algoritmalar" /><published>2026-10-10T00:00:00+00:00</published><updated>2026-10-10T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/rastgele-soru-uretme-sistemleri-h5p-moodle-question-bank-ve-ozel-algoritmalar</id><content type="html" xml:base="https://program.sonsuz.us/posts/rastgele-soru-uretme-sistemleri-h5p-moodle-question-bank-ve-ozel-algoritmalar/"><![CDATA[<p>Her öğrenciye farklı görünen ama aynı kazanımı ölçen bir sınav hazırlamak, eğitim teknolojilerinin en eğlenceli problemlerinden biridir. Rastgele soru üretme sistemleri; hazır bir havuzdan soru seçebilir, seçeneklerin sırasını değiştirebilir veya matematiksel parametrelerden yepyeni sorular oluşturabilir. H5P hızlı etkileşimler, Moodle Question Bank kapsamlı sınav yönetimi, özel algoritmalar ise neredeyse sınırsız üretim özgürlüğü sunar.</p>

<p>``</p>

<h2 id="rastgelelik-gerçekte-ne-anlama-gelir">Rastgelelik gerçekte ne anlama gelir?</h2>

<p>Bir sistemde $N$ adet soru varsa ve sınav için bunlardan $k$ tanesi eşit olasılıkla seçiliyorsa, belirli bir sorunun sınava girme olasılığı yaklaşık olarak</p>

\[P(\text{sorunun seçilmesi}) = \frac{k}{N}\]

<p>olur. Örneğin 100 soruluk havuzdan 20 soru seçildiğinde her sorunun sınavda görünme olasılığı $0.20$ seviyesindedir. Ancak gerçek kalite yalnızca rastgele seçimden gelmez. Zorluk, konu dağılımı ve öğrenme çıktıları da dengelenmelidir.</p>

<p>Daha kontrollü bir modelde sınav; 4 kolay, 4 orta ve 2 zor sorudan oluşturulabilir. Buna <strong>katmanlı rastgele seçim</strong> denir. Böylece bir öğrenci tamamen kolay, başka biri tamamen zor bir sınavla karşılaşmaz.</p>

<h2 id="üç-yaklaşımın-karşılaştırması">Üç yaklaşımın karşılaştırması</h2>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Güçlü yanı</th>
      <th>Sınırlaması</th>
      <th>En uygun kullanım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>H5P</td>
      <td>Görsel ve etkileşimli içerik</td>
      <td>Gelişmiş soru üretimi sınırlı</td>
      <td>Ders içi alıştırmalar</td>
    </tr>
    <tr>
      <td>Moodle Question Bank</td>
      <td>Kategori, etiket ve sınav analizi</td>
      <td>Yapılandırma zaman alabilir</td>
      <td>Ölçme ve değerlendirme</td>
    </tr>
    <tr>
      <td>Özel algoritma</td>
      <td>Parametrik ve sınırsız üretim</td>
      <td>Yazılım geliştirme gerektirir</td>
      <td>Uyarlanabilir sınavlar</td>
    </tr>
  </tbody>
</table>

<h2 id="h5p-ile-hızlı-etkileşim">H5P ile hızlı etkileşim</h2>

<p>H5P; Multiple Choice, Fill in the Blanks ve Question Set gibi içerik türleriyle çalışır. Seçenek sıralaması karıştırılabilir ve bir soru setinden belirli sayıda içerik gösterilebilir. En büyük avantajı, öğrencinin anında geri bildirim almasıdır.</p>

<p>Bununla birlikte H5P çoğunlukla önceden hazırlanmış içerikleri rastgele sunar. Örneğin her seferinde farklı katsayılara sahip bir denklem oluşturmak istiyorsanız ek JavaScript geliştirmesi veya harici bir servis gerekebilir.</p>

<h2 id="moodle-question-bank-ile-kontrollü-seçim">Moodle Question Bank ile kontrollü seçim</h2>

<p>Moodle soruları kategoriler altında saklayabilir. “Cebir/Kolay” ve “Cebir/Zor” gibi kategoriler oluşturup sınava her kategoriden rastgele soru eklemek mümkündür. Ayrıca <strong>Calculated Question</strong> türü, değişkenleri belirli aralıklardan seçerek parametrik sorular üretir.</p>

<p>Örneğin $a$ ve $b$ rastgele seçildiğinde öğrenciye $a+b$ sorulabilir. $a \in [2,10]$ ve $b \in [5,20]$ tanımlanırsa sistem çok sayıda varyasyon oluşturur. Tolerans, birim ve ondalık hassasiyeti gibi ayrıntılar da Moodle üzerinden yönetilebilir.</p>

<h2 id="özel-algoritma-nasıl-kurulur">Özel algoritma nasıl kurulur?</h2>

<p>Basit bir JavaScript fonksiyonu, iki katsayı seçip birinci dereceden denklem üretebilir:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nf">denklemUret</span><span class="p">()</span> <span class="p">{</span>
  <span class="kd">const</span> <span class="nx">x</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nf">floor</span><span class="p">(</span><span class="nb">Math</span><span class="p">.</span><span class="nf">random</span><span class="p">()</span> <span class="o">*</span> <span class="mi">9</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
  <span class="kd">const</span> <span class="nx">a</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nf">floor</span><span class="p">(</span><span class="nb">Math</span><span class="p">.</span><span class="nf">random</span><span class="p">()</span> <span class="o">*</span> <span class="mi">8</span><span class="p">)</span> <span class="o">+</span> <span class="mi">2</span><span class="p">;</span>
  <span class="kd">const</span> <span class="nx">b</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nf">floor</span><span class="p">(</span><span class="nb">Math</span><span class="p">.</span><span class="nf">random</span><span class="p">()</span> <span class="o">*</span> <span class="mi">20</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>

  <span class="k">return</span> <span class="p">{</span>
    <span class="na">soru</span><span class="p">:</span> <span class="s2">`</span><span class="p">${</span><span class="nx">a</span><span class="p">}</span><span class="s2">x + </span><span class="p">${</span><span class="nx">b</span><span class="p">}</span><span class="s2"> = </span><span class="p">${</span><span class="nx">a</span> <span class="o">*</span> <span class="nx">x</span> <span class="o">+</span> <span class="nx">b</span><span class="p">}</span><span class="s2"> denkleminde x kaçtır?`</span><span class="p">,</span>
    <span class="na">cevap</span><span class="p">:</span> <span class="nx">x</span>
  <span class="p">};</span>
<span class="p">}</span>

<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="nf">denklemUret</span><span class="p">());</span>
</code></pre></div></div>

<p>Kod önce doğru cevabı belirler, ardından bu cevaba uygun denklem kurar. Bu yaklaşım önemlidir; rastgele bir soru üretip sonradan çözmeye çalışmak yerine, <strong>cevaptan soruya doğru üretim</strong> hatalı veya çözümsüz örneklerin önüne geçer.</p>

<h2 id="adil-ve-güvenilir-bir-sistem-için">Adil ve güvenilir bir sistem için</h2>

<p>Gerçek sınavlarda sözde rastgele sayı üreteci için bir <code class="language-plaintext highlighter-rouge">seed</code> saklamak yararlıdır. Aynı seed kullanıldığında aynı sınav yeniden oluşturulabilir; böylece öğrenci itirazları incelenebilir. Ayrıca algoritma şu kontrollerden geçmelidir:</p>

<ul>
  <li>Aynı sorunun sınav içinde tekrarlanmaması</li>
  <li>Yanlış seçeneklerin doğru cevaptan farklı olması</li>
  <li>Zorluk dağılımının korunması</li>
  <li>Üretilen değerlerin anlamlı aralıklarda kalması</li>
  <li>Soru sürümlerinin ve seed bilgilerinin kaydedilmesi</li>
</ul>

<p>Hızlı ve görsel etkinliklerde H5P, kurumsal sınavlarda Moodle, benzersiz ve uyarlanabilir senaryolarda ise özel algoritmalar öne çıkar. En güçlü çözüm çoğu zaman bunları yarıştırmak değil, H5P’nin etkileşimini Moodle’ın soru bankası ve özel bir üretim servisinin esnekliğiyle birleştirmektir.</p>

<p><img src="/img/rastgele-soru-uretme-18.svg" alt="rastgele-soru-uretme-18" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="h5p" /><category term="moodle" /><category term="soru-bankası" /><category term="algoritma" /><category term="eğitim-teknolojileri" /><category term="rastgeleleştirme" /><summary type="html"><![CDATA[Her öğrenciye farklı görünen ama aynı kazanımı ölçen bir sınav hazırlamak, eğitim teknolojilerinin en eğlenceli problemlerinden biridir. Rastgele soru üretme sistemleri; hazır bir havuzdan soru seçebilir, seçeneklerin sırasını değiştirebilir veya matematiksel parametrelerden yepyeni sorular oluşturabilir. H5P hızlı etkileşimler, Moodle Question Bank kapsamlı sınav yönetimi, özel algoritmalar ise neredeyse sınırsız üretim özgürlüğü sunar.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/rastgele-soru-uretme-18.png" /><media:content medium="image" url="https://program.sonsuz.us/img/rastgele-soru-uretme-18.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Zekâ Soruları Platformu: H5P, Moodle ve Özel Soru Bankasıyla Akıllı Bir Sistem Kurmak</title><link href="https://program.sonsuz.us/posts/zeka-sorulari-platformu-h5p-moodle-ve-ozel-soru-bankasiyla-akilli-bir-sistem-kurmak/" rel="alternate" type="text/html" title="Zekâ Soruları Platformu: H5P, Moodle ve Özel Soru Bankasıyla Akıllı Bir Sistem Kurmak" /><published>2026-10-10T00:00:00+00:00</published><updated>2026-10-10T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/zeka-sorulari-platformu-h5p-moodle-ve-ozel-soru-bankasiyla-akilli-bir-sistem-kurmak</id><content type="html" xml:base="https://program.sonsuz.us/posts/zeka-sorulari-platformu-h5p-moodle-ve-ozel-soru-bankasiyla-akilli-bir-sistem-kurmak/"><![CDATA[<p>Zekâ soruları yalnızca “Doğru cevap hangisi?” demekten ibaret değildir; süre yönetimi, ipucu kullanımı, zorluk dengesi ve çözüm yolunun açıklanması da deneyimin parçasıdır. H5P’nin etkileşimli içeriklerini, Moodle’ın öğrenme yönetimi yeteneklerini ve özel bir soru bankasının esnekliğini birleştirerek hem eğlenceli hem de ölçülebilir bir zekâ soruları platformu geliştirebiliriz.</p>

<p>``</p>

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

<p>Platformu üç katmanlı düşünmek işleri kolaylaştırır. H5P, sorunun kullanıcıya nasıl sunulacağını belirler. Moodle; kullanıcı, ders, yetki, not ve raporlama süreçlerini yönetir. Özel soru bankası ise soruların kategorilerini, zorluk seviyelerini, sürümlerini ve istatistiklerini saklar.</p>

<p>Bir sorunun zorluk değeri yalnızca geliştiricinin tahminiyle belirlenmemelidir. Kullanıcıların başarı oranından yararlanılabilir. Bir soruyu $N$ kişi çözmüş ve $D$ kişi doğru cevaplamışsa kolaylık indeksi şöyle hesaplanır:</p>

\[p = \frac{D}{N}\]

<p>$p$ değeri 1’e yaklaştıkça soru kolaylaşır. Zorluk puanını $z = 1-p$ olarak tanımlarsak yüksek değerler daha zor soruları temsil eder. Örneğin 100 kişiden 25’i doğru cevap verdiyse $p=0.25$ ve $z=0.75$ olur.</p>

<h2 id="hangi-bileşen-ne-yapmalı">Hangi bileşen ne yapmalı?</h2>

<table>
  <thead>
    <tr>
      <th>Bileşen</th>
      <th>Güçlü tarafı</th>
      <th>Sınırlaması</th>
      <th>Önerilen rol</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>H5P</td>
      <td>Etkileşimli ve görsel soru tipleri</td>
      <td>Karmaşık veri analizinde sınırlı</td>
      <td>Soru arayüzü ve geri bildirim</td>
    </tr>
    <tr>
      <td>Moodle</td>
      <td>Kullanıcı, ders, not ve yetki yönetimi</td>
      <td>Özel oyun mekanikleri ek geliştirme ister</td>
      <td>Ana platform ve raporlama</td>
    </tr>
    <tr>
      <td>Özel soru bankası</td>
      <td>Tam esneklik ve gelişmiş filtreleme</td>
      <td>Bakım ve güvenlik sorumluluğu getirir</td>
      <td>Merkezi içerik ve istatistik servisi</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/zeka-sorulari-platformu-27.svg" alt="zeka-sorulari-platformu-27" /></p>

<p>H5P içeriği Moodle içine eklentiyle yerleştirilebilir. Ancak sorular farklı uygulamalarda da kullanılacaksa içerikleri yalnızca H5P dosyalarında tutmak yerine merkezi bir API üzerinden sunmak daha sağlıklıdır. Böylece mobil uygulama, web sitesi ve Moodle aynı kaynaktan beslenir.</p>

<h2 id="örnek-soru-veri-modeli">Örnek soru veri modeli</h2>

<p>Aşağıdaki JavaScript nesnesi, çoktan seçmeli bir mantık sorusunun sadeleştirilmiş veri yapısını gösterir:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">question</span> <span class="o">=</span> <span class="p">{</span>
  <span class="na">id</span><span class="p">:</span> <span class="dl">"</span><span class="s2">logic-1042</span><span class="dl">"</span><span class="p">,</span>
  <span class="na">type</span><span class="p">:</span> <span class="dl">"</span><span class="s2">multiple-choice</span><span class="dl">"</span><span class="p">,</span>
  <span class="na">category</span><span class="p">:</span> <span class="dl">"</span><span class="s2">örüntü</span><span class="dl">"</span><span class="p">,</span>
  <span class="na">difficulty</span><span class="p">:</span> <span class="mf">0.65</span><span class="p">,</span>
  <span class="na">prompt</span><span class="p">:</span> <span class="dl">"</span><span class="s2">2, 6, 12, 20 dizisindeki sonraki sayı nedir?</span><span class="dl">"</span><span class="p">,</span>
  <span class="na">options</span><span class="p">:</span> <span class="p">[</span><span class="mi">28</span><span class="p">,</span> <span class="mi">30</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">36</span><span class="p">],</span>
  <span class="na">correctIndex</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
  <span class="na">explanation</span><span class="p">:</span> <span class="dl">"</span><span class="s2">Terimler n × (n + 1) düzenini izler.</span><span class="dl">"</span><span class="p">,</span>
  <span class="na">timeLimit</span><span class="p">:</span> <span class="mi">45</span><span class="p">,</span>
  <span class="na">tags</span><span class="p">:</span> <span class="p">[</span><span class="dl">"</span><span class="s2">matematik</span><span class="dl">"</span><span class="p">,</span> <span class="dl">"</span><span class="s2">örüntü</span><span class="dl">"</span><span class="p">]</span>
<span class="p">};</span>
</code></pre></div></div>

<p>Bu modelde <code class="language-plaintext highlighter-rouge">difficulty</code> uyarlanabilir test üretmek, <code class="language-plaintext highlighter-rouge">explanation</code> öğretici geri bildirim göstermek, <code class="language-plaintext highlighter-rouge">timeLimit</code> ise süreye dayalı puanlama yapmak için kullanılır. API, bu veriyi H5P’ye uygun biçime dönüştürebilir veya doğrudan özel arayüzde gösterebilir.</p>

<h2 id="puanlama-ve-oyunlaştırma">Puanlama ve oyunlaştırma</h2>

<p>Sadece doğru cevaba puan vermek, rastgele tahminleri ödüllendirebilir. Süreyi ve ipucu kullanımını hesaba katan bir formül daha dengelidir:</p>

\[P = B \times d \times \max(0.4, 1-\frac{t}{T}) - 10h\]

<p>Burada $B$ temel puan, $d$ zorluk çarpanı, $t$ harcanan süre, $T$ süre sınırı ve $h$ kullanılan ipucu sayısıdır. <code class="language-plaintext highlighter-rouge">max</code> bölümü, doğru fakat yavaş çözümlerin tamamen puansız kalmasını önler. Rozetler, günlük seriler ve kategori bazlı seviyeler de motivasyonu artırabilir; fakat liderlik tablosu zorunlu olmamalıdır.</p>

<h2 id="uygulama-yol-haritası">Uygulama yol haritası</h2>

<p>İlk sürümde Moodle kurulumu, H5P eklentisi, kullanıcı girişi ve temel soru API’si hazırlanmalıdır. İkinci aşamada soru editörü, sürümleme, ayrıntılı çözüm açıklamaları ve zorluk analizi eklenebilir. Son aşamada uyarlanabilir sınav motoru devreye girer: Kullanıcı doğru cevapladıkça daha zor, zorlandıkça daha öğretici sorular seçilir.</p>

<p>Ayrıca soru metinleri kullanıcı girdisi içeriyorsa XSS filtreleri uygulanmalı, API erişimi yetkilendirilmeli ve deneme kayıtları kişisel verilerden ayrıştırılmalıdır. Böylece platform, “birkaç bilmece yayınlayan site” olmaktan çıkıp ölçülebilir, genişletilebilir ve gerçekten öğretici bir öğrenme ekosistemine dönüşür.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Proje" /><category term="h5p" /><category term="moodle" /><category term="soru-bankası" /><category term="eğitim-teknolojileri" /><category term="javascript" /><category term="oyunlaştırma" /><summary type="html"><![CDATA[Zekâ soruları yalnızca “Doğru cevap hangisi?” demekten ibaret değildir; süre yönetimi, ipucu kullanımı, zorluk dengesi ve çözüm yolunun açıklanması da deneyimin parçasıdır. H5P’nin etkileşimli içeriklerini, Moodle’ın öğrenme yönetimi yeteneklerini ve özel bir soru bankasının esnekliğini birleştirerek hem eğlenceli hem de ölçülebilir bir zekâ soruları platformu geliştirebiliriz.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/zeka-sorulari-platformu-27.png" /><media:content medium="image" url="https://program.sonsuz.us/img/zeka-sorulari-platformu-27.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Açık Kaynak Çeviri Üçlüsü: LibreTranslate, Argos Translate ve Apertium</title><link href="https://program.sonsuz.us/posts/acik-kaynak-ceviri-uclusu-libretranslate-argos-translate-ve-apertium/" rel="alternate" type="text/html" title="Açık Kaynak Çeviri Üçlüsü: LibreTranslate, Argos Translate ve Apertium" /><published>2026-10-09T00:00:00+00:00</published><updated>2026-10-09T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/acik-kaynak-ceviri-uclusu-libretranslate-argos-translate-ve-apertium</id><content type="html" xml:base="https://program.sonsuz.us/posts/acik-kaynak-ceviri-uclusu-libretranslate-argos-translate-ve-apertium/"><![CDATA[<p><img src="/img/acik-kaynak-ceviri-19.svg" alt="acik-kaynak-ceviri-19" /></p>

<p>Bir metni başka bir dile çevirmek kolay görünür: kelimeyi bul, karşılığını yaz, kahveni yudumla! Gerçekteyse dil; bağlam, sözcük sırası, çekim ve kültürel ifadelerle dolu karmaşık bir sistemdir. Açık kaynak dünyasında LibreTranslate, Argos Translate ve Apertium bu probleme farklı katmanlardan yaklaşır. Biri kullanışlı bir web API’si sunarken diğeri çevrimdışı sinir ağı modellerine, ötekiyse dilbilgisi kurallarına güvenir.</p>

<p>``</p>

<h2 id="makine-çevirisinin-temel-mantığı">Makine çevirisinin temel mantığı</h2>

<p>Makine çevirisi sistemleri genel olarak <strong>kural tabanlı</strong>, <strong>istatistiksel</strong> veya <strong>sinir ağı tabanlı</strong> çalışır. Kural tabanlı yöntemde kaynak cümle sözcük ve biçimbirimlerine ayrılır; ardından sözlükler ile dilbilgisi kuralları uygulanır. Sinir ağı tabanlı yöntemdeyse model, bütün cümlenin bağlamını sayısal vektörlerle temsil ederek hedef cümleyi üretir.</p>

<p>Bir sinir ağı modelinde en olası çeviri basitleştirilmiş biçimde şöyle aranır:</p>

\[\hat{Y} = \arg\max_Y P(Y \mid X)\]

<p>Burada $X$ kaynak cümleyi, $Y$ olası hedef cümleyi ve $\hat{Y}$ modelin seçtiği çeviriyi ifade eder. Model yalnızca kelime karşılıklarını değil, hedef dilde doğal görünme olasılığını da hesaba katar.</p>

<h2 id="üç-araç-arasındaki-farklar">Üç araç arasındaki farklar</h2>

<table>
  <thead>
    <tr>
      <th>Araç</th>
      <th>Temel yaklaşım</th>
      <th style="text-align: right">Çevrimdışı kullanım</th>
      <th>Güçlü yanı</th>
      <th>Uygun senaryo</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>LibreTranslate</td>
      <td>Argos tabanlı sinirsel çeviri ve HTTP API</td>
      <td style="text-align: right">Evet</td>
      <td>Web servislerine kolay entegrasyon</td>
      <td>Uygulama ve mikroservisler</td>
    </tr>
    <tr>
      <td>Argos Translate</td>
      <td>OpenNMT tabanlı sinirsel modeller</td>
      <td style="text-align: right">Evet</td>
      <td>Yerel ve gizlilik odaklı çalışma</td>
      <td>Masaüstü araçları, otomasyon</td>
    </tr>
    <tr>
      <td>Apertium</td>
      <td>Kural tabanlı makine çevirisi</td>
      <td style="text-align: right">Evet</td>
      <td>Dil yapısının denetlenebilmesi</td>
      <td>Özellikle yakın akraba diller</td>
    </tr>
  </tbody>
</table>

<h3 id="libretranslate">LibreTranslate</h3>

<p>LibreTranslate, kendi sunucunuza kurabileceğiniz açık kaynaklı bir çeviri API’sidir. Tarayıcı arayüzü bulunsa da asıl yıldızı REST API desteğidir. Verilerin üçüncü taraf bir servise gönderilmemesi; şirket içi belgeler, kişisel notlar ve eğitim projeleri için önemli bir avantajdır.</p>

<p>Aşağıdaki Python kodu, çalışan bir LibreTranslate sunucusuna istek gönderir:</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">payload</span> <span class="o">=</span> <span class="p">{</span>
    <span class="sh">"</span><span class="s">q</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">Açık kaynak yazılımlar özgürlük sağlar.</span><span class="sh">"</span><span class="p">,</span>
    <span class="sh">"</span><span class="s">source</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">tr</span><span class="sh">"</span><span class="p">,</span>
    <span class="sh">"</span><span class="s">target</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">en</span><span class="sh">"</span><span class="p">,</span>
    <span class="sh">"</span><span class="s">format</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">text</span><span class="sh">"</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">post</span><span class="p">(</span>
    <span class="sh">"</span><span class="s">http://localhost:5000/translate</span><span class="sh">"</span><span class="p">,</span>
    <span class="n">json</span><span class="o">=</span><span class="n">payload</span><span class="p">,</span>
    <span class="n">timeout</span><span class="o">=</span><span class="mi">30</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="nf">print</span><span class="p">(</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">translatedText</span><span class="sh">"</span><span class="p">])</span>
</code></pre></div></div>

<p>Kod, kaynak metni ve dil kodlarını JSON olarak API’ye yollar; dönen sonuçtan çevrilmiş metni çıkarır. Üretim ortamında zaman aşımı, kimlik doğrulama ve hata yönetimi ayrıca planlanmalıdır.</p>

<h3 id="argos-translate">Argos Translate</h3>

<p>Argos Translate, indirilebilir dil paketleriyle tamamen yerel çalışabilir. İnternet bağlantısı olmadan çeviri yapması hem gizlilik hem de taşınabilirlik sağlar. Ancak bir dil çiftinin desteklenmesi için uygun model paketinin kurulması gerekir. Ayrıca doğrudan bir model yoksa Türkçeden belirli bir dile çeviri, İngilizce gibi ara bir dil üzerinden gerçekleştirilebilir. Bu zincirleme yaklaşım erişimi artırırken hataları da biriktirebilir.</p>

<h3 id="apertium">Apertium</h3>

<p>Apertium’un dünyası biraz daha “dilbilim laboratuvarı” gibidir. Sistem sözlükler, biçimbirimsel çözümleyiciler ve aktarım kuralları kullanır. Özellikle İspanyolca–Katalanca gibi yapısal olarak yakın dillerde güçlü sonuçlar verebilir. Kurallar incelenebilir ve düzeltilebilir; buna karşılık yeni bir dil çifti hazırlamak ciddi dilbilim emeği ister.</p>

<h2 id="kaliteyi-nasıl-değerlendirmeli">Kaliteyi nasıl değerlendirmeli?</h2>

<p>Çeviri kalitesi yalnızca “doğru görünüyor” hissiyle ölçülmez. BLEU gibi metrikler, üretilen çevirideki sözcük dizilerini referans çevirilerle karşılaştırır. Yine de yüksek puan her zaman doğal veya anlamca kusursuz sonuç demek değildir. Deyimler, teknik terimler ve alan bilgisi için insan değerlendirmesi gereklidir.</p>

<p>Hızlı bir API ve kolay entegrasyon istiyorsanız <strong>LibreTranslate</strong>, gömülü ya da çevrimdışı bir çözüm arıyorsanız <strong>Argos Translate</strong>, kuralları denetlemek ve yakın diller üzerinde çalışmak istiyorsanız <strong>Apertium</strong> mantıklı seçimdir. Kısacası en iyi araç mutlak değildir; dil çiftine, donanıma, gizlilik beklentisine ve “bu cümle neden böyle çevrildi?” sorusuna ne kadar ayrıntılı cevap istediğinize bağlıdır.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="çeviri" /><category term="libretranslate" /><category term="argos-translate" /><category term="apertium" /><category term="doğal-dil-işleme" /><category term="açık-kaynak" /><summary type="html"><![CDATA[Bir metni başka bir dile çevirmek kolay görünür: kelimeyi bul, karşılığını yaz, kahveni yudumla! Gerçekteyse dil; bağlam, sözcük sırası, çekim ve kültürel ifadelerle dolu karmaşık bir sistemdir. Açık kaynak dünyasında LibreTranslate, Argos Translate ve Apertium bu probleme farklı katmanlardan yaklaşır. Biri kullanışlı bir web API’si sunarken diğeri çevrimdışı sinir ağı modellerine, ötekiyse dilbilgisi kurallarına güvenir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/acik-kaynak-ceviri-19.png" /><media:content medium="image" url="https://program.sonsuz.us/img/acik-kaynak-ceviri-19.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Akış Şeması Üçlüsü: draw.io, Mermaid ve PlantUML</title><link href="https://program.sonsuz.us/posts/akis-semasi-uclusu-drawio-mermaid-ve-plantuml/" rel="alternate" type="text/html" title="Akış Şeması Üçlüsü: draw.io, Mermaid ve PlantUML" /><published>2026-10-09T00:00:00+00:00</published><updated>2026-10-09T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/akis-semasi-uclusu-drawio-mermaid-ve-plantuml</id><content type="html" xml:base="https://program.sonsuz.us/posts/akis-semasi-uclusu-drawio-mermaid-ve-plantuml/"><![CDATA[<p>Bir yazılım projesini anlatırken bazen yüz satır koddan daha etkili olan şey, birkaç kutu ve oktur. Akış şemaları; algoritmaları, iş süreçlerini ve sistem davranışlarını görünür hâle getirir. Peki bu şemaları fareyle mi çizmeliyiz, kodla mı üretmeliyiz? İşte bu noktada draw.io, Mermaid ve PlantUML sahneye çıkıyor.</p>

<p><img src="/img/akis-semasi-uclusu-31.svg" alt="akis-semasi-uclusu-31" /></p>

<p>``</p>
<h2 id="akış-şemasının-temel-mantığı">Akış şemasının temel mantığı</h2>

<p>Akış şeması, bir süreci <strong>düğümler</strong> ve bu düğümler arasındaki <strong>yönlendirilmiş bağlantılar</strong> ile temsil eder. Matematiksel olarak bir şemayı $G=(V,E)$ biçiminde düşünebiliriz. Burada $V$ işlem, karar veya başlangıç gibi düğümleri; $E$ ise düğümler arasındaki geçişleri ifade eder.</p>

<p>Örneğin kullanıcı girişini denetleyen bir süreçte düğümler; “bilgileri al”, “doğru mu?” ve “paneli aç” olabilir. Karar düğümünden iki farklı yol çıkması, algoritmadaki <code class="language-plaintext highlighter-rouge">if/else</code> yapısının görsel karşılığıdır.</p>

<p>Bir şemadaki olası yürütme yollarının sayısı karar noktalarıyla büyür. Her karar iki seçeneğe sahipse, kaba bir üst sınır olarak $P=2^d$ yazılabilir. Buradaki $d$, karar düğümü sayısıdır. Beş karar noktası teorik olarak $2^5=32$ farklı yol oluşturabilir. Şemalar tam da bu karmaşıklığı fark etmeyi kolaylaştırır.</p>

<h2 id="üç-aracın-kısa-karşılaştırması">Üç aracın kısa karşılaştırması</h2>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>draw.io</th>
      <th>Mermaid</th>
      <th>PlantUML</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Kullanım biçimi</td>
      <td>Sürükle-bırak</td>
      <td>Metin tabanlı</td>
      <td>Metin tabanlı</td>
    </tr>
    <tr>
      <td>Öğrenme eşiği</td>
      <td>Düşük</td>
      <td>Düşük-orta</td>
      <td>Orta</td>
    </tr>
    <tr>
      <td>Git uyumu</td>
      <td>Sınırlı-orta</td>
      <td>Çok iyi</td>
      <td>Çok iyi</td>
    </tr>
    <tr>
      <td>Hızlı görsel düzenleme</td>
      <td>Çok iyi</td>
      <td>Orta</td>
      <td>Orta</td>
    </tr>
    <tr>
      <td>Diyagram çeşitliliği</td>
      <td>Çok geniş</td>
      <td>Geniş</td>
      <td>Çok geniş</td>
    </tr>
    <tr>
      <td>Dokümantasyona gömme</td>
      <td>Görsel dosyayla</td>
      <td>Doğrudan</td>
      <td>Eklenti veya çıktı ile</td>
    </tr>
  </tbody>
</table>

<h2 id="drawio-görsel-özgürlük">draw.io: Görsel özgürlük</h2>

<p>draw.io, günümüzde diagrams.net adıyla da bilinen görsel bir diyagram aracıdır. Kutuları çalışma alanına bırakır, okları bağlar ve renkleri arayüz üzerinden ayarlarsınız. Teknik sözdizimi öğrenmek istemeyen ekipler için oldukça rahattır.</p>

<p>En büyük avantajı, karmaşık yerleşimleri elle hassas biçimde düzenleyebilmenizdir. Ağ topolojileri, organizasyon şemaları ve bulut mimarileri için geniş bir şekil kütüphanesi sunar. Buna karşılık XML tabanlı dosyalarında yapılan değişiklikleri Git karşılaştırmalarında okumak pek keyifli değildir. “Kutuyu üç piksel sola aldım” değişikliği, kod incelemesinde küçük bir destana dönüşebilir.</p>

<h2 id="mermaid-markdownın-diyagram-arkadaşı">Mermaid: Markdown’ın diyagram arkadaşı</h2>

<p>Mermaid, diyagramları kısa bir metinle tanımlamanızı sağlar. GitHub ve birçok dokümantasyon sistemi tarafından desteklenmesi önemli bir avantajdır.</p>

<pre><code class="language-mermaid">flowchart TD
    A[Bilgileri al] --&gt; B{Bilgiler doğru mu?}
    B -- Evet --&gt; C[Paneli aç]
    B -- Hayır --&gt; D[Hata göster]
    D --&gt; A
</code></pre>

<p>Bu kod; giriş bilgilerini alan, doğrulama yapan ve sonuca göre yönlenen bir akış üretir. Metin tabanlı olduğu için değişiklikler Git üzerinde satır satır izlenebilir. Ancak çok büyük şemalarda otomatik yerleşim her zaman hayalinizdeki estetik sonucu vermeyebilir.</p>

<h2 id="plantuml-diyagramların-i̇sviçre-çakısı">PlantUML: Diyagramların İsviçre çakısı</h2>

<p>PlantUML; akışların yanında sınıf, sıra, durum ve bileşen diyagramları üretmekte güçlüdür. Sözdizimi Mermaid’e göre biraz daha ayrıntılıdır, fakat büyük yazılım sistemlerinde daha fazla kontrol sağlar.</p>

<pre><code class="language-plantuml">@startuml
start
:Bilgileri al;
if (Bilgiler doğru mu?) then (Evet)
  :Paneli aç;
else (Hayır)
  :Hata göster;
endif
stop
@enduml
</code></pre>

<p>Burada <code class="language-plaintext highlighter-rouge">start</code> ve <code class="language-plaintext highlighter-rouge">stop</code> sürecin sınırlarını, <code class="language-plaintext highlighter-rouge">if</code> bloğu karar noktasını, iki nokta arasındaki ifadeler ise işlem adımlarını belirtir. Kod dokümantasyon deposunda saklanabilir ve otomatik derleme süreçlerinde PNG veya SVG çıktısına dönüştürülebilir.</p>

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

<p>Toplantıda hızlıca kutu çizmek, özel ikonlar kullanmak ve görsel kontrolü tamamen elinizde tutmak istiyorsanız <strong>draw.io</strong> iyi seçimdir. README veya teknik belgelerde küçük ve sürümlenebilir şemalar gerekiyorsa <strong>Mermaid</strong> daha pratiktir. UML ağırlıklı, kapsamlı ve otomatik üretilecek mimari dokümantasyon içinse <strong>PlantUML</strong> öne çıkar.</p>

<p>Kısacası en iyi araç mutlak değildir: Şemanız sunum odaklıysa fareyi, dokümantasyon odaklıysa kodu seçin. Hatta ekipler çoğu zaman ilk taslağı draw.io ile hazırlayıp kalıcı teknik belgeyi Mermaid veya PlantUML ile yeniden üreterek üç dünyanın da avantajından yararlanabilir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Program" /><category term="akış şeması" /><category term="draw.io" /><category term="mermaid" /><category term="plantuml" /><category term="diyagram" /><category term="yazılım tasarımı" /><summary type="html"><![CDATA[Bir yazılım projesini anlatırken bazen yüz satır koddan daha etkili olan şey, birkaç kutu ve oktur. Akış şemaları; algoritmaları, iş süreçlerini ve sistem davranışlarını görünür hâle getirir. Peki bu şemaları fareyle mi çizmeliyiz, kodla mı üretmeliyiz? İşte bu noktada draw.io, Mermaid ve PlantUML sahneye çıkıyor.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/akis-semasi-uclusu-31.png" /><media:content medium="image" url="https://program.sonsuz.us/img/akis-semasi-uclusu-31.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Bağış Toplama Sistemleri Karşılaştırması: CiviCRM, GiveWP ve Open Collective</title><link href="https://program.sonsuz.us/posts/bagis-toplama-sistemleri-karsilastirmasi-civicrm-givewp-ve-open-collective/" rel="alternate" type="text/html" title="Bağış Toplama Sistemleri Karşılaştırması: CiviCRM, GiveWP ve Open Collective" /><published>2026-10-09T00:00:00+00:00</published><updated>2026-10-09T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/bagis-toplama-sistemleri-karsilastirmasi-civicrm-givewp-ve-open-collective</id><content type="html" xml:base="https://program.sonsuz.us/posts/bagis-toplama-sistemleri-karsilastirmasi-civicrm-givewp-ve-open-collective/"><![CDATA[<p>Bir bağış sistemi seçmek, web sitesine yalnızca renkli bir “Destek Ol” düğmesi eklemekten çok daha fazlasıdır. Bağışçı ilişkileri, ödeme altyapısı, kampanya takibi, şeffaflık ve raporlama gibi parçalar doğru biçimde birleşmelidir. CiviCRM, GiveWP ve Open Collective aynı amaca hizmet ediyor gibi görünse de farklı organizasyon modellerine hitap eder: biri kapsamlı bir ilişki yönetim sistemi, biri WordPress odaklı bağış eklentisi, diğeri ise şeffaf topluluk finansmanı platformudur.</p>

<p>``</p>

<h2 id="önce-temel-mantık-bağış-sistemi-nasıl-çalışır">Önce temel mantık: Bağış sistemi nasıl çalışır?</h2>

<p>Tipik bir bağış akışı; bağışçı, form, ödeme sağlayıcısı, işlem kaydı ve raporlama katmanlarından oluşur. Kullanıcı formu doldurduğunda sistem ödeme sağlayıcısına bir istek gönderir. Başarılı işlem sonrasında bağış kaydedilir, makbuz oluşturulur ve gerekiyorsa bağışçıya otomatik e-posta gönderilir.</p>

<p>Bir kampanyanın net geliri basitçe şöyle modellenebilir:</p>

\[G_{net} = G_{brüt} - (G_{brüt} \times o_{komisyon}) - M_{sabit} - G_{iade}\]

<p>Burada $o_{komisyon}$ ödeme sağlayıcısının oransal kesintisini, $M_{sabit}$ işlem başına sabit maliyetleri temsil eder. Dolayısıyla yalnızca yazılımın fiyatını değil, ödeme komisyonlarını ve operasyon yükünü de karşılaştırmak gerekir.</p>

<h2 id="üç-sistemin-karakteri">Üç sistemin karakteri</h2>

<table>
  <thead>
    <tr>
      <th>Sistem</th>
      <th>Temel yaklaşım</th>
      <th>Güçlü olduğu alan</th>
      <th>Teknik ihtiyaç</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>CiviCRM</td>
      <td>CRM ve bağış yönetimi</td>
      <td>STK, dernek, üyelik ve etkinlik takibi</td>
      <td>Orta-yüksek</td>
    </tr>
    <tr>
      <td>GiveWP</td>
      <td>WordPress bağış eklentisi</td>
      <td>Hızlı kampanya sayfaları ve formlar</td>
      <td>Orta</td>
    </tr>
    <tr>
      <td>Open Collective</td>
      <td>Şeffaf mali yönetim platformu</td>
      <td>Açık kaynak ve topluluk projeleri</td>
      <td>Düşük-orta</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/bagis-toplama-sistemleri-54.svg" alt="bagis-toplama-sistemleri-54" /></p>

<h3 id="civicrm-kurumsal-hafıza-isteyenlere">CiviCRM: Kurumsal hafıza isteyenlere</h3>

<p>CiviCRM yalnızca ödeme almakla kalmaz; bağışçıları, üyelikleri, etkinlikleri, e-postaları ve geçmiş etkileşimleri tek profilde toplar. Drupal, Joomla veya WordPress ile çalışabilir. Özellikle aynı destekçiyle yıllar boyunca ilişki kuran kuruluşlar için güçlüdür.</p>

<p>Bunun karşılığında kurulum ve bakım daha zahmetlidir. Veri modeli, roller, izinler ve zamanlanmış görevler doğru yapılandırılmalıdır. Küçük bir kampanya için ağır gelebilir; fakat binlerce kişiyle çalışan bir STK için adeta dijital genel merkezdir.</p>

<h3 id="givewp-wordpress-içinde-pratik-çözüm">GiveWP: WordPress içinde pratik çözüm</h3>

<p>GiveWP, mevcut WordPress sitesini bağış platformuna dönüştürür. Kampanya formları, hedef göstergeleri, bağışçı panelleri ve tekrarlayan ödeme özellikleri sunar. İçerik ekibinin WordPress’e aşina olması önemli bir avantajdır.</p>

<p>Basit bir entegrasyon mantığı şu şekilde düşünülebilir:</p>

<div class="language-php highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nf">add_action</span><span class="p">(</span><span class="s1">'give_insert_payment'</span><span class="p">,</span> <span class="k">function</span> <span class="p">(</span><span class="nv">$payment_id</span><span class="p">)</span> <span class="p">{</span>
    <span class="nv">$amount</span> <span class="o">=</span> <span class="nf">give_get_payment_total</span><span class="p">(</span><span class="nv">$payment_id</span><span class="p">);</span>
    <span class="nb">error_log</span><span class="p">(</span><span class="s1">'Yeni bağış tutarı: '</span> <span class="mf">.</span> <span class="nv">$amount</span><span class="p">);</span>
<span class="p">});</span>
</code></pre></div></div>

<p>Bu örnek, yeni ödeme kaydedildiğinde bağış tutarını günlük dosyasına yazar. Gerçek projede aynı kanca CRM bildirimi göndermek veya özel bir teşekkür süreci başlatmak için kullanılabilir. Ancak ücretli eklentiler, ödeme ağ geçitleri ve WordPress güvenliği toplam maliyete eklenmelidir.</p>

<h3 id="open-collective-şeffaflık-varsayılan-ayar">Open Collective: Şeffaflık varsayılan ayar</h3>

<p>Open Collective özellikle açık kaynak projeleri, yerel topluluklar ve gayriresmî gruplar için dikkat çekicidir. Gelirler ve giderler herkese açık gösterilebilir. Bir mali sponsor kullanıldığında topluluk, ayrı bir tüzel kişilik kurmadan para kabul etme ve harcama olanağı bulabilir.</p>

<p>Platformun en güçlü tarafı şeffaflıktır; ancak klasik CRM özellikleri veya tamamen özelleştirilebilir bağış deneyimi bekleyen kuruluşlar için sınırlı kalabilir.</p>

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

<table>
  <thead>
    <tr>
      <th>İhtiyaç</th>
      <th>Önerilen seçenek</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Ayrıntılı bağışçı geçmişi ve üyelik yönetimi</td>
      <td>CiviCRM</td>
    </tr>
    <tr>
      <td>WordPress üzerinde hızlı bağış kampanyası</td>
      <td>GiveWP</td>
    </tr>
    <tr>
      <td>Herkese açık gelir-gider takibi</td>
      <td>Open Collective</td>
    </tr>
    <tr>
      <td>İleri düzey özelleştirme ve veri sahipliği</td>
      <td>CiviCRM veya GiveWP</td>
    </tr>
    <tr>
      <td>Minimum altyapı yönetimi</td>
      <td>Open Collective</td>
    </tr>
  </tbody>
</table>

<p>Karar verirken bağış hacmi, ekip kapasitesi, veri gizliliği ve raporlama gereksinimleri birlikte değerlendirilmelidir. Kısacası CiviCRM ilişkiyi, GiveWP dönüşümü, Open Collective ise güveni ve şeffaflığı merkeze koyar. En iyi sistem en fazla özelliğe sahip olan değil, kuruluşunuzun günlük iş akışına en az sürtünmeyle uyum sağlayandır.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Program" /><category term="bağış" /><category term="civicrm" /><category term="givewp" /><category term="open-collective" /><category term="wordpress" /><category term="açık-kaynak" /><category term="fintech" /><summary type="html"><![CDATA[Bir bağış sistemi seçmek, web sitesine yalnızca renkli bir “Destek Ol” düğmesi eklemekten çok daha fazlasıdır. Bağışçı ilişkileri, ödeme altyapısı, kampanya takibi, şeffaflık ve raporlama gibi parçalar doğru biçimde birleşmelidir. CiviCRM, GiveWP ve Open Collective aynı amaca hizmet ediyor gibi görünse de farklı organizasyon modellerine hitap eder: biri kapsamlı bir ilişki yönetim sistemi, biri WordPress odaklı bağış eklentisi, diğeri ise şeffaf topluluk finansmanı platformudur.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/bagis-toplama-sistemleri-54.png" /><media:content medium="image" url="https://program.sonsuz.us/img/bagis-toplama-sistemleri-54.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">ConvertAll ve MathJS ile Akıllı Birim Dönüştürme Sitesi Geliştirmek</title><link href="https://program.sonsuz.us/posts/convertall-ve-mathjs-ile-akilli-birim-donusturme-sitesi-gelistirmek/" rel="alternate" type="text/html" title="ConvertAll ve MathJS ile Akıllı Birim Dönüştürme Sitesi Geliştirmek" /><published>2026-10-09T00:00:00+00:00</published><updated>2026-10-09T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/convertall-ve-mathjs-ile-akilli-birim-donusturme-sitesi-gelistirmek</id><content type="html" xml:base="https://program.sonsuz.us/posts/convertall-ve-mathjs-ile-akilli-birim-donusturme-sitesi-gelistirmek/"><![CDATA[<p><img src="/img/convertall-ve-mathjs-59.svg" alt="convertall-ve-mathjs-59" /></p>

<p>Birim dönüştürme uygulamaları ilk bakışta yalnızca “metreyi kilometreye böl” seviyesinde görünür. Ancak sıcaklık, alan, hacim, hız ve türetilmiş bilimsel birimler işin içine girince küçük hesap makinemiz adeta laboratuvar önlüğü giymeye başlar. ConvertAll yaklaşımını örnek alan ve MathJS kullanan bir web sitesi; kullanıcıya esnek, güvenilir ve genişletilebilir bir dönüştürme deneyimi sunabilir.
``</p>
<h2 id="birim-dönüşümünün-temel-mantığı">Birim dönüşümünün temel mantığı</h2>

<p>Aynı fiziksel büyüklüğü temsil eden birimler arasında genellikle bir ölçek katsayısı bulunur. Örneğin metre ile santimetre arasındaki ilişki şöyledir:</p>

\[1\,m = 100\,cm\]

<p>Dolayısıyla $x$ metreyi santimetreye dönüştürmek için $x \times 100$ hesaplanır. Genel doğrusal dönüşüm modeli şu şekilde ifade edilebilir:</p>

\[y = ax + b\]

<p>Burada $a$ ölçek katsayısı, $b$ ise başlangıç noktası farkıdır. Uzunluk dönüşümlerinde çoğunlukla $b=0$ olur. Sıcaklıkta ise durum farklıdır. Celsius’tan Fahrenheit’a dönüşüm:</p>

\[F = C \times 1.8 + 32\]

<p>Bu ayrım önemlidir; her birimi yalnızca bir sayıyla çarpmak doğru sonuç üretmez.</p>

<table>
  <thead>
    <tr>
      <th>Dönüşüm türü</th>
      <th>Örnek</th>
      <th>Matematiksel yapı</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Ölçek tabanlı</td>
      <td>metre → santimetre</td>
      <td>$y=ax$</td>
    </tr>
    <tr>
      <td>Ofsetli</td>
      <td>Celsius → Fahrenheit</td>
      <td>$y=ax+b$</td>
    </tr>
    <tr>
      <td>Ters orantılı</td>
      <td>yakıt ekonomisi gösterimleri</td>
      <td>$y=a/x$</td>
    </tr>
    <tr>
      <td>Bileşik</td>
      <td>km/saat → m/saniye</td>
      <td>birden fazla katsayı</td>
    </tr>
  </tbody>
</table>

<h2 id="convertall-yaklaşımı-nedir">ConvertAll yaklaşımı nedir?</h2>

<p>ConvertAll, kullanıcının kaynak ve hedef birimleri özgürce seçebilmesini sağlayan masaüstü odaklı bir dönüştürme aracıdır. En güçlü fikri, yalnızca hazır dönüşüm düğmeleri sunmak yerine birim ifadelerini ayrıştırmasıdır. Böylece <code class="language-plaintext highlighter-rouge">km/hour</code>, <code class="language-plaintext highlighter-rouge">meter/second</code> veya <code class="language-plaintext highlighter-rouge">kg*m/s^2</code> gibi bileşik ifadeler anlamlandırılabilir.</p>

<p>Bir web projesinde aynı yaklaşımı uygulamak için üç temel katman gerekir:</p>

<ol>
  <li>Kullanıcı ifadesini ayrıştıran giriş katmanı,</li>
  <li>Birimlerin uyumluluğunu denetleyen hesaplama motoru,</li>
  <li>Sonucu anlaşılır biçimde gösteren arayüz.</li>
</ol>

<p>Kütle ile uzunluğu dönüştürmeye çalışmak matematiksel olarak anlamsızdır. Sistem, <code class="language-plaintext highlighter-rouge">5 kg → metre</code> isteğine rastgele bir sayı vermek yerine boyut uyuşmazlığı hatası göstermelidir.</p>

<h2 id="mathjs-ile-dönüşüm-motoru">MathJS ile dönüşüm motoru</h2>

<p>MathJS; JavaScript için ifadeler, matrisler, büyük sayılar ve birimler konusunda kapsamlı özellikler sunar. Tarayıcıda veya Node.js ortamında kullanılabilir. Temel bir dönüşüm oldukça kısa yazılır:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="p">{</span> <span class="nx">create</span><span class="p">,</span> <span class="nx">all</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">"</span><span class="s2">mathjs</span><span class="dl">"</span><span class="p">;</span>

<span class="kd">const</span> <span class="nx">math</span> <span class="o">=</span> <span class="nf">create</span><span class="p">(</span><span class="nx">all</span><span class="p">);</span>

<span class="kd">function</span> <span class="nf">donustur</span><span class="p">(</span><span class="nx">deger</span><span class="p">,</span> <span class="nx">kaynak</span><span class="p">,</span> <span class="nx">hedef</span><span class="p">)</span> <span class="p">{</span>
  <span class="kd">const</span> <span class="nx">miktar</span> <span class="o">=</span> <span class="nx">math</span><span class="p">.</span><span class="nf">unit</span><span class="p">(</span><span class="nx">deger</span><span class="p">,</span> <span class="nx">kaynak</span><span class="p">);</span>
  <span class="k">return</span> <span class="nx">miktar</span><span class="p">.</span><span class="nf">toNumber</span><span class="p">(</span><span class="nx">hedef</span><span class="p">);</span>
<span class="p">}</span>

<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="nf">donustur</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="dl">"</span><span class="s2">km</span><span class="dl">"</span><span class="p">,</span> <span class="dl">"</span><span class="s2">m</span><span class="dl">"</span><span class="p">));</span> <span class="c1">// 10000</span>
<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="nf">donustur</span><span class="p">(</span><span class="mi">25</span><span class="p">,</span> <span class="dl">"</span><span class="s2">degC</span><span class="dl">"</span><span class="p">,</span> <span class="dl">"</span><span class="s2">degF</span><span class="dl">"</span><span class="p">));</span> <span class="c1">// 77</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">math.unit()</code> sayıyı birimiyle birlikte temsil eder. <code class="language-plaintext highlighter-rouge">toNumber()</code> ise miktarı hedef birime çevirerek sayısal sonucu döndürür. Bu yöntem, dönüşüm katsayılarını elle yazmaktan daha güvenlidir.</p>

<p>Kullanıcı girişleri doğrudan işlenmemeli; hata yakalama mekanizması eklenmelidir:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nf">guvenliDonustur</span><span class="p">(</span><span class="nx">deger</span><span class="p">,</span> <span class="nx">kaynak</span><span class="p">,</span> <span class="nx">hedef</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">try</span> <span class="p">{</span>
    <span class="k">if </span><span class="p">(</span><span class="o">!</span><span class="nb">Number</span><span class="p">.</span><span class="nf">isFinite</span><span class="p">(</span><span class="nx">deger</span><span class="p">))</span> <span class="p">{</span>
      <span class="k">throw</span> <span class="k">new</span> <span class="nc">Error</span><span class="p">(</span><span class="dl">"</span><span class="s2">Geçerli bir sayı girilmedi.</span><span class="dl">"</span><span class="p">);</span>
    <span class="p">}</span>

    <span class="kd">const</span> <span class="nx">sonuc</span> <span class="o">=</span> <span class="nx">math</span><span class="p">.</span><span class="nf">unit</span><span class="p">(</span><span class="nx">deger</span><span class="p">,</span> <span class="nx">kaynak</span><span class="p">).</span><span class="nf">toNumber</span><span class="p">(</span><span class="nx">hedef</span><span class="p">);</span>
    <span class="k">return</span> <span class="p">{</span> <span class="na">basarili</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">sonuc</span> <span class="p">};</span>
  <span class="p">}</span> <span class="k">catch </span><span class="p">(</span><span class="nx">hata</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">return</span> <span class="p">{</span> <span class="na">basarili</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span> <span class="na">mesaj</span><span class="p">:</span> <span class="nx">hata</span><span class="p">.</span><span class="nx">message</span> <span class="p">};</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Bu fonksiyon arayüzün çökmesini önler ve kullanıcıya açıklayıcı geri bildirim sağlar.</p>

<h2 id="arayüz-ve-geliştirme-fikirleri">Arayüz ve geliştirme fikirleri</h2>

<p>Başarılı bir dönüştürme sitesi; kategori seçimi, iki birim listesi, değer alanı ve birimleri ters çevirme düğmesi içermelidir. Son kullanılan dönüşümleri yerel depolamada saklamak da kullanıcı deneyimini iyileştirir.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Basit sistem</th>
      <th>Gelişmiş sistem</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Birim seçimi</td>
      <td>sabit liste</td>
      <td>arama ve filtreleme</td>
    </tr>
    <tr>
      <td>Hesaplama</td>
      <td>elle yazılmış katsayılar</td>
      <td>MathJS motoru</td>
    </tr>
    <tr>
      <td>Sonuç</td>
      <td>tek sayı</td>
      <td>hassasiyet ve bilimsel gösterim</td>
    </tr>
    <tr>
      <td>Geçmiş</td>
      <td>yok</td>
      <td>favoriler ve son işlemler</td>
    </tr>
  </tbody>
</table>

<p>Özel birimler <code class="language-plaintext highlighter-rouge">math.createUnit()</code> ile tanımlanabilir. Böylece uygulamaya yerel ölçüler veya projeye özgü teknik birimler eklenebilir. Son aşamada otomatik testlerle bilinen eşitlikler doğrulanmalıdır: $1\,inch=2.54\,cm$ ve $0\,^{\circ}C=32\,^{\circ}F$ gibi. Böylece siteniz yalnızca şık görünmez; hesap yaparken de cetveli ters tutmaz.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Proje" /><category term="javascript" /><category term="mathjs" /><category term="birim-dönüştürme" /><category term="web-geliştirme" /><category term="convertall" /><summary type="html"><![CDATA[Birim dönüştürme uygulamaları ilk bakışta yalnızca “metreyi kilometreye böl” seviyesinde görünür. Ancak sıcaklık, alan, hacim, hız ve türetilmiş bilimsel birimler işin içine girince küçük hesap makinemiz adeta laboratuvar önlüğü giymeye başlar. ConvertAll yaklaşımını örnek alan ve MathJS kullanan bir web sitesi; kullanıcıya esnek, güvenilir ve genişletilebilir bir dönüştürme deneyimi sunabilir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/convertall-ve-mathjs-59.png" /><media:content medium="image" url="https://program.sonsuz.us/img/convertall-ve-mathjs-59.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Dijital Katılım Platformları: Decidim, CONSUL DEMOCRACY ve FixMyStreet</title><link href="https://program.sonsuz.us/posts/dijital-katilim-platformlari-decidim-consul-democracy-ve-fixmystreet/" rel="alternate" type="text/html" title="Dijital Katılım Platformları: Decidim, CONSUL DEMOCRACY ve FixMyStreet" /><published>2026-10-09T00:00:00+00:00</published><updated>2026-10-09T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/dijital-katilim-platformlari-decidim-consul-democracy-ve-fixmystreet</id><content type="html" xml:base="https://program.sonsuz.us/posts/dijital-katilim-platformlari-decidim-consul-democracy-ve-fixmystreet/"><![CDATA[<p>Bir mahalledeki bozuk kaldırımı bildirmek, belediyeye yeni bir bisiklet yolu önermek veya belirli bir konuda binlerce imza toplamak istiyorsanız sıradan bir formdan fazlasına ihtiyacınız vardır. Decidim, CONSUL DEMOCRACY ve FixMyStreet; vatandaşlarla kurumlar arasında dijital köprü kuran açık kaynaklı platformlardır. Ancak aynı aileden görünseler de farklı problemleri çözerler.</p>

<p>``</p>

<h2 id="üç-platform-üç-yaklaşım">Üç platform, üç yaklaşım</h2>

<p><strong>Decidim</strong>, Barselona çıkışlı kapsamlı bir katılımcı demokrasi altyapısıdır. Teklif oluşturma, destek toplama, toplantı düzenleme, anket, bütçeleme ve sonuç takibi gibi süreçleri modüler biçimde sunar. Bir dilekçe sistemi kurmanın yanında tüm karar alma döngüsünü yönetmek isteyen kurumlara uygundur.</p>

<p><strong>CONSUL DEMOCRACY</strong>, vatandaş önerileri, tartışmalar, oylamalar ve katılımcı bütçeleme üzerine yoğunlaşır. Teklif belirli bir destek eşiğine ulaştığında değerlendirme ya da oylama aşamasına geçirilebilir. Bu nedenle klasik “öneri ver, imza topla, gündeme taşı” modeliyle oldukça uyumludur.</p>

<p><strong>FixMyStreet</strong> ise doğrudan bir dilekçe platformu değildir. Vatandaşların harita üzerinde çukur, kırık sokak lambası veya kaçak döküm gibi yerel sorunları bildirmesini sağlar. Bildirim, konuma göre sorumlu kuruma yönlendirilir ve çözüm durumu kamuya açık şekilde izlenebilir.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Decidim</th>
      <th>CONSUL DEMOCRACY</th>
      <th>FixMyStreet</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Temel amaç</td>
      <td>Çok yönlü katılım</td>
      <td>Öneri ve oylama</td>
      <td>Coğrafi sorun bildirimi</td>
    </tr>
    <tr>
      <td>İmza/destek toplama</td>
      <td>Güçlü</td>
      <td>Güçlü</td>
      <td>Doğal özelliği değil</td>
    </tr>
    <tr>
      <td>Harita odaklı çalışma</td>
      <td>Ek modüllerle</td>
      <td>Sınırlı</td>
      <td>Çok güçlü</td>
    </tr>
    <tr>
      <td>Katılımcı bütçe</td>
      <td>Var</td>
      <td>Var</td>
      <td>Yok</td>
    </tr>
    <tr>
      <td>Uygun ölçek</td>
      <td>Kurum ve şehir</td>
      <td>Belediye ve ülke</td>
      <td>Belediye ve mahalle</td>
    </tr>
  </tbody>
</table>

<h2 id="i̇mza-sistemi-nasıl-düşünülmeli">İmza sistemi nasıl düşünülmeli?</h2>

<p>Basit modelde her dilekçenin bir destek sayısı ve hedefi bulunur. İlerleme oranı şöyle hesaplanabilir:</p>

\[P = 100 * S / H\]

<p>Burada $S$ doğrulanmış destek sayısını, $H$ hedeflenen desteği, $P$ ise yüzde ilerlemeyi ifade eder. Örneğin 2.000 destek hedefleyen bir öneri 1.250 doğrulanmış imzaya ulaştığında ilerleme oranı yüzde 62,5 olur.</p>

<p>Fakat yalnızca sayaç tutmak yeterli değildir. Aynı kişinin tekrar imza atması engellenmeli, e-posta veya kimlik doğrulaması yapılmalı ve kişisel veriler gereksiz yere yayımlanmamalıdır. İdeal süreç şu durum makinesini izleyebilir:</p>

<p><code class="language-plaintext highlighter-rouge">Taslak → Moderasyon → Yayında → Eşik Aşıldı → Kurumsal İnceleme → Sonuçlandı</code></p>

<p>Aşağıdaki basitleştirilmiş Python fonksiyonu, doğrulanmış ve benzersiz destekleri sayar:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">petition_progress</span><span class="p">(</span><span class="n">signatures</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
    <span class="c1"># Doğrulanmış kullanıcı kimliklerini kümeye alarak tekrarları eler.
</span>    <span class="n">verified_users</span> <span class="o">=</span> <span class="p">{</span>
        <span class="n">item</span><span class="p">[</span><span class="sh">"</span><span class="s">user_id</span><span class="sh">"</span><span class="p">]</span>
        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">signatures</span>
        <span class="k">if</span> <span class="n">item</span><span class="p">[</span><span class="sh">"</span><span class="s">verified</span><span class="sh">"</span><span class="p">]</span> <span class="ow">is</span> <span class="bp">True</span>
    <span class="p">}</span>

    <span class="n">support_count</span> <span class="o">=</span> <span class="nf">len</span><span class="p">(</span><span class="n">verified_users</span><span class="p">)</span>
    <span class="n">percentage</span> <span class="o">=</span> <span class="nf">min</span><span class="p">((</span><span class="n">support_count</span> <span class="o">/</span> <span class="n">target</span><span class="p">)</span> <span class="o">*</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>

    <span class="k">return</span> <span class="p">{</span>
        <span class="sh">"</span><span class="s">support_count</span><span class="sh">"</span><span class="p">:</span> <span class="n">support_count</span><span class="p">,</span>
        <span class="sh">"</span><span class="s">percentage</span><span class="sh">"</span><span class="p">:</span> <span class="nf">round</span><span class="p">(</span><span class="n">percentage</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
        <span class="sh">"</span><span class="s">threshold_reached</span><span class="sh">"</span><span class="p">:</span> <span class="n">support_count</span> <span class="o">&gt;=</span> <span class="n">target</span>
    <span class="p">}</span>
</code></pre></div></div>

<p>Gerçek sistemde <code class="language-plaintext highlighter-rouge">user_id</code> değerleri herkese açık gösterilmemeli; mümkünse tek yönlü özetler, yetkilendirme katmanları ve kayıt saklama politikaları kullanılmalıdır. Ayrıca kötüye kullanım önleme mekanizması erişilebilirliği bozmamalıdır: aşırı CAPTCHA kullanımı gerçek vatandaşları da kaçırabilir.</p>

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

<table>
  <thead>
    <tr>
      <th>İhtiyaç</th>
      <th>Önerilen platform</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Dilekçe, toplantı ve bütçe tek yerde olsun</td>
      <td>Decidim</td>
    </tr>
    <tr>
      <td>Öneriler destek eşiğiyle oylamaya geçsin</td>
      <td>CONSUL DEMOCRACY</td>
    </tr>
    <tr>
      <td>Sorunlar haritada işaretlenip kuruma gönderilsin</td>
      <td>FixMyStreet</td>
    </tr>
  </tbody>
</table>

<p>Seçimde yalnızca özellik listesini değil; kurulum ekibinin Ruby/Rails deneyimini, barındırma bütçesini, moderasyon kapasitesini, çok dillilik ihtiyacını ve kurum içi süreçleri de değerlendirmek gerekir. En parlak arayüz bile arka tarafta dilekçeyi yanıtlayacak bir iş akışı yoksa dijital bir öneri kutusuna dönüşür.</p>

<p>Sonuç olarak Decidim geniş kapsamlı bir demokrasi laboratuvarı, CONSUL DEMOCRACY yapılandırılmış bir öneri ve oylama motoru, FixMyStreet ise konum tabanlı belediye sorunları için uzmanlaşmış bir araçtır. Başarılı seçim, “Hangisi daha güçlü?” sorusundan önce “Vatandaş hangi sürece katılacak?” sorusunu yanıtlamakla başlar.</p>

<p><img src="/img/dijital-katilim-platformlari-83.svg" alt="dijital-katilim-platformlari-83" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Program" /><category term="decidim" /><category term="consul-democracy" /><category term="fixmystreet" /><category term="e-demokrasi" /><category term="açık-kaynak" /><category term="dijital-katılım" /><summary type="html"><![CDATA[Bir mahalledeki bozuk kaldırımı bildirmek, belediyeye yeni bir bisiklet yolu önermek veya belirli bir konuda binlerce imza toplamak istiyorsanız sıradan bir formdan fazlasına ihtiyacınız vardır. Decidim, CONSUL DEMOCRACY ve FixMyStreet; vatandaşlarla kurumlar arasında dijital köprü kuran açık kaynaklı platformlardır. Ancak aynı aileden görünseler de farklı problemleri çözerler.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/dijital-katilim-platformlari-83.png" /><media:content medium="image" url="https://program.sonsuz.us/img/dijital-katilim-platformlari-83.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>