بارہ سال طویل ایک چھوٹے پراجیکٹ کی کہانی (BIRMA.NET کے بارے میں پہلی بار اور واضح طور پر فرسٹ ہینڈ)

اس منصوبے کی پیدائش کو ایک چھوٹا سا خیال قرار دیا جا سکتا ہے جو مجھے 2007 کے آخر میں کہیں آیا تھا، جسے صرف 12 سال بعد اپنی حتمی شکل ملنا مقصود تھی (اس وقت - یقیناً، اگرچہ موجودہ عمل درآمد کے مطابق، مصنف کے لیے، بہت تسلی بخش ہے)۔

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

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

اسی وقت، میں نے فیصلہ کیا کہ، صرف اس صورت میں، پیشہ ور سافٹ ویئر ڈویلپرز کو تربیت دینے کے لیے کورسز لینے کا۔ مجھے نہیں معلوم کہ وہاں شروع سے "پروگرامر بننا" سیکھنا واقعی ممکن ہے یا نہیں، لیکن اس وقت میرے پاس پہلے سے موجود مہارتوں کو مدنظر رکھتے ہوئے، میں کسی حد تک ایسی ٹیکنالوجیز میں مہارت حاصل کرنے کے قابل ہو گیا جو اس وقت تک زیادہ متعلقہ تھیں، جیسے جیسا کہ C#، NET کے تحت ترقی کے لیے بصری اسٹوڈیو، نیز جاوا، ایچ ٹی ایم ایل اور ایس کیو ایل سے متعلق کچھ ٹیکنالوجیز۔ پوری ٹریننگ میں کل دو سال لگے، اور اس نے میرے ایک اور پروجیکٹ کے لیے نقطہ آغاز کے طور پر کام کیا، جو بالآخر کئی سالوں پر محیط ہوا - لیکن یہ ایک علیحدہ اشاعت کا موضوع ہے۔ یہاں صرف یہ نوٹ کرنا مناسب ہوگا کہ میں نے بیان کردہ پروجیکٹ میں پہلے سے موجود پیشرفت کو اپنانے کی کوشش کی ہے تاکہ C# اور WinForms میں ایک مکمل ونڈو ایپلی کیشن بنایا جا سکے جو ضروری فعالیت کو نافذ کرتا ہے، اور اسے بنیاد کے طور پر استعمال کرتا ہوں۔ آنے والا ڈپلومہ پروجیکٹ۔
وقت گزرنے کے ساتھ، یہ خیال مجھے اس قابل معلوم ہونے لگا کہ اس طرح کی سالانہ کانفرنسوں میں "LIBKOM" اور "CRIMEA" جیسی مختلف لائبریریوں کے نمائندوں کی شرکت سے آواز اٹھائی جائے۔ خیال، ہاں، لیکن اس وقت میرے اس پر عمل درآمد نہیں ہوا۔ پھر میں نے یہ بھی امید ظاہر کی کہ کوئی اسے زیادہ قابل طریقہ استعمال کرتے ہوئے دوبارہ لکھے گا۔ کسی نہ کسی طرح، 2013 تک میں نے اپنے ابتدائی کام پر ایک رپورٹ لکھنے اور کانفرنس میں شرکت کے لیے گرانٹ کی درخواست کے ساتھ کانفرنس آرگنائزنگ کمیٹی کو بھیجنے کا فیصلہ کیا۔ مجھے کسی حد تک حیرت ہوئی، میری درخواست منظور ہو گئی، اور میں نے اس منصوبے کو کانفرنس میں پیش کرنے کے لیے تیار کرنے کے لیے اس میں کچھ اصلاحات کرنا شروع کر دیں۔

اس وقت تک، اس منصوبے کو پہلے ہی ایک نیا نام BIRMA مل چکا تھا، اس نے مختلف اضافی صلاحیتیں حاصل کیں (اتنا زیادہ مکمل طور پر نافذ نہیں کیا گیا، بلکہ فرض کیا گیا) - تمام تفصیلات میری رپورٹ میں مل سکتی ہیں۔.

