ဆယ်နှစ်နှစ်ကြာရှည်သော ပရောဂျက်ငယ်တစ်ခု၏ ဇာတ်လမ်း (BIRMA.NET သည် ပထမဆုံးအကြိမ်ဖြစ်ပြီး ပွင့်ပွင့်လင်းလင်း ပထမဆုံးလက်တွေ့)

ဒီပရောဂျက်ရဲ့ မွေးဖွားမှုဟာ 2007 နှစ်ကုန်ပိုင်းလောက်မှာ ကျွန်တော့်ဆီရောက်လာတဲ့ စိတ်ကူးလေးတစ်ခုလို့ ယူဆနိုင်သလို သူ့ရဲ့နောက်ဆုံးပုံစံကို 12 နှစ်အကြာမှ ရှာဖွေဖို့ ရည်မှန်းထားတဲ့ (ဒီအချိန်မှာတော့ လက်ရှိအကောင်အထည်ဖော်နေပေမယ့်၊ စာရေးသူအတွက် အလွန်ကျေနပ်စရာပါ)။

စာကြည့်တိုက်မှာ ကျွန်တော့်ရဲ့တာဝန်ဝတ္တရားတွေကို ကျေပွန်အောင် ထမ်းဆောင်တဲ့အခါမှာ အစစအရာရာ အစစအရာရာက စာအုပ် (နှင့် သီချင်း) စာစောင်တွေရဲ့ အကြောင်းအရာတွေကို လက်ရှိဒေတာဘေ့စ်ထဲကို စကင်န်ဖတ်ထားတဲ့ စာသားကနေ အချက်အလက်တွေ ထည့်သွင်းတဲ့ လုပ်ငန်းစဉ်ကို အာရုံစိုက်ခဲ့တယ်။ သိသာထင်ရှားစွာ ရိုးရှင်းပြီး အလိုအလျောက်လုပ်ဆောင်နိုင်သည်၊ ထည့်သွင်းမှုအတွက် လိုအပ်သော အချက်အလက်အားလုံး၏ စည်းစနစ်ကျနမှုနှင့် ထပ်တလဲလဲဖြစ်နိုင်မှုတို့ကို အခွင့်ကောင်းယူပြီး ဆောင်းပါးရေးသားသူ၏အမည် (ဆောင်းပါးများစုစည်းမှုအကြောင်းပြောနေလျှင်) ခေါင်းစဉ်၊ ဆောင်းပါး (သို့မဟုတ် အကြောင်းအရာ ဇယားတွင် ဖော်ပြထားသည့် စာတန်းထိုး) နှင့် လက်ရှိ အကြောင်းအရာ ဇယား အကြောင်းအရာ ၏ စာမျက်နှာ နံပါတ်။ အစပိုင်းမှာတော့ ဒီလုပ်ငန်းကို ဆောင်ရွက်ဖို့ သင့်တော်တဲ့ စနစ်တစ်ခုကို အင်တာနက်မှာ အလွယ်တကူ ရှာတွေ့နိုင်မယ်လို့ လက်တွေ့ကျကျ ယုံကြည်ခဲ့တယ်။ အဲဒီလို ပရောဂျက်ကို ရှာမတွေ့လို့ အံ့အားသင့်သွားတဲ့အခါ ကိုယ့်ဘာသာကိုယ် အကောင်အထည်ဖော်ဖို့ ဆုံးဖြတ်လိုက်တယ်။

အချိန်တိုတိုလေးအကြာတွင်၊ ပထမဆုံးနမူနာကို စတင်လုပ်ဆောင်ခဲ့ပြီး၊ ကျွန်ုပ်၏နေ့စဉ်လုပ်ငန်းဆောင်တာများတွင် ချက်ချင်းစတင်အသုံးပြုကာ ကျွန်ုပ်လက်ထဲရောက်လာသော ဥပမာများအားလုံးတွင် ၎င်းကို တပြိုင်နက်တည်း အမှားရှာပြင်သည်။ ကံကောင်းထောက်မစွာ၊ ကျွန်ုပ်သည် ပရိုဂရမ်မာတစ်ယောက်မဟုတ်သည့် ထုံးစံအတိုင်း အလုပ်ခွင်တွင်၊ ထို့နောက်တွင် ကျွန်ုပ်သည် ကျွန်ုပ်၏လုပ်ငန်းခွင်တွင် မြင်သာသော "စက်ရပ်" ခြင်းနှင့်အတူ လွတ်မြောက်နေဆဲဖြစ်ပြီး၊ ကျွန်ုပ်သည် ကျွန်ုပ်၏ဦးနှောက်ကို အပြင်းအထန် အမှားရှာနေချိန်၊ လက်ရှိလက်တွေ့ဖြစ်ရပ်များတွင် မတွေးဝံ့စရာပင်ဖြစ်သည်၊ ဆိုလိုသည်မှာ၊ နေ့စဥ်လုပ်ဆောင်ခဲ့သော အလုပ်နှင့်ပတ်သက်သည့် နေ့စဉ်အစီရင်ခံစာများ။ ပရိုဂရမ်ကို ပွတ်တိုက်ခြင်း လုပ်ငန်းစဉ်သည် စုစုပေါင်း တစ်နှစ်ထက် မနည်း ကြာမြင့်သော်လည်း ယင်းနောက်ပိုင်းတွင်ပင် ရလဒ်သည် လုံးဝ အောင်မြင်သည်ဟု ခေါ်ဆိုရန် ခက်ခဲသည် - အကောင်အထည်ဖော်ရန်အတွက် လုံးလုံးလျားလျား ရှင်းရှင်းလင်းလင်း မရှိသော ကွဲပြားသော အယူအဆ အများအပြားကို ကနဦးတွင် ချမှတ်ခဲ့သည်- ရွေးချယ်နိုင်သော အစိတ်အပိုင်းများ။ ကျော်သွား; ဒြပ်စင်များကို ရှေ့သို့ကြည့်ရှုခြင်း (ယခင်ဒြပ်စင်များကို ရှာဖွေမှုရလဒ်များတွင် အစားထိုးရန် ရည်ရွယ်ချက်အတွက်) ပုံမှန်အသုံးအနှုန်းများ (ထူးခြားသော syntax တစ်ခုပါရှိသော) ကဲ့သို့သော ပုံမှန်အသုံးအနှုန်းများကဲ့သို့သော ကျွန်ုပ်တို့၏ကိုယ်ပိုင်ကြိုးစားမှုပင်။ ဒီမတိုင်ခင်မှာ ကျွန်တော် programming ကို နည်းနည်းလောက် စွန့်လွှတ်ခဲ့တယ် (ဒါမှမဟုတ်ရင် 8 နှစ်လောက်ကြာသွားတယ်) ဆိုတော့ ကျွန်တော့်ရဲ့ အရည်အချင်းတွေကို စိတ်ဝင်စားစရာကောင်းပြီး လိုအပ်တဲ့ အလုပ်တစ်ခုအတွက် အသုံးချဖို့ အခွင့်အလမ်းသစ်က ကျွန်တော့်အာရုံကို ဖမ်းစားသွားတယ်။ ကျွန်ုပ်ဘက်မှ ၎င်း၏ ဒီဇိုင်းအတွက် ရှင်းရှင်းလင်းလင်း ချဉ်းကပ်မှု တစ်စုံတစ်ရာ မရှိသည့်အတွက် ထွက်ပေါ်လာသော အရင်းအမြစ်ကုဒ်သည် C language တွင် ကွဲပြားနေသော အပိုင်းအစများနှင့်အတူ C++ ၏ အချို့သော အစိတ်အပိုင်းများ နှင့် အမြင်ပိုင်းဆိုင်ရာ ပရိုဂရမ်ရေးခြင်းဆိုင်ရာ ကဏ္ဍများပါရှိသည်မှာ အံ့သြစရာမဟုတ်ပါ (အစပိုင်းတွင် ၎င်းသည် Borland C++ Builder - "Delphi နီးပါး၊ သို့သော် C") ကဲ့သို့ ဒီဇိုင်းစနစ်ကို အသုံးပြုရန် ဆုံးဖြတ်ခဲ့သည်။ သို့သော်၊ ဤအရာအားလုံးသည် ကျွန်ုပ်တို့၏စာကြည့်တိုက်၏နေ့စဉ်လှုပ်ရှားမှုများကို အလိုအလျောက်လုပ်ဆောင်ရာတွင် နောက်ဆုံးတွင် အသီးအနှံများပေါက်ဖွားလာခဲ့သည်။

