Hadithi ya mradi mmoja mdogo wa miaka kumi na mbili (kuhusu BIRMA.NET kwa mara ya kwanza na kusema ukweli)

Kuzaliwa kwa mradi huu kunaweza kuzingatiwa kuwa wazo dogo ambalo lilinijia mahali pengine mwishoni mwa 2007, ambayo ilikusudiwa kupata fomu yake ya mwisho miaka 12 tu baadaye (kwa wakati huu - kwa kweli, ingawa utekelezaji wa sasa, kulingana na kwa mwandishi, ni ya kuridhisha sana) .

Yote ilianza wakati, katika mchakato wa kutimiza majukumu yangu rasmi katika maktaba, nilisisitiza ukweli kwamba mchakato wa kuingiza data kutoka kwa maandishi yaliyochanganuliwa ya yaliyomo kwenye machapisho ya kitabu (na muziki) kwenye hifadhidata iliyopo, inaonekana, inaweza kurahisishwa kwa kiasi kikubwa na kujiendesha, kwa kuchukua fursa ya mali ya utaratibu na kurudiwa kwa data zote zinazohitajika kwa pembejeo, kama vile jina la mwandishi wa makala (ikiwa tunazungumzia kuhusu mkusanyiko wa makala), kichwa cha makala (au manukuu yaliyoonyeshwa kwenye jedwali la yaliyomo) na nambari ya ukurasa wa jedwali la sasa la kipengee cha yaliyomo. Mwanzoni, nilikuwa na hakika kwamba mfumo unaofaa kwa ajili ya kutekeleza kazi hii unaweza kupatikana kwa urahisi kwenye mtandao. Wakati mshangao fulani ulisababishwa na ukweli kwamba sikuweza kupata mradi kama huo, niliamua kujaribu kutekeleza peke yangu.

Baada ya muda mfupi, mfano wa kwanza ulianza kufanya kazi, ambao nilianza kutumia mara moja katika shughuli zangu za kila siku, wakati huo huo nikitatua kwa mifano yote iliyokuja mkono wangu. Kwa bahati nzuri, katika sehemu yangu ya kazi ya kawaida, ambapo sikuwa mpangaji wa programu, basi bado niliachana na "wakati wa kupumzika" katika kazi yangu, wakati ambao nilikuwa nikisuluhisha akili yangu - jambo ambalo halijafikiriwa katika hali halisi ya sasa, ambayo inamaanisha. ripoti za kila siku juu ya kazi iliyofanywa wakati wa mchana. Mchakato wa kung'arisha programu ulichukua jumla ya si chini ya mwaka mmoja, lakini hata baada ya hapo matokeo hayangeweza kuitwa kuwa ya mafanikio kabisa - dhana nyingi tofauti ziliwekwa hapo awali ambazo hazikuwa wazi kabisa kwa utekelezaji: mambo ya hiari ambayo yanaweza. kuruka; kutazama mbele kwa vipengele (kwa madhumuni ya kubadilisha vipengele vya awali kwenye matokeo ya utafutaji); hata jaribio letu wenyewe la kutekeleza kitu kama misemo ya kawaida (ambayo ina syntax ya kipekee). Lazima niseme kwamba kabla ya hii nilikuwa nimeacha programu kwa kiasi fulani (kwa karibu miaka 8, ikiwa sio zaidi), hivyo fursa mpya ya kutumia ujuzi wangu kwa kazi ya kuvutia na muhimu iliteka mawazo yangu kabisa. Haishangazi kwamba msimbo wa chanzo - kwa kukosekana kwa njia yoyote wazi ya muundo wake kwa upande wangu - haraka sana ikawa mishmash isiyoweza kufikiria ya vipande tofauti katika lugha ya C na baadhi ya vipengele vya C++ na vipengele vya programu ya kuona (hapo awali ilikuwa iliamuliwa kutumia mfumo wa muundo kama Borland C++ Builder - "karibu Delphi, lakini katika C"). Hata hivyo, haya yote hatimaye yalizaa matunda katika kuendeshea shughuli za kila siku za maktaba yetu kiotomatiki.

