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

CVE-2025-54068: Laravel Livewire Kod Enjeksiyonu Açığı
Inertia.js Uygulamanızı Sessizce Bozar
Z.AI LARAVEL 12 SDK – Geliştirici Topluluğu
Sıfırdan RAG’a: Laravel Uygulamasında Retrieval-Augmented Generation’ı Uygulama
Laravel ve yt-dlp Kullanarak TikTok Video İndirici Nasıl Oluşturulur
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

Laravel AI SDK ile ReAct Sohbet Ajanı Geliştirme
Yazılım
Final Fantasy Revelasyonu: Definitif Son Ama Yan Hikayelere Kapı Aralıyor
Oyun
Final Fantasy 7’de Bulut’u Kara Büyücüye Dönüştüren Yenilikçi Sistem
Oyun
Yenilenen Korku Hikayesi: Michael Myers Maskesi ve Bıçağını Buldu
Oyun
Kripto Para Piyasasında Sert Düşüş: Bitcoin ve Ether FTX Krizinden Beri En Kötü Haftayı Geçirdi
Finans
Laravel ile Çok Kiracılı Bir Bordro Motoru Geliştirirken Öğrendiklerimiz
Yazılım
//

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?