တစ်ချိန်တည်းမှာပင်၊ ပရော်ဖက်ရှင်နယ်ဆော့ဖ်ဝဲလ်ဆော့ဖ်ဝဲရေးဆွဲသူများအား သင်တန်းများတက်ရန် ဆုံးဖြတ်ခဲ့သည်။ အဲဒီမှာ အစကနေ “ပရိုဂရမ်မာတစ်ယောက်ဖြစ်ဖို့” သင်ယူဖို့ဆိုတာ တကယ်ဖြစ်နိုင်မလားဆိုတာ မသိပေမယ့် အဲဒီအချိန်က ကျွန်တော့်မှာရှိပြီးသား ကျွမ်းကျင်မှုတွေကို ထည့်သွင်းစဉ်းစားရင်းနဲ့ အဲဒီအချိန်က ပိုသက်ဆိုင်တဲ့ နည်းပညာတွေကို ကျွမ်းကျင်ပိုင်နိုင်စွာ တတ်မြောက်နိုင်ခဲ့တယ်၊ . NET အောက်တွင် ဖွံ့ဖြိုးတိုးတက်မှုအတွက် C#၊ Visual Studio ကဲ့သို့ Java၊ HTML နှင့် SQL နှင့် ဆက်စပ်သော နည်းပညာအချို့။ သင်တန်းတစ်ခုလုံးသည် စုစုပေါင်းနှစ်နှစ်ခန့် အချိန်ယူရပြီး နောက်ဆုံးတွင် နှစ်ပေါင်းများစွာ ရှည်လျားသည့် ကျွန်ုပ်၏ နောက်ထပ်ပရောဂျက်တစ်ခုအတွက် အစမှတ်အဖြစ် ဆောင်ရွက်ခဲ့သည်၊ သို့သော် ယင်းသည် သီးခြားထုတ်ဝေမှုအတွက် ခေါင်းစဉ်တစ်ခုဖြစ်သည်။ C# နှင့် WinForms တွင် လိုအပ်သော လုပ်ဆောင်နိုင်စွမ်းများကို အကောင်အထည်ဖော်ပေးသည့် C# နှင့် WinForms တွင် ပြည့်စုံသောဝင်းဒိုးအက်ပလီကေးရှင်းတစ်ခုဖန်တီးရန် ဖော်ပြထားသောပရောဂျက်တွင် ကျွန်ုပ်ရှိပြီးသားတိုးတက်မှုများကို လိုက်လျောညီထွေဖြစ်အောင် ကြိုးပမ်းခဲ့သည်ကို ဤနေရာတွင် မှတ်သားထားရန်သာ သင့်လျော်ပေလိမ့်မည်၊ လာမည့်ဒီပလိုမာပရောဂျက်။
အချိန်ကြာလာသည်နှင့်အမျှ၊ “LIBKOM” နှင့် “CRIMEA” ကဲ့သို့သော စာကြည့်တိုက်မျိုးစုံမှ ကိုယ်စားလှယ်များ၏ ပါဝင်မှုဖြင့် နှစ်စဉ်ကျင်းပပြုလုပ်သည့် ညီလာခံများတွင် ဤအယူအဆကို ထုတ်ဖော်ထိုက်သည်ဟု ထင်မြင်လာပါသည်။ စိတ်ကူးက ဟုတ်တယ်၊ ဒါပေမယ့် အဲဒီတုန်းက ငါအကောင်အထည်ဖော်တာမဟုတ်ဘူး။ ပြီးတော့ အရည်အချင်းရှိတဲ့ ချဉ်းကပ်နည်းတွေသုံးပြီး တစ်ယောက်ယောက်က အဲဒါကို ပြန်ရေးမယ်လို့လည်း ကျွန်တော် မျှော်လင့်ပါတယ်။ တစ်နည်းမဟုတ်တစ်နည်း၊ 2013 ခုနှစ်တွင် ကျွန်ုပ်သည် ကျွန်ုပ်၏ ပဏာမအလုပ်နှင့်ပတ်သက်သော အစီရင်ခံစာတစ်စောင်ကို ရေးသားပြီး ညီလာခံကျင်းပရေးကော်မတီထံ ပေးပို့ရန် ဆုံးဖြတ်ခဲ့ပြီး ညီလာခံတွင် ပါဝင်ရန် ထောက်ပံ့ကြေးပေးရန် လျှောက်လွှာနှင့်အတူ ၎င်းကို ပေးပို့ခဲ့ပါသည်။ အနည်းငယ်အံ့သြမိသည်မှာ၊ ကျွန်ုပ်၏လျှောက်လွှာကို အတည်ပြုခဲ့ပြီး၊ ညီလာခံတွင် တင်ဆက်မှုအတွက် ပြင်ဆင်ရန် ပရောဂျက်အတွက် တိုးတက်မှုအချို့ကို စတင်လုပ်ဆောင်ခဲ့သည်။