Wakati huo huo, niliamua, ikiwa tu, kuchukua kozi za kufundisha watengenezaji wa programu za kitaaluma. Sijui ikiwa kweli inawezekana kujifunza "kuwa mtayarishaji programu" kutoka mwanzo hapo, lakini kwa kuzingatia ustadi niliokuwa nao wakati huo, niliweza kujua teknolojia ambayo ilikuwa muhimu zaidi wakati huo, kama vile. kama C#, Visual Studio kwa ajili ya maendeleo chini ya NET, pamoja na baadhi ya teknolojia zinazohusiana na Java, HTML na SQL. Mafunzo yote yalichukua jumla ya miaka miwili, na yakatumika kama sehemu ya kuanzia kwa mradi wangu mwingine, ambao hatimaye ulidumu kwa miaka kadhaa - lakini hii ni mada ya uchapishaji tofauti. Hapa itakuwa sawa tu kutambua kwamba nilifanya jaribio la kurekebisha maendeleo ambayo tayari nilikuwa nayo kwenye mradi ulioelezewa ili kuunda programu kamili ya dirisha katika C # na WinForms ambayo inatekeleza utendakazi unaohitajika, na kuitumia kama msingi wa mradi ujao wa diploma.
Kwa wakati, wazo hili lilianza kuonekana kwangu linastahili kutolewa kwenye mikutano kama hii ya kila mwaka na ushiriki wa wawakilishi wa maktaba mbali mbali kama "LIBKOM" na "CRIMEA". Wazo, ndio, lakini sio utekelezaji wangu wa wakati huo. Kisha pia nilitumaini kwamba mtu angeiandika tena kwa kutumia mbinu zenye uwezo zaidi. Kwa njia moja au nyingine, kufikia 2013 niliamua kuandika ripoti juu ya kazi yangu ya awali na kuituma kwa Kamati ya Maandalizi ya Mkutano na maombi ya ruzuku ya kushiriki katika mkutano huo. Kwa mshangao wangu kwa kiasi fulani, ombi langu liliidhinishwa, na nikaanza kufanya maboresho fulani kwa mradi ili kuutayarisha kwa ajili ya kuwasilishwa kwenye mkutano huo.

Kufikia wakati huo, mradi ulikuwa tayari umepokea jina jipya la BIRMA, ulipata uwezo wa ziada (haujatekelezwa kikamilifu, lakini badala yake) - maelezo yote yanaweza kupatikana katika ripoti yangu.

Kuwa waaminifu, ilikuwa vigumu kuita BIRMA 2013 kitu kamili; Kusema ukweli, ilikuwa ni hila ya kudanganya sana iliyofanywa kwa haraka. Kwa upande wa nambari, hakukuwa na uvumbuzi maalum hata kidogo, isipokuwa kwa jaribio lisilo na msaada la kuunda aina fulani ya syntax ya umoja kwa mtangazaji, kwa kuonekana kukumbusha lugha ya umbizo la IRBIS 64 (na kwa kweli, pia mfumo wa ISIS - na mabano kama miundo ya mzunguko; kwa nini Wakati huo nilifikiri ilionekana nzuri sana). Mchanganuzi alijikwaa bila matumaini kwenye miduara hii ya mabano ya aina inayofaa (kwani mabano pia yalifanya jukumu lingine, yaani, waliweka alama miundo ya hiari wakati wa uchanganuzi ambao unaweza kurukwa). Ninarejelea tena kila mtu ambaye anataka kufahamiana na wakati huo mgumu kufikiria, syntax isiyo na sababu ya BIRMA kwa undani zaidi kwa ripoti yangu ya wakati huo.

Kwa ujumla, kando na kuhangaika na kichanganuzi changu mwenyewe, sina la kusema zaidi kuhusu msimbo wa toleo hili - isipokuwa kwa ubadilishaji wa nyuma wa vyanzo vilivyopo kuwa C++ huku nikihifadhi baadhi ya vipengele vya kawaida vya msimbo wa .NET (kuwa mkweli, ni ni ngumu kuelewa, ni nini hasa kilinisukuma kurudisha kila kitu nyuma - labda woga fulani wa kijinga kwa kuficha nambari zangu za chanzo, kana kwamba ni kitu sawa na mapishi ya siri ya Coca-Cola).

