Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: SM-2 Aralıklı Tekrar Algoritmasını Kart Uygulamama Nasıl Uyguladım
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » SM-2 Aralıklı Tekrar Algoritmasını Kart Uygulamama Nasıl Uyguladım

Yazılım

SM-2 Aralıklı Tekrar Algoritmasını Kart Uygulamama Nasıl Uyguladım

teknomers
Son güncelleme: 5 Mart 2026 13:55
teknomers
Paylaş
Paylaş



Spaced Repetition Nedir?

<p>Geleneksel çalışma yöntemlerinde sık karşılaşılan bir sorun, tüm bilgilerin eşit bir şekilde gözden geçirilmesidir; bu da verimsiz bir süreç oluşturur.</p>

<p><strong>Spaced repetition</strong>, bu durumu tersine çevirir. Zorlandığınız kartlar daha kısa sürede geri dönerken, iyi bildiğiniz kartlar daha uzun bir süre ertelenir. Böylece, enerjinizi tam olarak ihtiyaç duyulan yerlere harcarsınız.</p>

<p><strong>SM-2 algoritması</strong> (Piotr Wozniak tarafından 1987 yılında geliştirilmiştir) bu mantığın matematiğidir. Bu algoritma, dünyanın en popüler öğrenme araçlarından biri olan Anki'de de kullanılmaktadır.</p>


<hr/>

<h2>
    <a name="the-sm2-formula-explained" href="#the-sm2-formula-explained">
    </a>
    📐 SM-2 Formülü Açıklaması
</h2>

<p>Her kart üç değeri takip eder:</p>

<div class="table-wrapper-paragraph">
    <table>
        <thead>
            <tr>
                <th>Değişken</th>
                <th>Anlamı</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><code>repetitions</code></td>
                <td>Arka arkaya kaç kez doğru yanıt verdiniz</td>
            </tr>
            <tr>
                <td><code>easeFactor</code> (EF)</td>
                <td>Kartın ne kadar "kolay" olduğu (2.5'ten başlar, min 1.3)</td>
            </tr>
            <tr>
                <td><code>interval</code></td>
                <td>Sonraki gözden geçirme için gün sayısı</td>
            </tr>
        </tbody>
    </table>
</div>

<p>Her gözden geçirmeden sonra, kullanıcı geri dönüşünü <strong>0 ile 5</strong> arasında bir notla değerlendirir:</p>

<ul>
    <li><strong>0–2</strong> = Başarısız (hatırlamadı)</li>
    <li><strong>3</strong> = Zor hatırladı</li>
    <li><strong>4</strong> = Biraz tereddütle doğru</li>
    <li><strong>5</strong> = Mükemmel hatırlama</li>
</ul>

<p>İşte temel mantık:<br/></p>

<div class="highlight js-code-highlight">
    <pre class="highlight javascript"><code><span class="kd">function</span> <span class="nf">sm2</span><span class="p">(</span><span class="nx">card</span><span class="p">,</span> <span class="nx">quality</span><span class="p">)</span> <span class="p">{</span>
      <span class="c1">// quality: kullanıcıdan gelen 0-5 arası puan</span>

      <span class="k">if</span><span class="p">(</span><span class="nx">quality</span> <span class="o"> <span class="mi">3</span><span class="p">)</span> <span class="p">{</span>
        <span class="c1">// Başarısız — başarı serisini sıfırla, yakında tekrar gözden geçir</span>
        <span class="nx">card</span><span class="p">.</span><span class="nx">repetitions</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
        <span class="nx">card</span><span class="p">.</span><span class="nx">interval</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
      <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
        <span class="c1">// Geçti — sonraki aralığı hesapla</span>
        <span class="k">if</span><span class="p">(</span><span class="nx">card</span><span class="p">.</span><span class="nx">repetitions</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
          <span class="nx">card</span><span class="p">.</span><span class="nx">interval</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
        <span class="p">}</span> <span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="nx">card</span><span class="p">.</span><span class="nx">repetitions</span> <span class="o">===</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
          <span class="nx">card</span><span class="p">.</span><span class="nx">interval</span> <span class="o">=</span> <span class="mi">6</span><span class="p">;</span>
        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
          <span class="nx">card</span><span class="p">.</span><span class="nx">interval</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nf">round</span><span class="p">(</span><span class="nx">card</span><span class="p">.</span><span class="nx">interval</span> <span class="o">*</span> <span class="nx">card</span><span class="p">.</span><span class="nx">easeFactor</span><span class="p">);</span>
        <span class="p">}</span>
        <span class="nx">card</span><span class="p">.</span><span class="nx">repetitions</span> <span class="o">+=</span> <span class="mi">1</span><span class="p">;</span>
      <span class="p">}</span>

      <span class="c1">// Kolaylık faktörünü güncelle</span>
      <span class="nx">card</span><span class="p">.</span><span class="nx">easeFactor</span> <span class="o">=</span> <span class="nx">card</span><span class="p">.</span><span class="nx">easeFactor</span> <span class="o">+</span> <span class="p">(</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="nx">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="nx">quality</span><span class="p">)</span> <span class="o">*</span> <span class="mf">0.02</span><span class="p">));</span>

      <span class="c1">// Kolaylık faktörü asla 1.3'ün altına düşmez</span>
      <span class="k">if</span><span class="p">(</span><span class="nx">card</span><span class="p">.</span><span class="nx">easeFactor</span> <span class="o"> <span class="mf">1.3</span><span class="p">)</span> <span class="nx">card</span><span class="p">.</span><span class="nx">easeFactor</span> <span class="o">=</span> <span class="mf">1.3</span><span class="p">;</span>

      <span class="c1">// Sonraki gözden geçirme tarihini belirle</span>
      <span class="nx">card</span><span class="p">.</span><span class="nx">nextReviewAt</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Date</span><span class="p">();</span>
      <span class="nx">card</span><span class="p">.</span><span class="nx">nextReviewAt</span><span class="p">.</span><span class="nf">setDate</span><span class="p">(</span><span class="nx">card</span><span class="p">.</span><span class="nx">nextReviewAt</span><span class="p">.</span><span class="nf">getDate</span><span class="p">() <span class="o">+</span> <span class="nx">card</span><span class="p">.</span><span class="nx">interval</span><span class="p">);</span>

      <span class="k">return</span> <span class="nx">card</span><span class="p">;</span>
    <span class="p">}</span>
    </code></pre>