ထိုအချိန်တွင် ပရောဂျက်သည် BIRMA အမည်သစ်ကို ရရှိထားပြီး၊ အမျိုးမျိုးသော အပိုဆောင်း (ဤမျှလောက် အပြည့်အဝ အကောင်အထည်မဖော်သော်လည်း ယူဆထားသည့်) စွမ်းဆောင်ရည်များကို ရယူထားပြီးဖြစ်သည် - အသေးစိတ်အချက်အလက်အားလုံးကို ကျွန်ုပ်၏အစီရင်ခံစာတွင် တွေ့ရှိနိုင်ပါသည်။.

ရိုးရိုးသားသားပြောရလျှင် BIRMA 2013 ကို ပြီးပြည့်စုံသည့်အရာဟု ခေါ်ရန် ခက်ခဲပါသည်။ ပွင့်ပွင့်လင်းလင်းပြောရလျှင် ၎င်းသည် အလျင်စလိုလုပ်ထားသည့် အလွန်မိုက်မဲသည့်လက်မှုဖြစ်သည်။ ကုဒ်၏စည်းကမ်းချက်များအရ၊ parser အတွက် ပေါင်းစည်းထားသော syntax တစ်မျိုးမျိုးကို ဖန်တီးရန် ကြိုးပမ်းမှုမှလွဲ၍ IRBIS 64 formatting language ကို အမှတ်ရစေမည့် အသွင်အပြင်ဖြင့် အထူးတီထွင်ဆန်းသစ်မှုများ လုံးဝမရှိခဲ့ပါ။ (တကယ်တော့ ISIS စနစ်သည်လည်း - စက်ဝိုင်းပုံသဏ္ဍာန်အဖြစ် ကွင်းစဥ်များဖြင့်၊ အဘယ်ကြောင့်ထိုအချိန်က အလွန်အေးမြသည်ဟု ထင်ရသနည်း။ ခွဲခြမ်းစိပ်ဖြာသူသည် သင့်လျော်သောအမျိုးအစား၏ ဤစက်ဝိုင်းကွင်းကွင်းများကို မမျှော်လင့်ဘဲ ထိမိသွားသည် (ကွင်းစဥ်များသည် အခြားကဏ္ဍတစ်ခုလည်း လုပ်ဆောင်ခဲ့သည်၊ ဆိုလိုသည်မှာ၊ ၎င်းတို့သည် ကျော်သွားနိုင်သည့် ခွဲခြမ်းစိတ်ဖြာမှုအတွင်း ရွေးချယ်နိုင်သော ဖွဲ့စည်းပုံများကို အမှတ်အသားပြုထားသည်)။ စိတ်ကူးရခက်သော BIRMA ၏ တရားမျှတမှုမရှိသော အစီအစဥ်ကို သိရှိလိုသူတိုင်းကို ထိုအချိန်က ကျွန်ုပ်၏အစီရင်ခံစာအား ထပ်မံ၍ ရည်ညွှန်းပါသည်။

ယေဘူယျအားဖြင့်၊ ကျွန်ုပ်၏ကိုယ်ပိုင် parser နှင့် ရုန်းကန်ခြင်းမှလွဲ၍ ကျွန်ုပ်သည် ဤဗားရှင်း၏ကုဒ်နှင့် ပတ်သက်၍ ပြောစရာမရှိတော့ပါ - .NET ကုဒ်၏ ပုံမှန်အင်္ဂါရပ်အချို့ကို ထိန်းသိမ်းထားစဉ်တွင် ရှိပြီးသားရင်းမြစ်များကို C++ သို့ ပြောင်းပြန်ပြောင်းခြင်းမှလွဲ၍ ကျန်(ရိုးရိုးသားသားပြောရလျှင်၊ နားလည်ရခက်တယ်၊ အရာအားလုံးကို နောက်ကြောင်းပြန်ရွှေ့ဖို့ ဘာက အတိအကျ လှုံ့ဆော်ပေးခဲ့တယ် - Coca-Cola ရဲ့ လျှို့ဝှက်ချက်နည်းနဲ့တူတဲ့ အရာတစ်ခုလိုပဲ ငါ့ရဲ့အရင်းအမြစ်ကုဒ်တွေကို လျှို့ဝှက်ထားလို့ မိုက်မဲတဲ့ အကြောက်တရားတွေ ဖြစ်နိုင်တယ်။)

ဤမိုက်မဲသော ဆုံးဖြတ်ချက်သည် ထွက်ပေါ်လာသော DLL စာကြည့်တိုက်ကို အီလက်ထရွန်နစ်ကတ်တလောက်ထဲသို့ ဒေတာထည့်သွင်းရန်အတွက် အိမ်လုပ် workstation ၏ လက်ရှိ interface နှင့် တွဲချိတ်ရာတွင် အခက်အခဲဖြစ်စေသည့် အကြောင်းရင်းလည်း ဖြစ်ကောင်းဖြစ်နိုင်သည် (ဟုတ်တယ်၊ နောက်ထပ် အရေးကြီးတဲ့အချက်ကို ကျွန်တော် မပြောခဲ့ပါဘူး- အခုကစပြီး အားလုံး၊ BIRMA "အင်ဂျင်" ၏ကုဒ်သည်မျှော်လင့်ထားသည့်အတိုင်းဖြစ်သည်၊ ၎င်းကို interface အစိတ်အပိုင်းမှခွဲထုတ်ပြီးသင့်လျော်သော DLL တွင်ထုပ်ပိုးထားသည်။) ဤရည်ရွယ်ချက်များအတွက် သီးခြား workstation တစ်ခုကို ရေးသားရခြင်းမှာ အဘယ်ကြောင့် လိုအပ်သနည်း၊ မည်သို့ပင်ဆိုစေ သုံးစွဲသူနှင့် ၎င်း၏အသွင်အပြင်နှင့် အပြန်အလှန်ဆက်ဆံမှုနည်းလမ်းအရ IRBIS 64 စနစ်၏ တူညီသော workstation "Catalogizer" ကို အရှက်မရှိ ကူးယူထားသည် - ဤမေးခွန်းသည် သီးခြားမေးခွန်းဖြစ်သည်။ အတိုချုပ်အားဖြင့်၊ ၎င်းသည် ကျွန်ုပ်၏ဘွဲ့နှင်းသဘင် ပရောဂျက်အတွက် လိုအပ်သော ခိုင်မာမှုအား ပေးဆောင်သည် (မဟုတ်ပါက အစာမကြေနိုင်သော parser engine တစ်ခုတည်းနှင့် မလုံလောက်ပါ)။ ထို့အပြင်၊ ထို့နောက်တွင်၊ ကျွန်ုပ်သည် C++ နှင့် C# နှစ်မျိုးလုံးတွင် အကောင်အထည်ဖော်ပြီး ကျွန်ုပ်၏အင်ဂျင်ကို တိုက်ရိုက်ဝင်ရောက်အသုံးပြုသည့် ကိုယ်ပိုင် module များဖြင့် Cataloger workstation ၏ interface ကို အကောင်အထည်ဖော်ရာတွင် အခက်အခဲအချို့ကို ကြုံတွေ့ခဲ့ရသည်။

ယေဘူယျအားဖြင့်၊ ထူးဆန်းသည်မှာ၊ ၎င်းသည် လာမည့်လေးနှစ်အတွက် ကျွန်ုပ်၏ “လုပ်သားမြင်းများ” ဖြစ်လာရန် ရည်မှန်းထားသော အနာဂတ် BIRMA.NET ၏ ဤအမိုက်စား ရှေ့ပြေးပုံစံဖြစ်သည်။ ဤအချိန်အတောအတွင်း ကျွန်ုပ်သည် နှစ်ရှည်လများ စိတ်ကူးအသစ်နှင့် ပိုမိုပြီးပြည့်စုံသော အကောင်အထည်ဖော်မှုတစ်ခုအတွက် အနည်းဆုံး နည်းလမ်းများရှာရန် မကြိုးစားခဲ့ဟု မပြောနိုင်ပေ။ အခြားတီထွင်ဆန်းသစ်မှုများတွင်၊ ရွေးချယ်နိုင်သောဒြပ်စင်များပါ၀င်နိုင်သည့် အသိုက်အဝန်းများထဲတွင် စက်ဝိုင်းပုံစံများပါရှိသင့်သည် - ဤအရာသည် စာစောင်များ၏ bibliographic ဖော်ပြချက်များနှင့် အခြားစိတ်ဝင်စားဖွယ်အရာအမျိုးမျိုးအတွက် universal templates စိတ်ကူးကို အသက်ဝင်စေမည့်ပုံဖြစ်သည်။ သို့သော်လည်း ထိုအချိန်က ကျွန်ုပ်၏လက်တွေ့လုပ်ဆောင်မှုများတွင်၊ ဤအရာအားလုံးသည် လိုအပ်ချက်အနည်းငယ်သာရှိ၍ ထိုစဉ်က ကျွန်ုပ်ရရှိထားသော အကောင်အထည်ဖော်မှုသည် အကြောင်းအရာဇယားများကို ထည့်သွင်းရန်အတွက် လုံလောက်ပါသည်။ ထို့အပြင် ကျွန်ုပ်တို့၏ စာကြည့်တိုက်၏ ဖွံ့ဖြိုးတိုးတက်မှု အားနည်းချက်သည် ပြတိုက် မော်ကွန်းတိုက်များ၏ ဒစ်ဂျစ်တယ်စနစ်သို့ ပြောင်းလဲခြင်းဆီသို့ ပို၍ပို၍ သွေဖည်လာသည်နှင့်အမျှ ကျွန်ုပ်အတွက် စိတ်ဝင်စားမှုနည်းပါးသော အခြားလုပ်ဆောင်မှုများသည် နောက်ဆုံးတွင် ကျွန်ုပ်အား နောက်ဆုံးတွင် ထားခဲ့ရန် တွန်းအားပေးစေသော နည်းလမ်းဖြင့် ပေးလိုသူများ၊ ဒါတွေအားလုံးအတွက် ပိုကျေနပ်ပါစေ။

ရှေ့နောက်မညီဘဲ၊ ထိုအချိန်က BIRMA ပရောဂျက်သည် ပုံမှန်ရေရှည်ဆောက်လုပ်ရေးပရောဂျက်၏ လက္ခဏာရပ်များ အားလုံးပါပြီးသားဖြစ်ပြီး ၎င်းသည် နှစ်ရှည်လများ စောင့်မျှော်ခဲ့ရသော ဘဝသစ်ကို စတင်ရန် ရှေ့နောက်မညီဘဲ ဖြစ်နေပါသည်။ ပျင်းစရာကောင်းတဲ့ အတွေးတွေအတွက် အချိန်ပိုရခဲ့တယ်၊ အလားတူ အရာတစ်ခုကို ရှာဖွေဖို့အတွက် World Wide Web ကို ထပ်ပြီး ဖြီးလိုက်မိတော့တယ် (ကံကောင်းထောက်မစွာ၊ အခု ဒီအရာအားလုံးကို ဘယ်နေရာမှာတင်မဟုတ်ဘဲ GitHub မှာ ရှာဖို့ ခန့်မှန်းနိုင်နေပြီ) နဲ့ တစ်နေရာရာမှာ၊ ယခုနှစ်အစတွင်၊ အရေးမပါသောအမည်အောက်တွင် နာမည်ကြီး Salesforce ကုမ္ပဏီမှ ဆက်စပ်ထုတ်ကုန်တစ်ခုကို ကျွန်ုပ်တွေ့မြင်ခဲ့ရပါသည်။ Gop. ထိုသို့သော parser engine မှ လိုအပ်သမျှနီးပါးကို ၎င်းကိုယ်တိုင် လုပ်ဆောင်နိုင်သည် - ပြောရရင်၊ တစ်ခုချင်းစီကို အပိုင်းအစများ ထင်သလို မဟုတ်ဘဲ ရှင်းရှင်းလင်းလင်း ခွဲထုတ်ပြီး အသုံးပြုသူအတွက် အဆင်ပြေစေမယ့် အင်တာဖေ့စ်တစ်ခု ပါရှိနေချိန်မှာ၊ အခုလို နားလည်နိုင်တဲ့ အနှစ်သာရတွေ အပါအဝင်၊ ပုံစံတစ်ခု၊ ပုံစံခွက်နှင့် ဖြစ်ပျက်မှုနှင့် တစ်ချိန်တည်းတွင် ပုံမှန်အသုံးအနှုန်းများ၏ အကျွမ်းတဝင်ရှိသော syntax ကို အသုံးပြု၍ ခွဲခြမ်းစိတ်ဖြာရန် သတ်မှတ်ထားသော ဝေါဟာရအုပ်စုများအဖြစ် ပိုင်းခြားထားခြင်းကြောင့် နှိုင်းယှဉ်၍မရနိုင်လောက်အောင် ပိုမိုဖတ်ရှုရလွယ်ကူလာသည်။

ယေဘူယျအားဖြင့်တော့ ဒါက တစ်ခုပဲလို့ ကျွန်တော်ဆုံးဖြတ်လိုက်တယ်။ Gop (ဒီနာမည်က ဘာကိုဆိုလိုသလဲ သိချင်နေသလား၊ “ယေဘူယျ ဦးတည်တဲ့ ပုံမှန် ခွဲခြမ်းစိတ်ဖြာမှု” တစ်မျိုးမျိုး ဖြစ်နိုင်သလား။) – ကျွန်တော် ရှာနေတာကြာပြီ။ မှန်ပါသည်၊ ကျွန်ုပ်၏ကိုယ်ပိုင်လိုအပ်ချက်များအတွက် ၎င်း၏ချက်ချင်းအကောင်အထည်ဖော်မှုတွင် ဤအင်ဂျင်သည် အရင်းအမြစ်စာသား၏ဖွဲ့စည်းပုံအစီအမံကို တင်းတင်းကျပ်ကျပ်လိုက်နာရန် လိုအပ်သောကြောင့် ဤကဲ့သို့သောပြဿနာတစ်ခုရှိသည်။ မှတ်တမ်းဖိုင်များကဲ့သို့သော အစီရင်ခံစာအချို့အတွက် (ဥပမာအားဖြင့်၊ ၎င်းတို့ကို ပရောဂျက်အသုံးပြုခြင်း၏ ရှင်းလင်းသောဥပမာများအဖြစ် ဆော့ဖ်ဝဲအင်ဂျင်နီယာများက ထားရှိခဲ့သည်)၊ ၎င်းသည် အတော်လေး သင့်လျော်သော်လည်း စကင်န်ဖတ်ထားသော အကြောင်းအရာများ၏ တူညီသောစာသားများအတွက် မဖြစ်နိုင်ပါ။ နောက်ဆုံးတွင်၊ အကြောင်းအရာဇယားတစ်ခုနှင့် တူညီသောစာမျက်နှာသည် "မာတိကာ"၊ "အကြောင်းအရာများ" နှင့် ရည်ရွယ်ထားသော ခွဲခြမ်းစိတ်ဖြာမှုရလဒ်များတွင် ကျွန်ုပ်တို့ထည့်သွင်းရန်မလိုအပ်သော အခြားပဏာမဖော်ပြချက်များနှင့် စတင်နိုင်သည် (၎င်းတို့ကို ကိုယ်တိုင်ဖြတ်တောက်ပါ။ အချိန်တိုင်းမှာလည်း အဆင်မပြေဘူး။) ထို့အပြင်၊ စာရေးဆရာ၏အမည်၊ ခေါင်းစဉ်နှင့် စာမျက်နှာနံပါတ်ကဲ့သို့သော ထပ်ခါတလဲလဲအကြောင်းအရာတစ်ခုချင်းစီကြားတွင်၊ စာမျက်နှာတွင် အချို့သောအမှိုက်ပမာဏ (ဥပမာ၊ ပုံဆွဲခြင်းနှင့် ကျပန်းစာလုံးများ) ပါဝင်နေနိုင်သည့်အတွက် ၎င်းသည် လုပ်ဆောင်နိုင်စေရန်အတွက် ကောင်းမွန်ပါသည်။ ဖြတ်တောက်သည်။ သို့သော်လည်း နောက်ဆုံးအပိုင်းသည် သိပ်မသိသာသေးသော်လည်း ပထမအချက်ကြောင့် ရှိပြီးသား အကောင်အထည်ဖော်မှုသည် တစ်နေရာမှ စာသားအတွက် လိုအပ်သော ဖွဲ့စည်းပုံများကို ရှာဖွေခြင်းမပြုနိုင်ဘဲ အစကတည်းက ၎င်းကို ရိုးရိုးရှင်းရှင်း လုပ်ဆောင်မည့်အစား ၎င်းကို မတွေ့ခဲ့ရပါ။ အဲဒီမှာ သတ်မှတ်ထားတဲ့ ပုံစံတွေနဲ့... ငါ့အလုပ်က ပြီးသွားတယ်။ ထပ်ခါတလဲလဲဖွဲ့စည်းပုံများကြားတွင် နေရာလွတ်အချို့ကို အနည်းဆုံးခွင့်ပြုရန်၊ ၎င်းသည် ကျွန်ုပ်ကို အလုပ်ပြန်လုပ်နိုင်စေရန်အတွက် သိသိသာသာ ပြုပြင်ပြောင်းလဲမှုအချို့ လိုအပ်ပါသည်။

နောက်ပြဿနာတစ်ခုကတော့ ပရောဂျက်ကိုယ်တိုင်က Java မှာ အကောင်အထည်ဖော်ခဲ့တာဖြစ်ပြီး၊ လက်ရှိဒေတာဘေ့စ်တွေထဲကို ဒေတာထည့်ဖို့အတွက် ရင်းနှီးတဲ့အပလီကေးရှင်းတွေနဲ့ ဒီနည်းပညာကို ချိတ်ဆက်အသုံးပြုဖို့အတွက် အနာဂတ်မှာ ငါစီစဉ်ထားတယ်ဆိုရင် အနည်းဆုံးတော့ အနည်းဆုံး၊ ဒါကို C# နဲ့ .NET မှာလုပ်ပါ။ Java ကိုယ်တိုင်က မကောင်းသောဘာသာစကားမဟုတ်ပါ - အိမ်တွင်းပရိုဂရမ်မာဂဏန်းတွက်စက် (သင်တန်းပရောဂျက်၏တစ်စိတ်တစ်ပိုင်းအနေဖြင့်) ၏လုပ်ဆောင်နိုင်စွမ်းကိုအကောင်အထည်ဖော်သည့်စိတ်ဝင်စားဖွယ်ကောင်းသောဝင်းဒိုးအက်ပလီကေးရှင်းတစ်ခုကိုအကောင်အထည်ဖော်ရန်ပင်အသုံးပြုခဲ့ဖူးသည်။ syntax ၏စည်းကမ်းချက်များ၌၎င်းသည်တူညီသော C-sharp နှင့်အလွန်ဆင်တူသည်။ ကောင်းပြီ၊ ဒါက အပေါင်းတစ်ခုသာဖြစ်သည်- ရှိပြီးသားပရောဂျက်တစ်ခုကို အပြီးသတ်ဖို့ ပိုလွယ်လေလေပါပဲ။ သို့သော်လည်း၊ ဤအဆန်းမဟုတ်သော ပြတင်းပေါက် (သို့မဟုတ်အစား၊ ဒက်စ်တော့) Java နည်းပညာများထဲသို့ ငါထပ်မဝင်ချင်တော့ပါ - ပြီးနောက်၊ ဘာသာစကားကိုယ်တိုင်က ထိုကဲ့သို့အသုံးပြုရန်အတွက် "အံဝင်ခွင်ကျ" မဟုတ်ပေ၊ ထပ်ခါတလဲလဲလုပ်ရန် လုံးဝမလိုလားခဲ့ပါ။ ယခင်အတွေ့အကြုံ။ WinForms နှင့်တွဲဖက်သော C# သည် Delphi နှင့်ပိုမိုနီးကပ်သောကြောင့်ဖြစ်ကောင်းဖြစ်နိုင်သည်၊ ကျွန်ုပ်တို့အများစုသည်တစ်ချိန်ကစတင်ခဲ့သော Delphi နှင့်ပိုမိုနီးစပ်သောကြောင့်ဖြစ်နိုင်သည်။ ကံကောင်းထောက်မစွာ၊ လိုအပ်သောအဖြေကို ပရောဂျက်ပုံစံဖြင့် အလျင်အမြန်တွေ့ရှိခဲ့သည်။ IKVM.NETလက်ရှိ Java ပရိုဂရမ်များကို စီမံခန့်ခွဲထားသော .NET ကုဒ်သို့ ဘာသာပြန်ရန် လွယ်ကူစေသည်။ မှန်ပါတယ်၊ ဒီပရောဂျက်ကိုယ်တိုင်က အဲဒီအချိန်က စာရေးသူက စွန့်ပစ်ထားပြီး၊ ဒါပေမယ့် သူ့ရဲ့နောက်ဆုံးအကောင်အထည်ဖော်မှုက အရင်းအမြစ်စာသားတွေအတွက် လိုအပ်တဲ့လုပ်ဆောင်ချက်တွေကို အတော်လေး အောင်မြင်စွာ လုပ်ဆောင်နိုင်စေခဲ့ပါတယ်။ Gop.

ထို့ကြောင့် ကျွန်ုပ်သည် လိုအပ်သော ပြောင်းလဲမှုအားလုံးကို ပြုလုပ်ခဲ့ပြီး အားလုံးကို သင့်လျော်သော အမျိုးအစား၏ DLL တစ်ခုအဖြစ် စုစည်းထားကာ၊ ၎င်းသည် Visual Studio တွင် ဖန်တီးထားသော .NET Framework အတွက် မည်သည့်ပရောဂျက်များမှမဆို အလွယ်တကူ "ကောက်ယူနိုင်သည်" ဖြစ်သည်။ ဒီကြားထဲမှာပဲ ပြန်လာတဲ့ရလဒ်တွေကို အဆင်ပြေပြေတင်ပြနိုင်စေဖို့ နောက်ထပ်အလွှာတစ်ခုကို ဖန်တီးလိုက်တယ်။ Gopဇယားမြင်ကွင်းတွင် လုပ်ဆောင်ရန် အဆင်ပြေမည့် သက်ဆိုင်သော ဒေတာဖွဲ့စည်းပုံများ (အတန်းများနှင့် ကော်လံများ နှစ်ခုစလုံးကို အခြေခံအဖြစ် ယူခြင်း၊ အဘိဓာန်ကီးများနှင့် ဂဏန်းအညွှန်းများ)။ ကောင်းပြီ၊ ရလဒ်များကိုလုပ်ဆောင်ခြင်းနှင့်ပြသခြင်းအတွက်လိုအပ်သောအသုံးအဆောင်များကိုယ်တိုင်ရေးသားခဲ့သည်မှာအတော်လေးမြန်သည်။

ထို့အပြင်၊ အင်ဂျင်အသစ်အတွက် နမူနာပုံစံများကို လိုက်လျောညီထွေဖြစ်အောင် ပြုလုပ်ခြင်း လုပ်ငန်းစဉ်သည် ၎င်းကို စကင်န်ဖတ်ထားသော စာသားနမူနာများကို ခွဲခြမ်းစိတ်ဖြာရန် သင်ပေးရန်အတွက် အထူးရှုပ်ထွေးမှုများ မဖြစ်စေပါ။ အမှန်တော့၊ ကျွန်ုပ်သည် ကျွန်ုပ်၏ ယခင်ပုံစံများကို ကိုးကားရန်ပင်မလိုအပ်ပေ၊ ကျွန်ုပ်သည် လိုအပ်သော ပုံစံများအားလုံးကို အစမှအဆုံး ဖန်တီးခဲ့သည်။ ထို့အပြင်၊ စနစ်၏ယခင်ဗားရှင်းနှင့်အလုပ်လုပ်ရန် ဒီဇိုင်းထုတ်ထားသော တင်းပလိတ်များသည် ၎င်းတို့၏အကူအညီဖြင့် မှန်ကန်စွာခွဲခြမ်းစိတ်ဖြာနိုင်သည့် စာသားများအတွက် ကျဉ်းမြောင်းသောဘောင်တစ်ခုကို သတ်မှတ်ပါက၊ အင်ဂျင်အသစ်သည် Markup အမျိုးအစားများစွာအတွက် သင့်လျော်သော universal templates ကို တီထွင်နိုင်နေပြီဖြစ်သည်။ တခါ။ အထူးသဖြင့် တူညီသော nested ထပ်ခါတလဲလဲ အစီအစဥ်များကို အကောင်အထည်ဖော်နိုင်မှု အကန့်အသတ်များ အပါအဝင်၊ အထူးသဖြင့် ကျွန်ုပ်အတွက် ဖြစ်နိုင်ခြေအသစ်များအားလုံးကို ဖွင့်လှစ်ထားသော်လည်း၊ မတရားသော အကြောင်းအရာဇယားတစ်ခုခုအတွက် ကျယ်ကျယ်ပြန့်ပြန့် ပုံစံတစ်မျိုးမျိုး ရေးရန်ပင် ကြိုးစားခဲ့သည် ( ဥပမာ၊ မျိုးရိုးအမည်များနှင့် အတိုကောက်စာရေးဆရာများစွာတို့ကဲ့သို့)၊ ၎င်းသည် Utopia ဖြစ်လာသည်။

အနာဂတ်တွင် ရရှိနိုင်သော တင်းပလိတ်အများအပြားနှင့် လိုက်လျောညီထွေရှိစေရန် အရင်းအမြစ်စာသားကို တစ်ပြိုင်နက် စစ်ဆေးနိုင်စေမည့် မက်တာပလိတ်များ၏ အယူအဆအချို့ကို အကောင်အထည်ဖော်နိုင်လိမ့်မည်ဖြစ်နိုင်သည်၊ ထို့နောက် ရရှိသောရလဒ်များနှင့်အညီ၊ အသိဉာဏ်ရှိသော အယ်လဂိုရီသမ်တစ်မျိုးမျိုးကို အသုံးပြု၍ အသင့်တော်ဆုံးတစ်ခု။ ဒါပေမယ့် အခု နောက်ထပ်မေးခွန်းတစ်ခုအတွက် ကျွန်တော် ပိုစိုးရိမ်မိတယ်။ parser ကြိုက်တယ်။ Gop၎င်း၏ စွယ်စုံရနှင့် ကျွန်ုပ်ပြုလုပ်ထားသော ပြုပြင်မွမ်းမံမှုများရှိသော်လည်း၊ ကျွန်ုပ်ကိုယ်တိုင်ရေးထားသော parser သည် ပထမဗားရှင်းမှ လုပ်ဆောင်နိုင်သည်ဟု ထင်ရသော ရိုးရှင်းသည့်အရာတစ်ခုကို လုပ်ဆောင်နိုင်စွမ်းမရှိခဲ့ပါ။ ဆိုလိုသည်မှာ- သူသည် ဤအပိုင်းအစများကြားရှိ နေရာလပ်များကြားတွင် ပေးထားသည့်စာသားပါ၀င်သည်များကို လုံးဝစိတ်မ၀င်စားဘဲ မှန်ကန်သောနေရာတွင် အသုံးပြုထားသော ပုံစံခွက်အတွင်း သတ်မှတ်ထားသည့် မျက်နှာဖုံးနှင့် ကိုက်ညီသည့် အပိုင်းအစများအားလုံးကို အရင်းအမြစ်စာသားမှ ရှာဖွေထုတ်ယူနိုင်စွမ်းရှိသည်။ ယခုအချိန်အထိ၊ ကျွန်ုပ်သည် အင်ဂျင်အသစ်ကို အနည်းငယ်မျှသာ မြှင့်တင်ထားပြီး၊ ၎င်းအား လက်ရှိအနေအထားမှ ပေးထားသော မျက်နှာဖုံးများ အတွဲလိုက်၏ ဖြစ်နိုင်ခြေအသစ်များကို ထပ်ခါတလဲလဲ ရှာဖွေနိုင်စေကာ၊ လုံးဝမဟုတ်သော အက္ခရာအစုံများ၏ စာသားများတွင် ရှိနေခြင်းအတွက် ဖြစ်နိုင်ခြေကို ချန်ထားခဲ့သည်။ ခွဲခြမ်းစိတ်ဖြာမှုတွင် စာရင်းမ၀င်ပါ၊ တွေ့ရှိသော ထပ်ကျော့ဖွဲ့စည်းပုံများကြားတွင် ထည့်သွင်းထားသည်။ သို့ရာတွင်၊ သက်ဆိုင်ရာမျက်နှာဖုံးကို အသုံးပြု၍ ယခင်အပိုင်းအစကို ရှာဖွေခြင်း၏ ရလဒ်များ မည်သို့ပင်ရှိစေကာမူ၊ ၎င်းသည် နောက်မျက်နှာဖုံးကို သတ်မှတ်ရန် မဖြစ်နိုင်သေးပါ။ ဖော်ပြထားသော စာသားဖွဲ့စည်းပုံ၏ တင်းကျပ်မှုသည် မမှန်သော အက္ခရာများ မှားယွင်းစွာ ပါဝင်မှုများအတွက် နေရာလွတ်မရှိခဲ့ပါ။

အကယ်၍ ကျွန်ုပ်ကြုံတွေ့ခဲ့ရသော အကြောင်းအရာများ၏ဇယားနမူနာများအတွက် ဤမျှပြင်းထန်ပုံမပေါ်သေးပါက၊ အကယ်၍ ဝဘ်ဆိုဒ်တစ်ခု၏ အကြောင်းအရာများကို ခွဲခြမ်းစိတ်ဖြာရန် အလားတူလုပ်ဆောင်မှုတစ်ခုတွင် ခွဲခြမ်းစိတ်ဖြာမှုယန္တရားအသစ်ကို အသုံးပြုရန်ကြိုးစားသောအခါ၊ ကန့်သတ်ချက်များသည် ဤနေရာတွင် ၎င်းတို့အားလုံး၏ ရှင်းလင်းပြတ်သားမှုနှင့်အတူ ပေါ်လာသည်။ နောက်ဆုံးတွင်၊ ကျွန်ုပ်တို့ရှာဖွေနေသောဒေတာ (ထုတ်ယူရန်လိုအပ်သော) အကြားတွင်ရှိသော ဝဘ် markup အပိုင်းအစများအတွက် လိုအပ်သောမျက်နှာဖုံးများကို သတ်မှတ်ရန်အတော်လေးလွယ်ကူသော်လည်း နောက်တစ်ခုသို့ parser ကိုချက်ချင်းရွှေ့ရန် မည်သို့တွန်းအားပေးနိုင်မည်နည်း။ ၎င်းတို့ကြားရှိ နေရာလပ်များတွင် ထားရှိနိုင်သော tag များနှင့် HTML ရည်ညွှန်းချက်များ အားလုံးကြားမှ ဆင်တူသည့်အပိုင်း။

အနည်းငယ်စဉ်းစားပြီးနောက်၊ ဝန်ဆောင်မှုပုံစံအချို့ကို မိတ်ဆက်ပေးရန် ဆုံးဖြတ်ခဲ့သည်။ (%all_before) и (%all_after)အရင်းအမြစ်စာသားတွင်ပါရှိသောအရာအားလုံးကို ၎င်းတို့နောက်လိုက်သည့်ပုံစံ (mask) များရှေ့တွင် ကျော်သွားကြောင်း သေချာစေရန်အတွက် ထင်ရှားသောရည်ရွယ်ချက်ကို ဆောင်ရွက်ပေးပါသည်။ ထိုမှတပါး၊ (%all_before) သို့ဆိုလျှင် ဤထင်သလိုပါဝင်မှုများအားလုံးကို ရိုးရိုးရှင်းရှင်း လျစ်လျူရှုလိုက်သည်။ (%all_after)ဆန့်ကျင်ဘက်အနေနှင့်၊ ၎င်းတို့ကို ယခင်အပိုင်းအစမှ ရွှေ့ပြီးနောက် လိုချင်သောအပိုင်းသို့ ပေါင်းထည့်နိုင်စေခဲ့သည်။ ဒါဟာ အတော်လေးရိုးရှင်းတယ်လို့ထင်ရပေမယ့် ဒီသဘောတရားကိုအကောင်အထည်ဖော်ဖို့အတွက် ကျွန်တော်ဟာ အကောင်အထည်ဖော်ပြီးသားယုတ္တိကိုမချိုးဖျက်နိုင်အောင် လိုအပ်တဲ့ပြုပြင်မွမ်းမံမှုတွေပြုလုပ်ဖို့အတွက် gorp အရင်းအမြစ်တွေကို ထပ်မံဖြီးခဲ့ရပါတယ်။ အဆုံးတွင်၊ ကျွန်ုပ်တို့ ဤအရာကို လုပ်ဆောင်နိုင်ခဲ့သည် (အလွန်၊ ပထမဆုံး၊ အလွန်ဗိုင်းကျနေသော်လည်း၊ ကျွန်ုပ်၏ parser ကို အကောင်အထည်ဖော်ရန် ရေးသားထားပြီး၊ သီတင်းပတ်အနည်းငယ်အတွင်း ပိုမြန်သည်)။ ယခုအချိန်မှစ၍၊ စနစ်သည် အမှန်တကယ်လုပ်ဆောင်ရန် ပထမဆုံးကြိုးစားပြီး 12 နှစ်ထက်မနည်းသော universal ပုံစံကို ပြောင်းလဲခဲ့သည်။

ဟုတ်ပါတယ်၊ ဒါက ကျွန်တော်တို့ရဲ့ အိပ်မက်တွေရဲ့ အဆုံးမဟုတ်ပါဘူး။ အခမဲ့သဒ္ဒါကို အကောင်အထည်ဖော်ရန်အတွက် ရရှိနိုင်သောစာကြည့်တိုက်များအားလုံးကို အသုံးပြု၍ C# တွင် gorp template parser ကို လုံးလုံးပြန်လည်ရေးနိုင်သည်။ ကုဒ်ကို သိသာထင်ရှားစွာ ရိုးရှင်းစေသင့်သည်ဟု ကျွန်တော်ထင်သည်၊ ၎င်းသည် ရှိပြီးသား Java အရင်းအမြစ်များပုံစံဖြင့် အမွေအနှစ်များကို ဖယ်ရှားနိုင်မည်ဖြစ်သည်။ လက်ရှိအင်ဂျင်အမျိုးအစားဖြင့်၊ ကျွန်ုပ်ဖော်ပြခဲ့ပြီးသော meta-templates များကိုအကောင်အထည်ဖော်ရန်ကြိုးပမ်းမှုအပါအဝင်၊ အမျိုးမျိုးသောဝဘ်ဆိုဒ်များမှဒေတာများကိုခွဲခြမ်းစိတ်ဖြာရန်ဖော်ပြခြင်းမပြုဘဲအမျိုးမျိုးသောစိတ်ဝင်စားဖွယ်အရာများကိုလုပ်ဆောင်နိုင်သည် (သို့သော်ကျွန်ုပ်မဆုံးဖြတ်ပါ။ ရှိပြီးသား အထူးပြုဆော့ဖ်ဝဲလ်ကိရိယာများသည် ၎င်းအတွက် ပိုသင့်လျော်သည် - ကျွန်ုပ် ၎င်းတို့အား အသုံးပြုရန် သင့်လျော်သော အတွေ့အကြုံမရှိသေးပါ)။

စကားမစပ်၊ ဒီနွေရာသီမှာ Salesforce နည်းပညာတွေကို အသုံးပြုတဲ့ ကုမ္ပဏီ (မူရင်း developer) ထံမှ အီးမေးလ်ဖြင့် ဖိတ်ကြားချက်တစ်ခု လက်ခံရရှိထားပြီးဖြစ်သည်။ Gop) Riga တွင်နောက်ဆက်တွဲအလုပ်အတွက်အင်တာဗျူးတစ်ခုအောင်မြင်ပါ။ ကံမကောင်းစွာပဲ၊ လောလောဆယ်မှာတော့ ဒီလိုပြန်လည်နေရာချထားမှုအတွက် အဆင်သင့်မဖြစ်သေးပါဘူး။