Labda uamuzi huu wa kijinga pia ni sababu ya ugumu wa kuoanisha maktaba ya DLL inayosababishwa na kiolesura kilichopo cha kituo cha kazi kilichotengenezwa nyumbani kwa kuingiza data kwenye orodha ya elektroniki (ndio, sikutaja ukweli mwingine muhimu: kuanzia sasa, wote. kanuni ya "injini" ya BIRMA ilikuwa kama inavyotarajiwa, imetenganishwa na sehemu ya kiolesura na kufungwa katika DLL inayofaa). Kwa nini ilikuwa ni lazima kuandika kituo tofauti cha kazi kwa madhumuni haya, ambayo hata hivyo, kwa kuonekana kwake na njia ya kuingiliana na mtumiaji, bila aibu kunakiliwa "Catalogizer" sawa ya mfumo wa IRBIS 64 - hili ni swali tofauti. Kwa kifupi: ilitoa uthabiti unaohitajika kwa maendeleo yangu ya wakati huo kwa mradi wangu wa kuhitimu (vinginevyo injini ya kichanganuzi isiyoweza kugawanywa peke yake haikutosha). Kwa kuongezea, basi nilikumbana na ugumu fulani katika kutekeleza kiolesura cha Kitengo cha kazi cha Cataloger na moduli zangu, zilizotekelezwa katika C++ na C #, na kupata injini yangu moja kwa moja.

Kwa ujumla, isiyo ya kawaida, ilikuwa ni mfano huu usio na maana wa BIRMA.NET ya baadaye ambayo ilikusudiwa kuwa "mbabe kazi" wangu kwa miaka minne ijayo. Haiwezi kusema kwamba wakati huu sikujaribu angalau kutafuta njia za utekelezaji mpya, kamili zaidi wa wazo la muda mrefu. Miongoni mwa uvumbuzi mwingine, kunapaswa kuwa tayari kumekuwa na mlolongo wa mzunguko uliowekwa ambao ungeweza kujumuisha vipengele vya hiari - hivi ndivyo ningeleta uhai wazo la violezo vya ulimwengu kwa maelezo ya biblia ya machapisho na mambo mengine mbalimbali ya kuvutia. Walakini, katika shughuli zangu za vitendo wakati huo, yote haya yalikuwa katika mahitaji kidogo, na utekelezaji niliokuwa nao wakati huo ulikuwa wa kutosha kwa kuingiza majedwali ya yaliyomo. Kwa kuongezea, vekta ya ukuzaji wa maktaba yetu ilianza kupotoka zaidi na zaidi kuelekea uwekaji kumbukumbu wa kumbukumbu za makumbusho, kuripoti na shughuli zingine ambazo hazikunivutia sana, ambazo mwishowe zilinilazimisha kuiacha, na kutoa njia kwa wale ambao wangeweza. kuwa radhi zaidi na haya yote.

Kwa kushangaza, ilikuwa baada ya matukio haya makubwa ambayo mradi wa BIRMA, ambao wakati huo tayari ulikuwa na sifa zote za mradi wa kawaida wa ujenzi wa muda mrefu, ulionekana kuanza kuchukua maisha yake mapya yaliyosubiriwa kwa muda mrefu! Nilikuwa na wakati wa bure zaidi wa mawazo yasiyo na maana, nilianza tena kuchana Mtandao Wote wa Ulimwenguni nikitafuta kitu kama hicho (kwa bahati nzuri, sasa ningeweza kudhani kutafuta haya yote sio mahali popote tu, lakini kwenye GitHub), na mahali pengine huko. mwanzoni mwa mwaka huu, hatimaye nilikutana na bidhaa inayolingana kutoka kwa kampuni inayojulikana ya Salesforce chini ya jina lisilo na maana. Gorp. Kwa yenyewe, inaweza kufanya karibu kila kitu nilichohitaji kutoka kwa injini ya kichanganuzi - ambayo ni, kutenganisha kwa busara vipande vya mtu binafsi kutoka kwa maandishi ya kiholela, lakini yaliyopangwa wazi, wakati ikiwa na kiolesura cha urafiki cha mtumiaji wa mwisho, pamoja na viini vinavyoeleweka, kama vile. muundo, kiolezo na utokeaji, na wakati huo huo kwa kutumia sintaksia inayofahamika ya misemo ya kawaida, ambayo inakuwa inayoweza kusomeka kwa njia isiyolinganishwa kwa sababu ya mgawanyiko katika vikundi vilivyoteuliwa vya kisemantiki kwa uchanganuzi.

