پروگرامر حضرات کے راز یا جگاڑیں۔۔۔

پچھلے سال ہم انفارمیشن ویژولائزیشن کورس کے لیے ایک پروجیکٹ پر کام کر رہے تھے۔ اس کے تحت ہمیں K-12 Web Archivingکی سائٹ پر موجود مواد کو زیادہ مؤثر طریقے سے پیش کرنا تھا۔ ہمیں ضرورت محسوس ہوئی کہ وہاں موجود کئی ہزار یو آر ایلز کے ذخیرے کی اسکرین شاٹ لے لی جائے اور ان سے تھمب نیل بھی بنا لیے جائیں تا کہ نمائش کے لیے ٹائٹل پر لنک دینے کے بجائے تھمب نیل کو متعلقہ سائٹ سے لنک کیا جائے۔ فرداً فرداً اتنے سارے صفحات کا اسکرین شاٹ لینا ممکن نہ تھا اس لیے اسکرین شاٹ لینے والے اسکرپٹ ڈھونڈنے لگے۔ پائتھون میں بنا ایک اسکرپٹ مل بھی گیا لیکن وہ کسی سبب چلا نہیں۔ ہمیں ذرا جلدی تھی اس لیے کوئی ویب سروس ڈھونڈھنے لگے جو یو آر ایل سبمٹ کرنے پر اس کا اسکرین شاٹ بنا دے۔ ایسی کچھ سائٹیں مل بھی گئیں لیکن ان کے ساتھ عجیب و غریب قسم کی حد بندیاں تھیں۔ بہر کیف ہم نے ایک ویب سروس کا انتخاب کر لیا۔ ان کا طریقہ کار یہ تھا کہ ان کی سروس یو آر ایل کے بعد جس ویب صفحے کا اسکرین شاٹ لینا ہو اس کا یو آر ایل شامل کر دیں تو اسکرین شاٹ بنا کر مہا کر دی جاتی تھی۔ یہ ایپلیکیشن گوگل ایپ انجن پر بنا تھا اور اس میں دو مسائل تھے۔ اول تو یہ کہ اس کا استعمال کرنے کے لیے گوگل اکاؤنٹ سے لاگن ہو کر اس سروس کو او آتھ (OAuth) پروٹوکول کی مدد سے آتھرائز کرنا ہوتا تھا اور دوسرا مسئلہ یہ تھا کہ اسکرین شاٹ بنانے کی ریکوئیسٹ ایسنکرونس تھی۔ یعنی ضروری نہیں کہ پہلی کوشش کے نتیجے میں فوراً اسکرین شاٹ دستیاب ہو جائے بلکہ اسکرین شاٹ کی کال سرور پر ایک قطار میں لگ جاتی تھی اور جب بھی وہ ریکوئیسٹ پروسیس ہوتی تو دوسری بار اسی ریوکئسٹ کو دہرانے پر کیش سے وہ تصویر فراہم کر دی جاتی تھی۔ اس کا مطلب یہ ہوا کہ ہم تقریباً تیس ہزار ویب پیج یو آر ایلز کو پروگرام کی مدد سے یکے بعد دیگرے ایک لوپ میں چلاتے اور چند منٹ رک کر دوبارہ یہی عمل دہراتے تو زیادہ تر تصاویر حاصل ہو جاتیں لیکن مسئلہ یہ تھا کہ پروگرام کی مدد سے او آتھ والا آتھرائزیشن اور گوگل اکاؤنٹ لاگن ایک الگ مسئلہ تھا جس کو کوڈ کرنے کے لیے مزید کام کرنا ہوتا۔ خیر ہم نے یہ حل نکالا کہ ایک ایچ ٹی ایم ایل صفحہ بنا لیں جس میں سارے لنک اس سروس یو آر ایل کے سابقے کے ساتھ امیج ٹیگ کے سورس کے طور پر شامل ہوں۔ ایسا ایک صفحہ ایک منٹ سے بھی کم وقت میں سادہ سے فار لوپ اور پرنٹ اسٹیٹمینٹ کی مدد سے تیار ہو گیا۔ اب ہم نے براؤزر میں اس سروس کو لاگن کیا، وہاں اس ایپلیکیشن کو آتھرائز کیا اور اسی براؤزر میں اپنا بنایا ہوا لوکل ایچ ٹی ایم ایل صفحہ لوڈ کر لیا۔ پہلی بار میں ایک ہی صفحے پر کئی ہزار غیر دستیاب تصاویر کے نشانات نمودار ہوئے لیکن ہمیں یہ معلوم تھا کہ براؤزر چھ ریسورسیز کی کنکرینسی کے ساتھ سرور کو ریکوئیسٹ بھیج رہا ہوگا۔تھوڑی دیر رک کر صفحہ ری فریش کیا تو جن صفحات کے اسکرین شاٹ بن چکے تھے وہ صفحے پر نمودار ہو گئے۔ چند منٹ کے لیے براؤزر کو اس کے حال پر چھوڑ دیا تاکہ تمام اسکرین شاٹ ریکوئیسٹ سرور پر قطار میں لگ جائیں۔ دس پندرہ منٹ بعد صفحہ پھر سے ری فریش کیا تو ساری تصاویر دستیاب تھیں۔ ہم نے مکمل صفحہ (منسلکہ وسائل سمیت) لوکل ڈسک پر محفوظ کر لیا۔ اس کے نتیجے میں ہمیں ایک عدد فولڈر حاصل ہوا جہاں ساری تصاویر موجود تھیں۔ ان کو ایک چھوٹے سے پروگرام کی مدد سے ری نیم کر لیا اور ہمارا کام بن گیا۔ یہاں احباب کے لیے نوٹ شامل کرنا ضروری خیال کرتے ہیں کہ اگر آپ کی مشین زیادہ قوت والی نہ ہو تو ایک ہی صفحے میں کئی ہزار تصاویر شامل مت کریں بلکہ کئی حصوں میں منقسم کر لیں۔ ہماری لینکس مشین کافی ریم اور پروسیسنگ قوت کی حامل تھی لیکن چند ثانیے کے لیے اس کا ونڈو مینیجر چیخ اٹھا تھا، اسکرین پر سیاہی اتر آئی تھی اور سب کچھ ہینگ ہو گیا تھا لیکن پھر رینڈرنگ بحال ہو گئی۔ :) :) :)
 