အကယ်၍ ဤအကြောင်းအရာသည် စိတ်ဝင်စားမှုအချို့ကို နှိုးဆွပေးမည်ဆိုပါက၊ ဒုတိယအပိုင်းတွင် Salesforce တွင်အသုံးပြုသည့် အကောင်အထည်ဖော်မှုနမူနာကို အသုံးပြု၍ နမူနာပုံစံများကို စုစည်းခြင်းနှင့် နောက်ပိုင်းတွင် ခွဲခြမ်းစိတ်ဖြာခြင်းနည်းပညာကို ပိုမိုအသေးစိတ်ဖော်ပြရန် ကြိုးစားပါမည်။ Gop (ကျွန်ုပ်၏ကိုယ်ပိုင်ထပ်တိုးမှုများ၊ ဖော်ပြထားပြီးဖြစ်သော function စကားလုံးအချို့မှလွဲ၍၊ template syntax ကိုယ်တိုင်တွင် အပြောင်းအလဲမရှိသလောက်ဖြစ်ပေသည်၊ ထို့ကြောင့် မူရင်းစနစ်အတွက် စာရွက်စာတမ်းအားလုံးနီးပါး Gop ကျွန်တော့်ဗားရှင်းအတွက်လည်း သင့်တော်ပါတယ်။)

source: www.habr.com

မှတ်ချက် Add