Kwa ujumla, niliamua kwamba hii ndiyo moja Gorp (Nashangaa jina hili linamaanisha nini? Labda aina fulani ya "mchanganuzi wa kawaida wa mwelekeo wa kawaida"?) - ni nini hasa nimekuwa nikitafuta kwa muda mrefu. Kweli, utekelezaji wake wa mara moja kwa mahitaji yangu mwenyewe ulikuwa na tatizo kwamba injini hii ilihitaji uzingatiaji mkali sana kwa mlolongo wa muundo wa maandishi chanzo. Kwa ripoti zingine kama vile faili za logi (yaani, ziliwekwa na watengenezaji kama mifano wazi ya kutumia mradi), hii inafaa kabisa, lakini kwa maandishi sawa ya yaliyomo yaliyochanganuliwa, haiwezekani. Baada ya yote, ukurasa huo huo ulio na jedwali la yaliyomo unaweza kuanza na maneno "Yaliyomo", "Yaliyomo" na maelezo mengine ya awali ambayo hatuitaji kuweka katika matokeo ya uchambuzi uliokusudiwa (na kuyakata kwa mikono. kila wakati pia haifai). Kwa kuongezea, kati ya vipengee vya kurudia mtu binafsi, kama vile jina la mwandishi, kichwa na nambari ya ukurasa, ukurasa unaweza kuwa na kiasi fulani cha takataka (kwa mfano, michoro, na wahusika wa nasibu), ambayo pia itakuwa nzuri kuweza kukatwa. Walakini, kipengele cha mwisho kilikuwa bado hakijakuwa muhimu sana, lakini kwa sababu ya kwanza, utekelezaji uliopo haukuweza kuanza kutafuta muundo muhimu katika maandishi kutoka mahali fulani, lakini badala yake uliichakata tangu mwanzo, haukupata. mifumo iliyoainishwa hapo na... nikamaliza kazi yangu. Ni wazi, kurekebisha kidogo kulihitajika ili angalau kuruhusu nafasi kati ya miundo inayojirudia, na hiyo ilinirudisha kazini.

Shida nyingine ilikuwa kwamba mradi wenyewe ulitekelezwa katika Java, na ikiwa nilipanga katika siku zijazo kutekeleza njia zingine za kuingiliana na teknolojia hii na programu zinazojulikana za kuingiza data kwenye hifadhidata zilizopo (kama vile "Cataloguer" ya Irbis), basi angalau Angalau. fanya hivi katika C# na .NET. Sio kwamba Java yenyewe ni lugha mbaya - mara moja niliitumia kutekeleza programu ya kuvutia ya dirisha ambayo ilitekeleza utendaji wa kikokotoo cha programu cha ndani (kama sehemu ya mradi wa kozi). Na kwa suala la syntax ni sawa na C-mkali sawa. Kweli, hii ni nyongeza tu: itakuwa rahisi kwangu kukamilisha mradi uliopo. Walakini, sikutaka kutumbukia tena katika ulimwengu huu usio wa kawaida wa teknolojia ya Java (au tuseme, desktop) - baada ya yote, lugha yenyewe haiku "lengwa" kwa matumizi kama haya, na sikutamani kurudiwa. uzoefu uliopita. Labda ni kwa sababu C # kwa kushirikiana na WinForms iko karibu zaidi na Delphi, ambayo wengi wetu tulianza nayo. Kwa bahati nzuri, suluhisho muhimu lilipatikana haraka sana - kwa namna ya mradi IKVM.NET, ambayo hurahisisha kutafsiri programu zilizopo za Java kwenye msimbo wa .NET unaosimamiwa. Ukweli, mradi wenyewe ulikuwa tayari umeachwa na waandishi wakati huo, lakini utekelezaji wake wa hivi karibuni uliniruhusu kutekeleza kwa ufanisi vitendo muhimu kwa maandishi ya chanzo. Gorp.