سچ پوچھیں تو برما 2013 کو مکمل کہنا مشکل تھا۔ سچ کہوں تو، یہ جلد بازی میں بنایا گیا ایک بہت ہی ہیکی کرافٹ تھا۔ کوڈ کے لحاظ سے، عملی طور پر کوئی خاص اختراعات نہیں تھیں، سوائے تجزیہ کار کے لیے کسی قسم کا متفقہ نحو بنانے کی ایک بے بس کوشش کے، جو ظاہری شکل میں IRBIS 64 فارمیٹنگ زبان کی یاد دلاتا ہے (اور حقیقت میں، ISIS کا نظام بھی - سائکلک ڈھانچے کے طور پر قوسین کے ساتھ؛ کیوں اس وقت میں نے سوچا کہ یہ بہت اچھا لگ رہا ہے)۔ تجزیہ کار نے نا امیدی کے ساتھ مناسب قسم کے قوسین کے ان حلقوں سے ٹھوکر کھائی (چونکہ قوسین نے ایک اور کردار بھی انجام دیا، یعنی، انہوں نے تجزیہ کے دوران اختیاری ڈھانچے کو نشان زد کیا جسے چھوڑا جا سکتا ہے)۔ میں ایک بار پھر ہر اس شخص کا حوالہ دیتا ہوں جو اس وقت کی اپنی رپورٹ میں مزید تفصیل کے ساتھ برما کی غیر منصفانہ ترکیب سے واقف ہونا چاہتا ہے۔

عام طور پر، میرے اپنے تجزیہ کار کے ساتھ جدوجہد کرنے کے علاوہ، میرے پاس اس ورژن کے کوڈ کے بارے میں مزید کچھ نہیں کہنا ہے - سوائے موجودہ ذرائع کو C++ میں تبدیل کرنے کے جبکہ .NET کوڈ کی کچھ مخصوص خصوصیات کو محفوظ رکھتے ہوئے (سچ پوچھیں تو یہ سمجھنا مشکل ہے، جس چیز نے مجھے سب کچھ پیچھے ہٹانے پر اکسایا - شاید اپنے سورس کوڈز کو خفیہ رکھنے کے لیے کچھ احمقانہ خوف، گویا یہ کوکا کولا کی خفیہ ترکیب کے مترادف ہے)۔

شاید یہ احمقانہ فیصلہ الیکٹرانک کیٹلاگ میں ڈیٹا داخل کرنے کے لیے گھریلو ساختہ ورک سٹیشن کے موجودہ انٹرفیس کے ساتھ نتیجے میں آنے والی DLL لائبریری کو جوڑنے میں دشواریوں کی وجہ بھی ہے (جی ہاں، میں نے ایک اور اہم حقیقت کا ذکر نہیں کیا: اب سے، تمام BIRMA "انجن" کا کوڈ توقع کے مطابق تھا، اسے انٹرفیس کے حصے سے الگ کر کے مناسب DLL میں پیک کیا گیا ہے)۔ ان مقاصد کے لیے علیحدہ ورک سٹیشن لکھنا کیوں ضروری تھا، جس نے بہرحال، صارف کے ساتھ اپنی ظاہری شکل اور بات چیت کے طریقہ کار میں، بے شرمی سے IRBIS 64 سسٹم کے اسی ورک سٹیشن "کیٹلاگائزر" کو نقل کیا - یہ ایک الگ سوال ہے۔ مختصراً: اس نے میرے گریجویشن پراجیکٹ کے لیے میری اس وقت کی پیشرفت کو ضروری استحکام بخشا (بصورت دیگر ناقابل ہضم تجزیہ کار انجن کسی طرح کافی نہیں تھا)۔ اس کے علاوہ، مجھے پھر اپنے ہی ماڈیولز کے ساتھ Cataloger ورک سٹیشن کے انٹرفیس کو لاگو کرنے میں، C++ اور C# دونوں میں لاگو ہونے اور اپنے انجن تک براہ راست رسائی میں کچھ مشکلات کا سامنا کرنا پڑا۔