</div>

<p>İşte bu kadar. Tüm algoritma yaklaşık 20 satıra sığdırılmıştır.</p>

<hr/>

<h2>
    <a name="how-i-modeled-this-in-the-database" href="#how-i-modeled-this-in-the-database">
    </a>
    Bunu Veritabanında Nasıl Modelledim
</h2>

<p>Laravel backend'imde, her kart kaydı <code>cards</code> tablosunda SM-2 durumunu saklar:<br/></p>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="c1">// database/migrations/create_cards_table.php</span>

    <span class="nc">Schema</span><span class="o">::</span><span class="nf">create</span><span class="p">(</span><span class="s1">'cards'</span><span class="p">,</span> <span class="k">function</span> <span class="p">(</span><span class="kt">Blueprint</span> <span class="nv">$table</span><span class="p">)</span> <span class="p">{</span>
        <span class="nv">$table</span><span class="o">-&gt;</span><span class="nf">id</span><span class="p">();</span>
        <span class="nv">$table</span><span class="o">-&gt;</span><span class="nf">foreignId</span><span class="p">(</span><span class="s1">'deck_id'</span><span class="p">)</span><span class="o">-&gt;</span><span class="nf">constrained</span><span class="p">()</span><span class="o">-&gt;</span><span class="nf">cascadeOnDelete</span><span class="p">();</span>
        <span class="nv">$table</span><span class="o">-&gt;</span><span class="nf">text</span><span class="p">(</span><span class="s1">'front'</span><span class="p">);</span>
        <span class="nv">$table</span><span class="o">-&gt;</span><span class="nf">text</span><span class="p">(</span><span class="s1">'back'</span><span class="p">);</span>

        <span class="c1">// SM-2 alanları</span>
        <span class="nv">$table</span><span class="o">-&gt;</span><span class="nf">integer</span><span class="p">(</span><span class="s1">'repetitions'</span><span class="p">)</span><span class="o">-&gt;</span><span class="k">default</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
        <span class="nv">$table</span><span class="o">-&gt;</span><span class="nf">float</span><span class="p">(</span><span class="s1">'ease_factor'</span><span class="p">)</span><span class="o">-&gt;</span><span class="k">default</span><span class="p">(</span><span class="mf">2.5</span><span class="p">);</span>
        <span class="nv">$table</span><span class="o">-&gt;</span><span class="nf">integer</span><span class="p">(</span><span class="s1">'interval'</span><span class="p">)</span><span class="o">-&gt;</span><span class="k">default</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
        <span class="nv">$table</span><span class="o">-&gt;</span><span class="nf">timestamp</span><span class="p">(</span><span class="s1">'next_review_at'</span><span class="p">)</span><span class="o">-&gt;</span><span class="nf">nullable</span><span class="p">();</span>

        <span class="nv">$table</span><span class="o">-&gt;</span><span class="nf">timestamps</span><span class="p">();</span>
    <span class="p">});</span></code></pre>