Kwa hiyo nilifanya mabadiliko yote muhimu na kukusanya yote katika DLL ya aina inayofaa, ambayo inaweza "kuchukuliwa" kwa urahisi na miradi yoyote ya NET Framework iliyoundwa katika Visual Studio. Wakati huo huo, niliunda safu nyingine kwa uwasilishaji rahisi wa matokeo yaliyorejeshwa Gorp, katika muundo wa miundo ya data inayolingana ambayo itakuwa rahisi kuchakatwa katika mwonekano wa jedwali (kuchukua kama msingi safu mlalo na safu wima; vitufe vya kamusi na faharasa za nambari). Kweli, huduma muhimu zenyewe za usindikaji na kuonyesha matokeo ziliandikwa haraka sana.

Pia, mchakato wa kurekebisha templeti za injini mpya ili kuifundisha kuchanganua sampuli zilizopo za maandishi yaliyochanganuliwa ya jedwali la yaliyomo haukusababisha shida yoyote maalum. Kwa kweli, hata sikulazimika kurejelea templeti zangu za zamani hata kidogo: Niliunda templeti zote muhimu kutoka mwanzo. Kwa kuongezea, ikiwa templeti iliyoundwa kufanya kazi na toleo la awali la mfumo huweka mfumo mwembamba wa maandishi ambayo yanaweza kuchanganuliwa kwa usahihi kwa msaada wao, injini mpya tayari ilifanya iwezekane kuunda templeti za ulimwengu zinazofaa kwa aina kadhaa za alama. mara moja. Nilijaribu hata kuandika aina fulani ya kiolezo cha kina kwa jedwali lolote la kiholela la maandishi ya yaliyomo, ingawa, kwa kweli, hata kwa uwezekano wote mpya unaonifungulia, pamoja na, haswa, uwezo mdogo wa kutekeleza mlolongo sawa wa kurudia. kama vile, kwa mfano, majina ya ukoo na waanzilishi waandishi kadhaa mfululizo), hii iligeuka kuwa utopia.

Labda katika siku zijazo itawezekana kutekeleza dhana fulani ya meta-templates, ambayo itaweza kuangalia maandishi ya chanzo kwa kufuata templates kadhaa zinazopatikana mara moja, na kisha, kwa mujibu wa matokeo yaliyopatikana, chagua inayofaa zaidi, kwa kutumia aina fulani ya algorithm ya akili. Lakini sasa nilikuwa na wasiwasi zaidi kuhusu swali lingine. Mchanganuzi kama Gorp, licha ya matumizi mengi na marekebisho niliyofanya, bado haikuweza kufanya jambo moja lililoonekana kuwa rahisi ambalo mchanganuzi wangu niliyejiandikisha aliweza kufanya kutoka kwa toleo la kwanza kabisa. Yaani: alikuwa na uwezo wa kupata na kutoa kutoka kwa maandishi chanzo vipande vyote vinavyofanana na kinyago kilichobainishwa ndani ya kiolezo kilichotumika mahali pazuri, huku akiwa havutiwi kabisa na maandishi yaliyotolewa katika nafasi kati ya vipande hivi. Kufikia sasa, nimeboresha kidogo injini mpya, ikiruhusu kutafuta marudio yote mapya ya mlolongo fulani wa masks kama hiyo kutoka kwa msimamo wa sasa, na kuacha uwezekano wa uwepo katika maandishi ya seti za wahusika wa kiholela ambao walikuwa kabisa. isiyojulikana katika uchanganuzi, iliyofungwa kati ya miundo iliyogunduliwa ya kurudia. Hata hivyo, hii haikufanya iwezekanavyo kuweka mask inayofuata bila kujali matokeo ya kutafuta kipande cha awali kwa kutumia mask inayofanana: ukali wa muundo wa maandishi ulioelezwa bado haukuacha nafasi ya kuingizwa kwa kiholela kwa wahusika wasio wa kawaida.