عام طور پر، عجیب بات یہ ہے کہ مستقبل کے BIRMA.NET کا یہ اناڑی پروٹو ٹائپ تھا جو اگلے چار سالوں کے لیے میرا "ورک ہارس" بننا تھا۔ یہ نہیں کہا جا سکتا کہ اس عرصے کے دوران میں نے کم از کم ایک دیرینہ خیال کے نئے، زیادہ مکمل نفاذ کے لیے راستے تلاش کرنے کی کوشش نہیں کی۔ دیگر اختراعات میں، پہلے سے ہی نیسٹڈ سائیکلک سیکونسز ہونے چاہئیں جن میں اختیاری عناصر شامل ہو سکتے تھے - اس طرح میں اشاعتوں کی کتابیات کی تفصیل اور دیگر مختلف دلچسپ چیزوں کے لیے عالمگیر ٹیمپلیٹس کے خیال کو زندہ کرنے جا رہا تھا۔ تاہم، اس وقت میری عملی سرگرمیوں میں، یہ سب کچھ بہت کم مانگ میں تھا، اور اس وقت میں نے جو عمل درآمد کیا تھا وہ مندرجات کے جدول میں داخل ہونے کے لیے کافی تھا۔ اس کے علاوہ، ہماری لائبریری کی ترقی کے ویکٹر نے میوزیم آرکائیوز، رپورٹنگ اور میری دلچسپی کی دیگر سرگرمیوں کی ڈیجیٹلائزیشن کی طرف زیادہ سے زیادہ انحراف کرنا شروع کر دیا، جس نے آخر کار مجھے اسے چھوڑنے پر مجبور کر دیا، اور ان لوگوں کو راستہ دیا جو اس سب سے زیادہ خوش ہو جاؤ.

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

عام طور پر، میں نے فیصلہ کیا کہ یہ وہی ہے۔ گورپ (میں حیران ہوں کہ اس نام کا کیا مطلب ہے؟ شاید کسی قسم کا "جنرل اورینٹڈ ریگولر پارسر"؟) - بالکل وہی جو میں کافی عرصے سے تلاش کر رہا ہوں۔ سچ ہے، میری اپنی ضروریات کے لیے اس کے فوری نفاذ میں ایسی دشواری تھی کہ اس انجن کو سورس ٹیکسٹ کی ساختی ترتیب پر سختی سے عمل کرنے کی ضرورت تھی۔ کچھ رپورٹس جیسے لاگ فائلوں کے لیے (یعنی، وہ ڈویلپرز نے پروجیکٹ کو استعمال کرنے کی واضح مثال کے طور پر رکھی ہیں)، یہ کافی موزوں ہے، لیکن مندرجات کی اسکین شدہ جدولوں کے اسی متن کے لیے، اس کا امکان نہیں ہے۔ بہر حال، مواد کے جدول کے ساتھ وہی صفحہ "مشمولات کا جدول"، "مشمولات" اور کسی بھی دوسری ابتدائی وضاحت کے ساتھ شروع ہو سکتا ہے جسے ہمیں مطلوبہ تجزیہ کے نتائج میں رکھنے کی ضرورت نہیں ہے (اور انہیں دستی طور پر کاٹ کر ہر بار بھی تکلیف ہوتی ہے)۔ اس کے علاوہ، انفرادی طور پر دہرائے جانے والے عناصر کے درمیان، جیسے مصنف کا نام، عنوان اور صفحہ نمبر، صفحہ میں ایک خاص مقدار میں کوڑا کرکٹ ہو سکتا ہے (مثال کے طور پر، ڈرائنگ، اور صرف بے ترتیب حروف)، جس کے قابل ہونا بھی اچھا ہو گا۔ منقطع. تاہم، آخری پہلو ابھی اتنا اہم نہیں تھا، لیکن پہلے کی وجہ سے، موجودہ نفاذ کسی خاص جگہ سے متن میں ضروری ڈھانچے کی تلاش شروع نہیں کرسکا، بلکہ اس کے بجائے شروع سے ہی اس پر کارروائی کی گئی، اس کی تلاش نہیں کی گئی۔ وہاں پیٹرن کی وضاحت کی اور... میرا کام ختم ہو گیا۔ ظاہر ہے، دہرانے والے ڈھانچے کے درمیان کم از کم کچھ جگہ دینے کے لیے کچھ موافقت کی ضرورت تھی، اور اس نے مجھے کام پر واپس لے لیا۔