</div>

<p>Bir çalışma oturumu sona erdiğinde, ön uç kullanıcının değerlendirmesini API'ye gönderir ve arka uç SM-2 hesaplamasını gerçekleştirerek bu alanları günceller.</p>

<hr/>

<h2>
    <a name="the-study-session-flow" href="#the-study-session-flow">
    </a>
    🔁 Çalışma Oturumu Akışı
</h2>

<p>Bir çalışma oturumunun baştan sona nasıl çalıştığını inceleyelim:</p>

<h3>
    <a name="1-fetch-due-cards-laravel-controller" href="#1-fetch-due-cards-laravel-controller">
    </a>
    1. Süresi dolmuş kartları al (Laravel Controller)
</h3>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="c1">// CardController.php</span>

    <span class="k">public</span> <span class="k">function</span> <span class="n">getDueCards</span><span class="p">(</span><span class="nv">$deckId</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="nv">$cards</span> <span class="o">=</span> <span class="nc">Card</span><span class="o">::</span><span class="nf">where</span><span class="p">(</span><span class="s1">'deck_id'</span><span class="p">,</span> <span class="nv">$deckId</span><span class="p">)</span>
            <span class="o">-&gt;</span><span class="nf">where</span><span class="p">(</span><span class="k">function</span> <span class="p">(</span><span class="nv">$query</span><span class="p">)</span> <span class="p">{</span>
                <span class="nv">$query</span><span class="o">-&gt;</span><span class="nf">whereNull</span><span class="p">(</span><span class="s1">'next_review_at'</span><span class="p">)</span>
                      <span class="o">-&gt;</span><span class="nf">orWhere</span><span class="p">(</span><span class="s1">'next_review_at'</span><span class="p">,</span> <span class="s1">'&lt;',</span> <span class="nf">now</span><span class="p">());</span>
        <span class="p">})</span>
        <span class="o">-&gt;</span><span class="nf">get</span><span class="p">();</span>

    <span class="k">return</span> <span class="nf">response</span><span class="p">()</span><span class="o">-&gt;</span><span class="nf">json</span><span class="p">(</span><span class="nv">$cards</span><span class="p">);</span>
    <span class="p">}</span>
    </code></pre>
</div>

<p>Kartlar, <code>next_review_at</code> null ise (hiç çalışılmadı) veya geçmişte ise "süresi dolmuş" sayılır.</p>

<h3>
    <a name="2-user-studies-amp-rates-each-card-vue-3-frontend" href="#2-user-studies-amp-rates-each-card-vue-3-frontend">
    </a>
    2. Kullanıcı kartları çalışır ve her birini değerlendirir (Vue 3 ön uç)
</h3>