Na ikiwa kwa mifano ya majedwali ya yaliyomo ambayo nilipata shida hii bado haikuonekana kuwa mbaya sana, basi wakati wa kujaribu kutumia utaratibu mpya wa kuchanganua kwa kazi kama hiyo ya kuchanganua yaliyomo kwenye wavuti (yaani ugawaji sawa), yake. mapungufu ni hapa walionekana na dhahiri yao yote. Baada ya yote, ni rahisi sana kuweka vinyago muhimu kwa vipande vya alama za wavuti, kati ya ambayo data tunayotafuta (ambayo inahitaji kutolewa) inapaswa kupatikana, lakini tunawezaje kulazimisha kichanganuzi kuendelea mara moja hadi nyingine. kipande sawa, licha ya vitambulisho vyote vinavyowezekana na sifa za HTML ambazo zinaweza kuwekwa kwenye nafasi kati yao?

Baada ya kufikiria kidogo, niliamua kuanzisha mifumo kadhaa ya huduma (%yote_kabla) и (%yote_baada), ikitumikia kusudi la wazi la kuhakikisha kwamba kila kitu ambacho kinaweza kuwa katika matini chanzi kinarukwa kabla ya muundo wowote (mask) unaowafuata. Aidha, kama (%yote_kabla) tu kupuuza inclusions hizi zote za kiholela, basi (%yote_baada), kinyume chake, iliwaruhusu kuongezwa kwenye kipande kilichohitajika baada ya kuhama kutoka kwenye kipande kilichopita. Inaonekana ni rahisi sana, lakini kutekeleza wazo hili ilibidi nichanganye vyanzo vya gorp tena ili kufanya marekebisho muhimu ili nisivunje mantiki iliyotekelezwa tayari. Mwishowe, tuliweza kufanya hivi (ingawa hata ile ya kwanza kabisa, ingawa ni ngumu sana, utekelezaji wa kichanganuzi changu uliandikwa, na hata haraka zaidi - katika wiki chache). Kuanzia sasa na kuendelea, mfumo ulichukua fomu ya kweli ya ulimwengu wote - sio chini ya miaka 12 baada ya majaribio ya kwanza ya kuifanya ifanye kazi.

Kwa kweli, huu sio mwisho wa ndoto zetu. Unaweza pia kuandika upya kikamilifu kichanganuzi cha kiolezo cha gorp katika C#, kwa kutumia maktaba zozote zinazopatikana kutekeleza sarufi isiyolipishwa. Nadhani nambari inapaswa kurahisishwa kwa kiasi kikubwa, na hii itaturuhusu kuondoa urithi katika mfumo wa vyanzo vya Java vilivyopo. Lakini kwa aina iliyopo ya injini, pia inawezekana kabisa kufanya mambo mbalimbali ya kuvutia, ikiwa ni pamoja na jaribio la kutekeleza meta-templates niliyotaja tayari, bila kutaja kuchanganua data mbalimbali kutoka kwa tovuti mbalimbali (hata hivyo, sikatai. kwamba zana za programu maalum zilizopo zinafaa zaidi kwa hili - sijapata uzoefu unaofaa wa kuzitumia bado).

Kwa njia, msimu huu wa joto tayari nimepokea mwaliko kwa barua pepe kutoka kwa kampuni inayotumia teknolojia ya Salesforce (mtengenezaji wa asili Gorp), kupitisha mahojiano kwa kazi inayofuata huko Riga. Kwa bahati mbaya, kwa sasa siko tayari kwa uwekaji upya kama huo.

Ikiwa nyenzo hii itaamsha shauku fulani, basi katika sehemu ya pili nitajaribu kuelezea kwa undani zaidi teknolojia ya kuandaa na baadaye kuchanganua violezo kwa kutumia mfano wa utekelezaji unaotumiwa katika Salesforce. Gorp (nyongeza yangu mwenyewe, isipokuwa maneno kadhaa ya kazi ambayo tayari yameelezewa, haifanyi mabadiliko yoyote kwenye syntax ya kiolezo yenyewe, kwa hivyo karibu hati zote za mfumo asilia. Gorp Inafaa kwa toleo langu pia).

Chanzo: mapenzi.com

Kuongeza maoni