لگے ہاتھوں یہ بھی بتا دیں کہ اب اگر ہمیں اسکرین شاٹ وغیرہ لینا ہوتا ہے تو فینٹم جے ایس استعمال کرتے ہیں۔ یہ جاوا اسکرپٹ پر مبنی ہیڈ لیس براؤزر ہے۔ اسکرین شاٹ کی دوسری لائبریریوں میں عموماً کمپیوٹر میں نصب براؤزر کا انسٹینس کھولا جاتا ہے، اس کا اسکرین شاٹ لیا جاتا ہے اور اسے بند کر دیا جاتا ہے۔ یہ کام آٹومیٹ تو ہو جاتا ہے لیکن اسکرین پر جھماکے ہوتے نظر آ رہے ہوتے ہیں، سست صفحات میں مسائل آتے ہیں، کئی دفعہ صفحات میں جاوا اسکرپٹ کی مناسب ایکزیکیوشن نہیں ہو پاتی، نیز جی یو آئی رینڈر ہونے میں اور پروسیس کو شروع ہونے اور بند ہونے میں وقت بھی کافی لگتا ہے۔ ایسے میں ہیڈ لیس براؤزر کی کارکردگی بڑی زبردست لگی۔ نیز یہ کہ جاوا اسکرپٹ کی کوڈنگ عموماً نان بلاکنک کال بیک کے طرز پر کی جاتی ہے اس لیے بہت سارے پروسیس کو قطار میں لگانا انتہائی سہل ہو جاتا ہے اور نتائج بہت جلدی حاصل ہوتے ہیں۔ :) :) :)
 
لیں ابھی تازہ تازہ قصہ ہے، کل رات کا۔ اس میں کوئی جگاڑ تو نہیں بلکہ ایک ایسے مسئلے کا بیان ہے جس کے لیے کئی گھنٹے خوار ہوئے اور کوئی حل ہوتا نظر نہیں آیا تو دیر رات گھر چلے گئے۔ گھر جا کر لیپ ٹاپ سے اسی ایپلیکیشن کو کھولا تو مسئلہ نادارد۔ اس کی مختصر روداد درج ذیل ہے۔ ہم کل ترسیموں کی جانچ کے لیے درج ذیل اطلاقیے پر کام کر رہے تھے:

tarseemah-paima-png.1270


