مقصد یہ ہے کہ ہر کارڈ پر ایک بار پوچھا جائے، ہر فریم پر نہیں
کارڈ کی پہچان کا مسئلہ حل ہو چکا ہے۔ کسی اچھے ماڈل کو ٹریڈنگ کارڈ دکھائیں تو نام، سیٹ اور نمبر تقریباً آدھے سیکنڈ میں واپس آ جاتے ہیں۔ مشکل تب آتی ہے جب یہی کام ویڈیو پر کیا جائے: تکنیکی وجہ سے نہیں، محض حجم کی وجہ سے۔
ویڈیو زیادہ تر تکرار ہے۔ پندرہ فریم فی سیکنڈ پر چار سیکنڈ تک اٹھایا ہوا کارڈ ایک ہی کارڈ کی ساٹھ تصویریں ہے، اور پہچان کے اینڈ پوائنٹ سے ساٹھ بار پوچھنے پر وہی جواب ساٹھ بار ملتا ہے۔ ہر سیدھی سادی اسٹریمنگ پائپ لائن بالکل یہی کرتی ہے، اور اسی لیے اسٹریمنگ کے تجزیے کے بارے میں مشہور ہے کہ اسے صرف بھاری سرمائے والا پلیٹ فارم ہی چلا سکتا ہے۔
cardstream اسی تکرار کو ختم کرنے کے لیے بنا ہے۔ یہ آپ کی ویڈیو اور پہچان کی کال کے درمیان ایک چھوٹی سی اسٹیٹ مشین ہے، جو تقریباً پوری کی پوری ان اشاروں پر چلتی ہے جو وہ خود نکالتی ہے: کیا منظر ٹھہر گیا ہے، کیا یہ وہی کارڈ ہے جو ایک لمحہ پہلے تھا، کیا فریم میں کوئی کارڈ ہے بھی۔ کال تب جاتی ہے جب کوئی واقعی نیا کارڈ ٹھہر چکا ہو، ورنہ نہیں۔ باقی سب کچھ اس ہارڈ ویئر پر چلتا ہے جو پہلے سے آپ کے پاس ہے۔
ہر کارڈ پر ایک کال، ہر فریم پر نہیں
پندرہ فریم فی سیکنڈ پر ایک گھنٹے کا شو (یہ وہ زیادہ سے زیادہ رفتار ہے جس پر پروجیکٹ جانچا گیا ہے) اور لینز کے سامنے رکھے گئے تقریباً سو الگ کارڈز۔ بالکل اسی ویڈیو کے تجزیے کے دو طریقے:
پہچان کی کالز: ہر فریم پر ایک، اور ان میں سے زیادہ تر وہی سوال دہراتی ہیں جس کا جواب ایک لمحہ پہلے مل چکا تھا۔
پہچان کی کالز: ہر الگ کارڈ پر ایک، فریم ریٹ جو بھی ہو اور کارڈ جتنی دیر بھی اٹھائے رکھیں۔
تقریباً 540 گنا کم کالز، اور یہ فرق اعداد کا کھیل نہیں: یہی پورا ڈیزائن ہے۔ کارڈ کو ساکن پکڑے رکھیں تو گنتی نہیں بدلتی۔ کیمرا تیز چلائیں تو گنتی نہیں بدلتی۔ کالز کی گنتی آپ کے دکھائے ہوئے کارڈز کے ساتھ چلتی ہے، اسٹریم کے گھنٹوں کے ساتھ نہیں۔
اسے کون چلائے رکھتا ہے
پہچان کو پروڈکشن میں چلانے والوں کا بنایا ہوا
cardstream اسی ٹیم سے آیا ہے جو Ximilar کی کلیکٹیبلز پہچان کے پیچھے ہے۔ یہ پہچان کے جن اینڈ پوائنٹس کو کال کرتا ہے وہی ہم پروڈکشن میں چلاتے ہیں، اس لیے کلائنٹ اور سروس دونوں کی دیکھ بھال وہی لوگ کرتے ہیں۔
کام سب کے سامنے ہے
پورا پیکج GitHub پر ہے: اسٹیٹ مشین، ڈیپلائمنٹ کی دونوں صورتیں اور براؤزر UI۔ فیصلے کی منطق کا کوئی حصہ کسی ایسی سروس کے پیچھے چھپا نہیں جسے کھول کر دیکھا نہ جا سکے۔
نیٹ ورک کے بغیر ٹیسٹ شدہ
پورا ٹیسٹ سوٹ آف لائن چلتا ہے، جہاں ماڈل فائلز اور HTTP کالز کی جگہ نقلی متبادل لے لیتے ہیں۔ بغیر API کلید والے لیپ ٹاپ پر ریپو فورک کریں تو بھی پتا چل جاتا ہے کہ آپ سے کچھ ٹوٹا یا نہیں۔
وہ باتیں جو کوڈ کو بھولنے کی اجازت نہیں
-
ہر کارڈ پر ایک کال، ہر فریم پر نہیں
ڈیزائن کا ہر فیصلہ یہیں سے شروع ہوتا ہے۔ جو اشارہ لوکل نکالا جا سکتا ہے، وہ مشین سے باہر جانے والی واحد کال سے پہلے چلتا ہے۔
-
فیصلے کی منطق کی ایک ہی کاپی
کال کب کرنی ہے، یہ فیصلہ ٹھیک ایک ماڈیول میں رہتا ہے۔ کسی ڈرائیور، ٹرانسپورٹ اور UI میں بکھرا ہوا نہیں جہاں تین لوگ اسے تین طرح بدل دیں: ایک فائل، جو ایک نشست میں پڑھی جا سکے۔
-
ڈرائیورز ہلکے رہتے ہیں
شیڈولنگ، لاگنگ اور I/O ڈرائیور کا کام ہے؛ نیا کارڈ کسے کہا جائے، یہ انجن کا۔ فریمز کے پہنچنے کا طریقہ بدلنے سے چپکے سے یہ نہیں بدلتا کہ کال کب جاتی ہے۔
-
فریم لوپ کو کوئی چیز نہیں روکتی
ڈی کوڈنگ، ڈیٹیکشن، HTTP اور ڈسک، سب لوپ سے باہر چلتے ہیں۔ پہچان سست ہو تو ایک فریم چھوٹ جاتا ہے؛ آپ کی اسٹریم بڑھتی ہوئی تاخیر میں کبھی نہیں بدلتی۔
-
کسی پرووائیڈر کی پابندی نہیں، ہماری بھی نہیں
پہچان کی کال ایک چھوٹے سے انٹرفیس کے پیچھے ایک ایسا مرحلہ ہے جو بدلا جا سکتا ہے۔ اسے بالکل کسی اور طرف موڑ دیں تو بھی ہر فلٹر، رفتار کی ہر پابندی اور ہر کیش کام کرتا رہتا ہے۔
-
طے شدہ طور پر سیلف ہوسٹڈ
آپ کا ہارڈ ویئر، آپ کی کلید، آپ کی ویڈیو۔ کلائنٹ سائیڈ موڈ میں مشین سے صرف ہر الگ کارڈ کا ایک کراپ باہر جاتا ہے، جب تک آپ خود شو کو اپنے Ximilar اکاؤنٹ میں محفوظ کرنے کا فیصلہ نہ کریں۔
جو کچھ کارڈز نے ہمیں سکھایا
ان میں سے کچھ باتیں اتنی خلافِ توقع ہیں کہ ہم انہیں وہاں لکھ دیتے ہیں جہاں اگلا آنے والا انہیں پا لے: ریپو میں، اسی کوڈ کے ساتھ جس پر وہ لاگو ہوتی ہیں۔
مدد کے لیے دیا گیا اشارہ درستگی گھٹا سکتا ہے
اینڈ پوائنٹ کو یہ بتانے سے کہ کارڈ کس گیم کا ہے، اس کا اپنا رسم الخط پہچاننے والا کلاسیفائر بند ہو جاتا ہے اور وہ latin مان لیتا ہے، یوں جاپانی کارڈ چپکے سے اپنے انگریزی پرنٹ سے میچ ہو جاتا ہے۔ یہ اندازہ نہیں، ناپی ہوئی بات ہے، اور اسی لیے رسم الخط کے بغیر گیم بتانا غلطی شمار ہوتا ہے۔
ذرا ڈھیلا کراپ بہتر میچ ہوتا ہے
کارڈ کے بالکل کنارے سے کاٹا ہوا کراپ دیکھنے میں ٹھیک لگتا ہے مگر نتیجہ کمزور دیتا ہے۔ جو کراپ باہر جاتا ہے اس میں جان بوجھ کر حاشیہ چھوڑا جاتا ہے، کیونکہ آس پاس کا تھوڑا سا منظر صاف کنارے سے بہتر ثابت ہوتا ہے۔
سنبھل جانا دکھاوے سے بہتر ہے
جب کوئی کال اپنے ٹائم آؤٹ کے بعد بھی لٹکی رہے تو پائپ لائن خود کو چھڑا کر آگے بڑھ جاتی ہے، اور اس نتیجے کا انتظار نہیں کرتی جو شاید کبھی نہ آئے۔ یہ کمزوری ریپو میں لکھی ہوئی ہے، اس پر پردہ نہیں ڈالا گیا۔
پڑھیں، چلائیں، پیچ بھیجیں
ریپوزٹری پبلک ہے: انسٹال ہونے والا ایک Python پیکج، الگ الگ extras اور براؤزر UI کے ساتھ۔ لوکیٹر اور ایمبیڈنگ کے ویٹس ہمارے اپنے ہیں، ہمارے ٹرین کیے ہوئے اور ریلیزز کے ساتھ Apache-2.0 کے تحت شائع شدہ۔ issues اور pull requests کا خیرمقدم ہے، خاص طور پر اصل شوز کی رپورٹس کا، جن سے وہ چیزیں سامنے آتی ہیں جو کسی ٹیسٹ سیٹ اپ میں نہیں آتیں۔
پہچان خود Ximilar کا اینڈ پوائنٹ ہے اور ہمیشہ رہے گا؛ یہی وہ حصہ ہے جس کے پیچھے کارڈز کا ڈیٹا بیس ہے۔ اس کے ارد گرد کا سب کچھ آپ کا ہے، جیسے چاہیں بدلیں۔
اوپن سورس۔ سیلف ہوسٹڈ۔ آپ کی اسٹریم، آپ کا اسٹیک۔
بیچ میں کوئی پلیٹ فارم نہیں، فی صارف لائسنس نہیں: Ximilar API یا اپنا پہچان کا سسٹم جوڑیں، اور cardstream اسے ہر فریم پر نہیں، ہر الگ کارڈ پر ایک بار کال کرتا ہے۔ چاہے Whatnot پر باکس بریک ہو، Fanatics Live جیسا شو ہو یا آپ کا اپنا لائیو کامرس سیٹ اپ، cardstream آج رات ہی اسی ہارڈ ویئر پر چلائیں جو آپ کے پاس پہلے سے ہے۔