ایک اور مسئلہ یہ تھا کہ اس منصوبے کو خود جاوا میں لاگو کیا گیا تھا، اور اگر میں نے مستقبل میں اس ٹیکنالوجی کو موجودہ ڈیٹا بیس میں ڈیٹا داخل کرنے کے لیے مانوس ایپلی کیشنز کے ساتھ انٹرفیس کرنے کے کچھ ذرائع کو لاگو کرنے کی منصوبہ بندی کی ہے (جیسے Irbis کا "Cataloguer")، تو کم از کم یہ C# اور .NET میں کریں۔ ایسا نہیں ہے کہ جاوا بذات خود ایک بری زبان ہے - میں نے ایک بار اسے ایک دلچسپ ونڈو ایپلیکیشن کو لاگو کرنے کے لیے بھی استعمال کیا تھا جس نے گھریلو پروگرام کے قابل کیلکولیٹر کی فعالیت کو لاگو کیا تھا (ایک کورس پروجیکٹ کے حصے کے طور پر)۔ اور نحو کے لحاظ سے یہ ایک ہی سی شارپ سے بہت ملتا جلتا ہے۔ ٹھیک ہے، یہ صرف ایک پلس ہے: میرے لیے موجودہ پروجیکٹ کو حتمی شکل دینا اتنا ہی آسان ہوگا۔ تاہم، میں ونڈو کی اس غیر معمولی دنیا (یا اس کے بجائے، ڈیسک ٹاپ) جاوا ٹیکنالوجیز میں دوبارہ ڈوبنا نہیں چاہتا تھا - بہر حال، زبان خود اس طرح کے استعمال کے لیے "مطابق" نہیں تھی، اور میں اس کی تکرار کی خواہش نہیں رکھتا تھا۔ گزشتہ تجربہ. شاید یہ خاص طور پر ہے کیونکہ WinForms کے ساتھ مل کر C# Delphi کے بہت قریب ہے، جس کے ساتھ ہم میں سے بہت سے لوگوں نے ایک بار شروع کیا تھا۔ خوش قسمتی سے، ضروری حل بہت تیزی سے مل گیا - منصوبے کی شکل میں IKVM.NET، جو موجودہ جاوا پروگراموں کو منظم .NET کوڈ میں ترجمہ کرنا آسان بناتا ہے۔ یہ سچ ہے کہ اس منصوبے کو مصنفین نے اس وقت تک ترک کر دیا تھا، لیکن اس کے تازہ ترین نفاذ نے مجھے ماخذ کے متن کے لیے ضروری کارروائیوں کو کامیابی سے انجام دینے کی اجازت دی۔ گورپ.

اس لیے میں نے تمام ضروری تبدیلیاں کیں اور ان سب کو مناسب قسم کے DLL میں جمع کیا، جسے بصری اسٹوڈیو میں بنائے گئے .NET فریم ورک کے لیے کسی بھی پروجیکٹ کے ذریعے آسانی سے "پک اپ" کیا جا سکتا ہے۔ اس دوران، میں نے واپس آنے والے نتائج کی آسان پیشکش کے لیے ایک اور پرت بنائی گورپ, متعلقہ ڈیٹا ڈھانچے کی شکل میں جو ٹیبل ویو میں پروسیس کرنے کے لیے آسان ہوں گے (قطار اور کالم دونوں؛ لغت کی کلیدیں اور عددی اشاریہ دونوں کو بنیاد کے طور پر لیتے ہوئے)۔ ٹھیک ہے، نتائج کو پروسیسنگ اور ڈسپلے کرنے کے لیے ضروری افادیت خود بہت تیزی سے لکھی گئی تھی۔

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