اس اطلاقیے میں ہم نے کچھ "کوڈ ریفیکٹرنگ" کی، اس کو بلڈ کیا اور اس کے بعد اس پر نگاہ پڑی تو پایا کہ بائیں جانب نیچے جو ترسیموں کی فہرست موجود ہے، ان میں طاق اور جفت سطروں والی پٹیاں غائب ہیں اور پوری فہرست ایک سفید کینوس پر لکھی ہوئی نظر آ رہی ہے جس میں ایک سطر کو دوسرے سے نمایاں کرنے کے لیے کوئی خط فاصل نہیں ہے۔ ہم بڑے حیران ہوئے کہ کوڈ کے اس حصے کو تو ہم نے چھیڑا بھی نہیں پھر یہ معجزہ کیونکر ہوا۔ خیر ہم نے سوجا شاید بِلڈ ہونے میں کچھ سی ایس ایس فائلیں رہ گئی ہوں، لہٰذا کئی دفعہ پرجیکٹ کو بِلڈ کیا لیکن کوئی نتیجہ نہیں۔ پھر ہم نے سوچا کہ لائبریری میں طے شدہ کنفیگیوریشن تو پٹیاں شامل کرنے کی ہے، اس کو ضرورت پڑنے پر دانستہ ختم کیا جا سکتا ہے، لیکن کچھ دیر قبل تک ایسی بات نہیں تھی تو یوں ڈیفالٹ سیٹنگ تو خود سے بدلنے سے رہی جبکہ ہم نے لائبریری کو اپڈیٹ بھی نہیں کیا ہے۔ خیر ہم نے کوڈ میں باقاعدہ پٹیاں شامل کرنے کے لیے کوڈ لکھ دیا جو کہ غیر ضروری تھا، اس کے باوجود کوئی نتیجہ حاصل نہ ہوا۔ رات کافی ہو چلی تھی اور ہم پریشان کہ یہ بھی خوب ہے، شکل بدل کر نہیں دیتا۔ ہم نے اس کے اسباب کے لیے گوگل بھی کیا لیکن کوئی خاص بات سامنے نہ آ سکی۔ پھر ہم نے سوچا کہ جس فائل سسٹم پر ہم کام کر رہے ہیں وہ ریموٹ این ایف ایس فائل سسٹم ہے جو اپنی سست روی کے لیے مشہور ہے۔ لہٰذا ہم نے سارا کوڈ بیس اپنی مشین کی لوکل ڈرائیو پر کاپی کیا اور وہاں بلڈ کیا کہ شاید فائنل سی ایس ایس اور جاوا اسکرپٹ میں کوئی کمی رہ جا رہی ہو فائل سسٹم کی سستی کی وجہ سے۔ بخدا ہم نے ایسی ایسی توجیہات سوچیں جن پر ہمارا دل خود ہی قائل نہ ہو۔ پھر ہم نے جو ری فیکٹرنگ کی تھی اس کو ختم کر کے کوڈ پہلے کی طرح کر دیا لیکن ڈھاک کے وہی تین پات۔ بالآخر ہم نے خود کو سمجھانے کی کوشش کی کہ یہ کوئی ایسا مسئلہ نہیں جس سے اطلاقیے کی فعالیت میں کوئی کمی واقع ہو، لہٰذا اس کو پھر کبھی دیکھ لیں گے، فی الحال مزید خصوصیات شامل کرنے پر کام کر لیتے ہیں۔ لیکن جمالیاتی حس نے کچھ ایسا مجبور کیا کہ طبیعت کچھ اور کرنے پر مائل ہی نہ ہو، کہ یہ خامی آنکھوں میں چبھ رہی تھی۔ بہر کیف رات بہت گزر چکی تھی تو ہم نے گھر جانے کا قصد کیا کہ اس پر بعد میں کام کریں گے۔ گھر پہنچے، کپڑے وغیرہ تبدیل کر کے ہاتھ منہ دھویا اور بستر پر دراز ہو کر لیپ ٹاپ کھولا تو سامنے یہی اطلاقیہ پہلے سے کھلا ہوا تھا۔ ہم نے اس توقع میں اسے ری لوڈ کیا کہ ابھی جیسے ہی تازہ کوڈ لوڈ ہوگا، یہ خوبصورت دھاریاں گم ہو جائیں گی۔ لیکن یا حیرت، ایسا تو کچھ بھی نہ ہوا۔ ہم نے کیش کلئیر کیا لیکن مسئلہ نہ دارد۔ پھر ہماری سمجھ میں یہ آگیا کہ مسئلہ کیا ہے۔ صبح آفس آئے، کمپویٹر کی اسکرین کو اَن لاک کیا تو جس حال میں چھوڑ کر گئے تھے ویسے ہی سارے ایڈیٹرز، براؤزرس، اور کمانڈ لائن کھلے پڑے تھے۔ سامنے وہ دھاریوں سے عاری صفحہ بھی تھا۔ ہم نے اسے ری لوڈ کیا تو کوئی فرق نہ نمودار ہوا، جس کی توقع بھی نہ تھی۔ چونکہ آفس میں دو مونیٹرز ہیں جو آس پاس رکھے ہوئے ہیں تو ہم نے براؤزر کو گھسیٹ کر کچھ ایسی جگہ رکھا کہ فہرست کا نصف دایاں حصہ ایک اسکرین پر نظر آئے اور ماندہ حصہ دوسری اسکرین پر۔۔۔ اور یوں پوری طرح متوقع منظر سامنے تھا، نصف حصے میں دھاریاں نظر آ رہی تھیں اور نصف میں سفید کینوس۔۔۔ بہر کیف اب اس مونیٹر کی برائٹنیس اور کنٹراسٹ کو کیلیبریٹ کر دیا ہے لہٰذا سافٹوئیر کا مسئلہ ہارڈوئیر سے حل ہو چکا ہے۔ :) :) :)

نوٹ: اگر آپ کے کمپیوٹر کی اسکرین کی برائٹنیس زیادہ اور خاص کر کنٹراسٹ کم ہے تو آپ کو اس واقعے کے ابتدائی سطور پڑھ کر حیرت ہو گی کہ ہم کن دھاریوں کی بات کر رہے ہیں! :) :) :)
 
Top