فنٹیک میں، ہمیں اکثر کرنسی ایکسچینج ریٹ ڈیٹا کی کافی بڑی مقدار پر کارروائی کرنی پڑتی ہے۔ ہمیں مختلف ذرائع سے ڈیٹا ملتا ہے، اور ان میں سے ہر ایک کا اپنا خیال ہے کہ کل، پرسوں، اگلے مہینے اور یہاں تک کہ اگلے تین سالوں کے لیے شرح مبادلہ کو کیسے بڑھایا جائے۔ اگر صرف کوئی نرخوں کی پیش گوئی کرسکتا ہے۔ صحیح طریقے سے، یہ کاروبار بند کرنے اور صرف حماقت سے پیسے آگے پیچھے کرنے کا وقت ہوگا۔ کچھ ذرائع زیادہ قابل بھروسہ ہیں، کچھ مکمل ردی کی ٹوکری کی فراہمی کرتے ہیں، تقریباً درست اقدار کے نایاب شمولیت کے ساتھ، لیکن غیر ملکی جوڑوں کے لیے۔ ہمارا کام ان دسیوں ہزار اقدار کو فی سیکنڈ میں چھاننا اور یہ طے کرنا ہے کہ صارفین کو بالکل کیا دکھانا ہے۔ ہمیں ٹن گندگی اور گاد سے ایک صحیح قدر کو فلٹر کرنے کی ضرورت ہے، بالکل اسی طرح جیسے فلیمنگو دوپہر کے کھانے میں کرتے ہیں۔
فلیمنگو کی ایک خاص امتیازی خصوصیت ان کی نیچے کی طرف مڑے ہوئے چونچ ہیں، جس سے وہ پانی یا کیچڑ سے خوراک کو چھانتے ہیں۔
- وکی
اس طرح لائبریری کا جنم ہوا۔ Vela، جو مخصوص وقت کے وقفوں پر متعدد اقدار کے لیے اسٹیٹ کیش کو اسٹور کرتا ہے۔ ہڈ کے نیچے، یہ مکھی پر خراب اور پرانے ڈیٹا کو فلٹر کرتا ہے، اور تازہ ترین تک رسائی بھی فراہم کرتا ہے۔ N ہر کلید کے لیے توثیق شدہ اقدار (ہمارے معاملے میں کرنسی کے جوڑے)۔
ہم کہتے ہیں کہ ہم تین کرنسی جوڑوں کے لیے ریٹ جمع کرتے ہیں۔ آسان ترین تعریف Vela موجودہ حالت کو ذخیرہ کرنے کے لئے یہ کچھ اس طرح نظر آئے گا:
defmodule Pairs do
use Vela,
eurusd: [sorter: &Kernel.<=/2],
eurgbp: [limit: 3, errors: 1],
eurcad: [validator: Pairs]
@behaviour Vela.Validator
@impl Vela.Validator
def valid?(:eurcad, rate), do: rate > 0
end
ترتیب پیرامیٹر threshold، اور - اختیاری طور پر - compare_by، باب دیکھیں موازنہ نیچے
اگر توثیق کامیاب ہو جاتی ہے، تو قیمت کو متعلقہ کلید کے تحت فہرست میں شامل کر دیا جاتا ہے؛ بصورت دیگر، ٹیپل {serie, value} کو جاتا ہے :__errors_.
مقابلے
ان قطاروں میں ذخیرہ شدہ قدریں کچھ بھی ہو سکتی ہیں۔ پڑھانا Vela ان کا موازنہ کرنے کے لئے، یہ منتقل کرنے کے لئے ضروری ہے compare_by سیریز کی تعریف میں پیرامیٹر (جب تک کہ اقدار کا معیار کے ساتھ موازنہ نہیں کیا جاسکتا Kernel.</2); یہ پیرامیٹر قسم کا ہونا چاہیے۔ (Vela.value() -> number()). پہلے سے طے شدہ طور پر یہ آسان ہے۔ & &1.
اس کے علاوہ، آپ قطار کی تعریف میں ایک پیرامیٹر پاس کر سکتے ہیں۔ comparator ڈیلٹا کی قدروں کا حساب لگانا (min/max); مثال کے طور پر، ترسیل کے ذریعے Date.diff/2 ایک موازنہ کے طور پر، آپ تاریخوں کے لیے صحیح ڈیلٹا حاصل کر سکتے ہیں۔
کام کرنے کا ایک اور آسان طریقہ پیرامیٹر پاس کرنا ہے۔ threshold، جو نئی قدر کے زیادہ سے زیادہ قابل اجازت تناسب کی وضاحت کرتا ہے۔ {min, max} وقفہ چونکہ یہ ایک فیصد کے طور پر بیان کیا گیا ہے، چیک استعمال نہیں کرتا ہے۔ comparatorلیکن پھر بھی استعمال کرتا ہے compare_by. مثال کے طور پر، تاریخ کے اوقات کے لیے ایک حد کی قدر بتانے کے لیے، آپ کو بتانا ضروری ہے۔ compare_by: &DateTime.to_unix/1 (انٹیجر ویلیو حاصل کرنے کے لیے) اور threshold: 1، جس کی وجہ سے نئی اقدار کو صرف اس صورت میں اجازت دی جائے گی جب وہ اندر ہوں۔ ±band موجودہ اقدار سے وقفہ۔
آخر میں، آپ استعمال کر سکتے ہیں Vela.equal?/2 دو کیچوں کا موازنہ کرنا۔ اگر اقدار کسی فنکشن کی وضاحت کرتی ہیں۔ equal?/2 یا compare/2، پھر ان افعال کو موازنہ کے لیے استعمال کیا جائے گا، ورنہ ہم احمقانہ طور پر استعمال کرتے ہیں۔ ==/2.
اقدار حاصل کرنا
موجودہ حالت پر کارروائی عام طور پر کالنگ سے شروع ہوتی ہے۔ Vela.purge/1، جو متروک اقدار کو ہٹاتا ہے (اگر validator سے منسلک timestamps)۔ اس کے بعد آپ کال کر سکتے ہیں۔ Vela.slice/1جو واپس آجائے گا۔ keyword قطار کے ناموں کے ساتھ بطور کلید اور پہلی، اصل اقدار۔
آپ بھی استعمال کر سکتے ہیں۔ get_in/2/pop_in/2 ہر قطار میں اقدار تک کم سطح تک رسائی کے لیے۔
درخواست
Vela جیسے عمل کی حالت میں ٹائم سیریز کیشے کے طور پر انتہائی مفید ثابت ہوسکتا ہے۔ GenServer/Agent. ہم کبھی بھی باسی کورس اقدار کا استعمال نہیں کرنا چاہتے ہیں، اور ایسا کرنے کے لیے ہم صرف اس عمل کو ریاستی عمل کے ساتھ رکھتے ہیں۔ Vela، ذیل میں دکھایا گیا توثیق کنندہ کے ساتھ۔
и Vela.purge/1 جب بھی ہمیں ڈیٹا کی ضرورت ہوتی ہے خاموشی سے تمام باسی اقدار کو ہٹا دیتا ہے۔ اصل اقدار تک رسائی کے لیے ہم صرف کال کرتے ہیں۔ Vela.slice/1، اور جب کورس کی ایک چھوٹی سی تاریخ کی ضرورت ہوتی ہے (پوری سیریز)، تو ہم اسے صرف واپس کردیتے ہیں - پہلے سے ترتیب شدہ - توثیق شدہ اقدار کے ساتھ۔