ශ්‍රී ලංකාවේ නවතම තාක්ෂණික පුවත් 2026-07-24, Friday
💻 ක්‍රමලේඛනය · 🕒 කියවීමට විනාඩි 2 · 👁 1

දිනපතා එකම කාඩ්පත ලබා ගන්න: දත්ත සමුදා නොවූ Deterministic Draw ක්‍රමය

දිනපතා එකම කාඩ්පත ලබා ගන්න: දත්ත සමුදා නොවූ Deterministic Draw ක්‍රමය

දිනපතා "කාර්ඩ් ඔෆ් දේ" (Card of the Day) විශේෂාංගයක් නිර්මාණය කරන විට, එක් පරිශීලකයෙක්ට එකම කාඩ්පත සම්පූර්ණ දිනයේම ලැබීමට, අලුත් දිනයේ වෙනස් වීමට අවශ්‍යතාවය තිබේ. බොහෝ විකල්පයන් දත්ත සමුදායේ (database) පරිශීලක‑දිනය‑කාඩ් සම්බන්ධතා ගබඩා කිරීමේ පසුබැසීමෙන් පසු, අතිරේක ලේඛන, කාලකලාප (timezone) කෝලම්, පිරිසිදු කිරීමේ රැකවරණ වැඩසටහන් වැනි බරපතළ ඉංජිනේරු පසුබැසීමක් ඇති වේ.

මෙම ගැටළුවට සරල විසඳුමක් නම්, දැනට පවතින පරාමිතීන් (userId, date, deck) භාවිතා කර, සම්පූර්ණයෙන්ම pure function එකක් ලෙස කාඩ්පත තේරීමයි. උදාහරණයක් ලෙස, hash32(`${userId}:${date}`) ලෙස 32‑බිට් හෑෂ් එකක් ගණනය කර, එය කාඩ්පත් ගණනෙන් මොඩුලෝ (modulo) කර ගැනීමෙන් අවශ්‍ය කාඩ්පත ලැබේ. මේ ක්‍රමය සත්‍ය හෑෂ් (FNV‑1a, xxhash) භාවිතා කරන්නේ නම්, එම ගණනය සෑම සේවාදායකයකුම එකසේ සිදු වේ, ගබඩා අවශ්‍ය නොවේ.

කාලකලාප (timezone) සම්බන්ධයෙන් ප්‍රශ්නයක් පවතී. "අද" යන අදහස ගෝලීය නොවන බැවින්, ටෝකියෝ සහ ලොස් ඇන්ජලස් පරිශීලකයන්ට දිනයේ වෙනස් මොහොතකට කාඩ්පත වෙනස් විය හැක. විසඳුම් තුනක් ඇත: (1) සියලුදෙනාට UTC භාවිතා කිරීම – සරලයි, නමුත් පසුබැසීමක් ඇති වේ; (2) ගනුදෙනුකරු (client) වාර්තා කරන දින – නිරවද්‍යයි, නමුත් පරිශීලකයාගේ කාලය වෙනස් කරලා නැවත තේරීම කළ හැක; (3) සේවාදායකය පරිශීලක‑පරිශීලක කාලකලාපය ගබඩා කිරීම – නිරවද්‍යයි, නමුත් ගබඩා අවශ්‍ය වේ. ලේඛකයා තෝරාගත් විසඳුම වන්නේ client‑reported date එක, එය server‑side එකේ UTC±1 දිනය තුළ පරීක්ෂා කර ගැනීමයි. මෙය සරලයි, සහ පරිශීලකයාගේ ක්ලොක් වෙනස් කරලා කාඩ්පත වෙනස් කරගැනීමට අවශ්‍ය නම්, එය ඉඩ දෙයි.

ඩෙක් (deck) සංස්කරණය (versioning) ගැනත් සැලකිල්ලක් තියෙනවා. නව කාඩ් එකක් එක්කන විට, seed % deck.length වෙනස් වෙමින්, පසුගිය දිනයේ කාඩ්පත වෙනස් විය හැක. මෙය වැළැක්වීමට, deck version එක seed හි කොටසක් ලෙස ඇතුළත් කරයි: hash32(`${userId}:${date}:${deckVersion}`). මෙය අනාගතයේ deck එක වෙනස් කරන විට, පරණ version වල කාඩ්පත ස්ථාවරව රඳා පවතී.

ශ්‍රී ලංකාවට ඇති වැදගත්කම

ශ්‍රී ලංකාවේ ඉගෙනුම් ආයතන, තාක්ෂණ ආරම්භකයන්, සහ ව්‍යාපාරික සංවර්ධකයන්ට මේ ක්‍රමය විශාල ප්‍රතිලාභයක් ගෙනෙනවා. පළමුව, දත්ත සමුදායක පරිසරයක් අවශ්‍ය නොවීම නිසා, සරල වෙබ්‑යෙදුම් හෝ මොබයිල් ඇප්ස් ඉක්මනින් නිර්මාණය කරගත හැක. දෙවැනි වශයෙන්, සර්වර්‑පාර්ශ්වයේ කාලකලාප ගැටළුවට සුවිශේෂී විසඳුමක් ලබා දීම නිසා, ලොක්කුවා පරිශීලකයන්ට සමාන අත්දැකීමක් ලැබේ. තුන්වැනි වශයෙන්, deck versioning මඟින් අලුත් කාඩ් එකක් එක්කන විට පරණ පරිශීලකයන්ගේ අත්දැකීම අස්ථිර නොවී, අඩු maintenance cost එකක් රැගෙන එයි. මේ සියල්ලම, තාක්ෂණික නිර්මාණය සඳහා වැය වන සම්පත් අඩු කර, ශ්‍රී ලංකාවේ තාක්ෂණික ආරම්භකයන්ට නව නිපුණතා අත්හදා බැලීමට ඉඩ සලසයි.

අවසානයේ, මේ deterministic draw ක්‍රමය “කාර්ඩ් ඔෆ් දේ” වැනි අතුරුදන් වීමේ (ephemeral) විශේෂාංග සඳහා ඉතා සුදුසු වේ. ඉතිරි පසුබැසීමක් නැතිව, කේතය පමණක් මත පදනම්ව කාඩ්පත තේරීමේ ලාභය, ශ්‍රී ලංකාවේ සංවර්ධකයන්ගේ නිර්මාණශීලීත්වය ඉහළ නංවයි.

💡 ඔබේ ව්‍යාපෘතියේ දිනපතා රැඳවුම් පද්ධතිය මෙයත් සමඟ අත්හදා බලන්න!
මූලාශ්‍රය මෙම ලිපිය AI මගින් රචිත මුල් සාරාංශයකි. සම්පූර්ණ වාර්තාව කියවන්න:
Dev.to ↗
#DailyCard #Hashing #NoDB #Programming #SriLanka