<div class="highlight js-code-highlight">
    <pre class="highlight vue"><code><span class="c"><!-- StudySession.vue --></span>
    <span class="nt"><span class="k">template</span><span class="nt">&gt;</span>
      <span class="nt"><div> <span class="na">class=</span><span class="s">"card-container"</span><span class="nt">&gt;</span>
        <span class="nt"><div> <span class="na">class=</span><span class="s">"card"</span> <span class="err">@</span><span class="na">click=</span><span class="s">"flipped = !flipped"</span><span class="nt">&gt;</span>
          <span class="nt"><p> <span class="na">v-if=</span><span class="s">"!flipped"</span><span class="nt">&gt;</span><span class="si">{{</span> <span class="nx">currentCard</span><span class="p">.</span><span class="nx">front</span> <span class="si">}}</span><span class="nt"/></p></span>
          <span class="nt"><p> <span class="na">v-else</span><span class="nt">&gt;</span><span class="si">{{</span> <span class="nx">currentCard</span><span class="p">.</span><span class="nx">back</span> <span class="si">}}</span><span class="nt"/></p></span>
        <span class="nt"/></div></span>

        <span class="nt"><p> <span class="na">v-if=</span><span class="s">"flipped"</span> <span class="na">class=</span><span class="s">"rating-buttons"</span><span class="nt">&gt;</span>
          <span class="nt"><button> <span class="na">v-for=</span><span class="s">"rating in [0, 1, 2, 3, 4, 5]"</span>
                  <span class="na">:key=</span><span class="s">"rating"</span>
                  <span class="err">@</span><span class="na">click=</span><span class="s">"submitRating(rating)"</span><span class="nt">&gt;</span>
            <span class="si">{{</span> <span class="nf">ratingLabel</span><span class="p">(</span><span class="nx">rating</span><span class="p">)</span> <span class="si">}}</span>
          <span class="nt"/></button></span>
        <span class="nt"/></p></span>
      <span class="nt"/></div></span>
    <span class="nt"/><span class="k">template</span><span class="nt">&gt;</span>

    <span class="nt"><span class="k">script</span> <span class="na">setup</span><span class="nt">&gt;</span>
    <span class="k">import</span> <span class="p">{</span> <span class="nx">ref</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">vue</span><span class="dl">'</span>
    <span class="k">import</span> <span class="p">{</span> <span class="nx">useStudyStore</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">@/stores/studyStore</span><span class="dl">'</span>

    <span class="kd">const</span> <span class="nx">store</span> <span class="o">=</span> <span class="nf">useStudyStore</span><span class="p">()</span>
    <span class="kd">const</span> <span class="nx">flipped</span> <span class="o">=</span> <span class="nf">ref</span><span class="p">(</span><span class="kc">false</span><span class="p">)</span>
    <span class="kd">const</span> <span class="nx">currentCard</span> <span class="o">=</span> <span class="nf">computed</span><span class="p">(()</span> <span class="o">=&gt;</span> <span class="nx">store</span><span class="p">.</span><span class="nx">currentCard</span><span class="p">)</span>

    <span class="k">async</span> <span class="kd">function</span> <span class="nf">submitRating</span><span class="p">(</span><span class="nx">quality</span><span class="p">)</span> <span class="p">{</span>
      <span class="nx">flipped</span><span class="p">.</span><span class="nx">value</span> <span class="o">=</span> <span class="kc">false</span>
      <span class="k">await</span> <span class="nx">store</span><span class="p">.</span><span class="nf">rateCard</span><span class="p">(</span><span class="nx">currentCard</span><span class="p">.</span><span class="nx">value</span><span class="p">.</span><span class="nx">id</span><span class="p">,</span> <span class="nx">quality</span><span class="p">)</span>
    <span class="p">}</span>

    <span class="kd">function</span> <span class="nf">ratingLabel</span><span class="p">(</span><span class="nx">q</span><span class="p">)</span> <span class="p">{</span>
      <span class="kd">const</span> <span class="nx">labels</span> <span class="o">=</span> <span class="p">[</span><span class="dl">'</span><span class="s1">Blackout</span><span class="dl">'</span><span class="p">,</span> <span class="dl">'</span><span class="s1">Yanlış</span><span class="dl">'</span><span class="p">,</span> <span class="dl">'</span><span class="s1">Tanıdık (Yanlış)</span><span class="dl">'</span><span class="p">,</span> <span class="dl">'</span><span class="s1">Zor</span><span class="dl">'</span><span class="p">,</span> <span class="dl">'</span><span class="s1">İyi</span><span class="dl">'</span><span class="p">,</span> <span class="dl">'</span><span class="s1">Kolay</span><span class="dl">'</span><span class="p">]</span>
      <span class="k">return</span> <span class="nx">labels</span><span class="p">[</span><span class="nx">q</span><span class="p">]</span>
    <span class="p">}</span>
    <span class="nt"/><span class="k">script</span><span class="nt">&gt;</span>
    </span></code></pre>
</div>

<h3>
    <a name="3-backend-applies-sm2-and-saves" href="#3-backend-applies-sm2-and-saves">
    </a>
    3. Arka uç SM-2 uygulaması ve kaydedilmesi
</h3>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="c1">// StudySessionController.php</span>

    <span class="k">public</span> <span class="k">function</span> <span class="n">rateCard</span><span class="p">(</span><span class="kt">Request</span> <span class="nv">$request</span><span class="p">,</span> <span class="nv">$cardId</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="nv">$card</span> <span class="o">=</span> <span class="nc">Card</span><span class="o">::</span><span class="nf">findOrFail</span><span class="p">(</span><span class="nv">$cardId</span><span class="p">);</span>
        <span class="nv">$quality</span> <span class="o">=</span> <span class="nv">$request</span><span class="o">-&gt;</span><span class="nf">input</span><span class="p">(</span><span class="s1">'quality'</span><span class="p">);</span> <span class="c1">// 0-5</span>

        <span class="c1">// SM-2'yi çalıştır</span>
        <span class="k">if</span> <span class="p">(</span><span class="nv">$quality</span> <span class="o"> <span class="mi">3</span><span class="p">)</span> <span class="p">{</span>
            <span class="nv">$card</span><span class="o">-&gt;</span><span class="n">repetitions</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
            <span class="nv">$card</span><span class="o">-&gt;</span><span class="n">interval</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="k">if</span> <span class="p">(</span><span class="nv">$card</span><span class="o">-&gt;</span><span class="n">repetitions</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
                <span class="nv">$card</span><span class="o">-&gt;</span><span class="n">interval</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
            <span class="p">}</span> <span class="k">elseif</span><span class="p">(</span><span class="nv">$card</span><span class="o">-&gt;</span><span class="n">repetitions</span> <span class="o">===</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
                <span class="nv">$card</span><span class="o">-&gt;</span><span class="n">interval</span> <span class="o">=</span> <span class="mi">6</span><span class="p">;</span>
            <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
                <span class="nv">$card</span><span class="o">-&gt;</span><span class="n">interval</span> <span class="o">=</span> <span class="nb">round</span><span class="p">(</span><span class="nv">$card</span><span class="o">-&gt;</span><span class="n">interval</span> <span class="o">*</span> <span class="nv">$card</span><span class="o">-&gt;</span><span class="n">ease_factor</span><span class="p">);</span>
            <span class="p">}</span>
            <span class="nv">$card</span><span class="o">-&gt;</span><span class="n">repetitions</span> <span class="o">+=</span> <span class="mi">1</span><span class="p">;</span>
        <span class="p">}</span>

        <span class="nv">$newEF</span> <span class="o">=</span> <span class="nv">$card</span><span class="o">-&gt;</span><span class="n">ease_factor</span> <span class="o">+</span> <span class="p">(</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="nv">$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="nv">$quality</span><span class="p">)</span> <span class="o">*</span> <span class="mf">0.02</span><span class="p">));</span>
        <span class="nv">$card</span><span class="o">-&gt;</span><span class="n">ease_factor</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mf">1.3</span><span class="p">,</span> <span class="nv">$newEF</span><span class="p">);</span>
        <span class="nv">$card</span><span class="o">-&gt;</span><span class="n">next_review_at</span> <span class="o">=</span> <span class="nf">now</span><span class="p">()</span><span class="o">-&gt;</span><span class="nf">addDays</span><span class="p">(</span><span class="nv">$card</span><span class="o">-&gt;</span><span class="n">interval</span><span class="p">);</span>

        <span class="nv">$card</span><span class="o">-&gt;</span><span class="nf">save</span><span class="p">();</span>

        <span class="k">return</span> <span class="nf">response</span><span class="p">()</span><span class="o">-&gt;</span><span class="nf">json</span><span class="p">(</span><span class="nv">$card</span><span class="p">);</span>
    <span class="p">}</span>
    </code></pre>