شاید مستقبل میں میٹا ٹیمپلیٹس کے ایک خاص تصور کو لاگو کرنا ممکن ہو گا، جو ایک ہی وقت میں متعدد دستیاب ٹیمپلیٹس کے ساتھ تعمیل کے لیے سورس ٹیکسٹ کو چیک کر سکے گا، اور پھر، حاصل کردہ نتائج کے مطابق، منتخب کریں کسی قسم کے ذہین الگورتھم کا استعمال کرتے ہوئے سب سے زیادہ موزوں۔ لیکن اب میں ایک اور سوال کے بارے میں زیادہ فکر مند تھا۔ جیسا کہ تجزیہ کار گورپ, اس کی تمام استعداد اور میں نے کی گئی ترمیم کے باوجود، یہ اب بھی فطری طور پر ایک بظاہر آسان کام کرنے سے قاصر تھا جو میرا خود لکھا ہوا تجزیہ کار پہلے ورژن سے ہی کرنے کے قابل تھا۔ یعنی: اس کے پاس ماخذ کے متن سے وہ تمام ٹکڑوں کو تلاش کرنے اور نکالنے کی صلاحیت تھی جو صحیح جگہ پر استعمال شدہ ٹیمپلیٹ کے اندر مخصوص ماسک سے میل کھاتے ہیں، جبکہ اس میں بالکل بھی دلچسپی نہیں تھی کہ دیئے گئے متن میں ان ٹکڑوں کے درمیان خالی جگہوں میں کیا ہے۔ ابھی تک، میں نے نئے انجن کو صرف تھوڑا سا بہتر کیا ہے، جس سے اسے موجودہ پوزیشن سے اس طرح کے ماسک کی دی گئی ترتیب کی تمام ممکنہ نئی تکرار تلاش کرنے کی اجازت دی گئی ہے، جس سے صوابدیدی کرداروں کے سیٹ کے متن میں موجودگی کا امکان باقی رہ گیا ہے تجزیے میں بے حساب، پتہ چلنے والے دہرائے جانے والے ڈھانچے کے درمیان بند۔ تاہم، اس سے متعلقہ ماسک کا استعمال کرتے ہوئے پچھلے ٹکڑے کی تلاش کے نتائج سے قطع نظر اگلا ماسک ترتیب دینا ممکن نہیں ہوا: بیان کردہ متنی ڈھانچے کی سختی نے پھر بھی بے قاعدہ حروف کی صوابدیدی شمولیت کی گنجائش نہیں چھوڑی۔

اور اگر مندرجات کے جدولوں کی مثالوں کے لیے جو میں نے یہ مسئلہ دیکھا ہے وہ ابھی تک اتنا سنجیدہ نہیں ہے، پھر جب کسی ویب سائٹ کے مشمولات کو پارس کرنے کے اسی طرح کے کام کے لیے ایک نیا پارسنگ میکانزم لاگو کرنے کی کوشش کی جائے (یعنی وہی پارس) حدود یہاں ہیں وہ اپنی تمام تر ظاہر کے ساتھ ظاہر ہوئیں۔ بہر حال، ویب مارک اپ کے ٹکڑوں کے لیے ضروری ماسک سیٹ کرنا کافی آسان ہے، جس کے درمیان ہم جس ڈیٹا کی تلاش کر رہے ہیں (جسے نکالنے کی ضرورت ہے) موجود ہونا چاہیے، لیکن ہم تجزیہ کار کو فوری طور پر اگلے پر جانے کے لیے کیسے مجبور کر سکتے ہیں؟ اسی طرح کا ٹکڑا، تمام ممکنہ ٹیگز اور ایچ ٹی ایم ایل اوصاف کے باوجود جو ان کے درمیان خالی جگہوں میں رکھا جا سکتا ہے؟