</div>

<hr/>

<h2>
    <a name="what-i-learned-building-this" href="#what-i-learned-building-this">
    </a>
    Bu Projeyi Geliştirirken Öğrendiklerim
</h2>

<p><strong>1. SM-2 aldatıcı derecede basit.</strong> Algoritmanın kendisi minik bir yapı — karmaşıklık, etrafında bir oturum kullanıcı deneyimi oluşturmakta (kart çevirmek, değerlendirmeler, ilerleme takibi).</p>

<p><strong>2. Kolaylık faktörü, gizli baharat.</strong> Sürekli başarı sağladığınız kartlar otomatik olarak daha uzağa itilir. Sürekli başarısız olduğunuz kartlar sık sık gelir. Hiçbir ayarlama yapmanıza gerek yoktur — kendiliğinden ayarlanır.</p>

<p><strong>3. "Süresi dolmuş kartlar" sorguları için bir indeks gerekli.</strong> Binlerce kartınız olduğunda, <code>next_review_at</code> üzerinden sorgulama yavaşlar. Bu sütuna bir veritabanı indeksi ekledim ve gözle görülür bir fark yarattı:<br/></p>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="nv">$table</span><span class="o">-&gt;</span><span class="nf">index</span><span class="p">(</span><span class="s1">'next_review_at'</span><span class="p">);</span>
    </code></pre>
</div>

<p><strong>4. Başarısız olan kartlar, aralık 0'a ayarlanmamalı.</strong> Yaygın bir hata, başarısızlık durumunda <code>interval = 0</code> ayarlamaktır, bu durum kartın hemen aynı oturumda tekrar tekrar görünmesini sağlar. Bunu <code>1</code> (yarın gözden geçirme) olarak ayarlamak pratikte çok daha rahat hissettirir.</p>


<hr/>

<h2>
    <a name="whats-next" href="#whats-next">
    </a>
    Sıradaki Adımlar
</h2>

<p>SM-2 algoritması 1987 yılından beri var — işe yarıyor fakat daha yeni alternatifler bulunuyor. <strong>FSRS algoritması</strong> (Free Spaced Repetition Scheduler), SM-2'yi aşan modern bir sinir ağı tabanlı yaklaşımdır. Bunu bir sonraki hedefim olarak geliştirmek istiyorum.</p>

<p>Projenin tamamı hakkında daha fazla şey öğrenmek isterseniz — AI kart oluşturma, topluluk desteleri ve Google OAuth dahil olmak üzere — repo burada: <a href="https://github.com/chelsynew72/flashcard-app" target="_blank" rel="noopener noreferrer">github.com/chelsynew72/flashcard-app</a> ve canlı demo <a href="https://flashcard-app-five-gamma.vercel.app" target="_blank" rel="noopener noreferrer">flashcard-app-five-gamma.vercel.app</a>.</p>


<hr/>

<p>Spaced repetition ile bir şey geliştirdiniz mi? Nasıl bir yaklaşım benimsediğinizi duymak isterim — aşağıda bir yorum bırakın!</p>

Kaynak: Orijinal Makale

cPanel’de Laravel storage:link Çalışmıyor mu? Dağıtım Sonrası Görseller Kayboluyor
Laravel chunk() vs cursor() vs lazy() — Büyük Verileri Sunucunuzu Çökertmeden İşleme
Laravel ile Inertia ve React kullanarak Çok Dilli Uygulama Geliştirme: Pratik Bir Kılavuz
Laravel 12 SweetAlert2 Silme Onayı Örneği
SLA’lar Başarısız Olmaz, Kötü SLA Yönetimi Olur!
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Cisco, Aktif Olarak İstismar Edilen Yeni SD-WAN Açıkları Belirledi!
Sonraki Makale Final Fantasy Faciası: Klasik Oyunlar Yeniden Gözden Geçiriliyor

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Ekran görüntülerinizi Yönetmenin Yolu: Pool Neler Sunuyor?
Liste
2026 Yeni Dyson Süpürgeleri: V16 Piston Animal, V10 Konical ve V8 Cyclone!
Genel
Yüksek AI maliyetleri; firmalar bütçe için Çin LLM’lerine yöneliyor
Donanım
League of Legends Klasikleri İçin Beklentiler ve Endişeler
Oyun
FBI Gerçek Dünya Siber Saldırılarını Simüle İçin Kendi Küçük Kasabasını Kurdu
Genel
Yapay Zeka Bu Yılki Tribeca Film Festivali’nde Fark Yaratıyor
Liste
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?