تھوڑا سوچنے کے بعد، میں نے سروس کے ایک دو نمونے متعارف کرانے کا فیصلہ کیا۔ (%all_before) и (%all_after), اس بات کو یقینی بنانے کے واضح مقصد کی خدمت کرتے ہوئے کہ ماخذ متن میں موجود ہر چیز کو کسی بھی پیٹرن (ماسک) سے پہلے چھوڑ دیا جائے جو ان کی پیروی کرتا ہے۔ اس کے علاوہ، اگر (%all_before) بس ان تمام صوابدیدی شمولیتوں کو نظر انداز کر دیا، پھر (%all_after)، اس کے برعکس، انہیں پچھلے ٹکڑے سے منتقل ہونے کے بعد مطلوبہ ٹکڑے میں شامل کرنے کی اجازت دی۔ یہ بہت آسان لگتا ہے، لیکن اس تصور کو عملی جامہ پہنانے کے لیے مجھے ضروری ترمیمات کرنے کے لیے دوبارہ gorp ذرائع سے کنگھی کرنی پڑی تاکہ پہلے سے نافذ کردہ منطق کو توڑا نہ جا سکے۔ آخر میں، ہم ایسا کرنے میں کامیاب ہو گئے (حالانکہ بہت پہلے، بہت چھوٹی چھوٹی باتوں کے باوجود، میرے پارسر کا نفاذ لکھا گیا تھا، اور اس سے بھی تیز - چند ہفتوں میں)۔ اب سے، اس نظام نے واقعی ایک عالمگیر شکل اختیار کر لی ہے - اسے کام کرنے کی پہلی کوششوں کے 12 سال سے بھی کم نہیں۔

یقیناً یہ ہمارے خوابوں کا خاتمہ نہیں ہے۔ آپ مفت گرامر کو نافذ کرنے کے لیے دستیاب لائبریریوں میں سے کسی کا استعمال کرتے ہوئے، C# میں گورپ ٹیمپلیٹ پارسر کو مکمل طور پر دوبارہ لکھ سکتے ہیں۔ میرے خیال میں کوڈ کو نمایاں طور پر آسان کیا جانا چاہئے، اور یہ ہمیں موجودہ جاوا ذرائع کی شکل میں میراث سے چھٹکارا حاصل کرنے کی اجازت دے گا۔ لیکن موجودہ قسم کے انجن کے ساتھ، مختلف دلچسپ چیزیں کرنا بھی کافی ممکن ہے، بشمول میٹا ٹیمپلیٹس کو لاگو کرنے کی کوشش جن کا میں نے پہلے ہی ذکر کیا ہے، مختلف ویب سائٹس سے مختلف ڈیٹا کو پارس کرنے کا ذکر نہیں کرنا (تاہم، میں مسترد نہیں کرتا کہ موجودہ خصوصی سافٹ ویئر ٹولز اس کے لیے زیادہ موزوں ہیں – مجھے ابھی تک ان کے استعمال کا مناسب تجربہ نہیں ہے)۔

ویسے، اس موسم گرما میں مجھے پہلے ہی سیلز فورس ٹیکنالوجیز استعمال کرنے والی کمپنی کی طرف سے ای میل کے ذریعے ایک دعوت نامہ موصول ہوا ہے (اصل کا ڈویلپر گورپ)، ریگا میں بعد کے کام کے لیے ایک انٹرویو پاس کریں۔ بدقسمتی سے، اس وقت میں اس طرح کی دوبارہ تعیناتیوں کے لیے تیار نہیں ہوں۔

اگر یہ مواد کچھ دلچسپی پیدا کرتا ہے، تو دوسرے حصے میں میں Salesforce میں استعمال ہونے والے عمل کی مثال کا استعمال کرتے ہوئے ٹیمپلیٹس کو مرتب کرنے اور بعد میں پارس کرنے کی ٹیکنالوجی کو مزید تفصیل سے بیان کرنے کی کوشش کروں گا۔ گورپ (میرے اپنے اضافے، پہلے سے بیان کیے گئے چند فنکشن الفاظ کو چھوڑ کر، ٹیمپلیٹ نحو میں عملی طور پر کوئی تبدیلی نہیں کرتے، اس لیے اصل سسٹم کے لیے تقریباً تمام دستاویزات گورپ میرے ورژن کے لیے بھی موزوں ہے)۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں