Istwa a nan yon ti pwojè douz ane ki dire (sou BIRMA.NET pou premye fwa ak franchman premye men)

Ka nesans la nan pwojè sa a dwe konsidere kòm yon ti lide ki te vin jwenn mwen yon kote nan fen ane 2007, ki te destine jwenn fòm final li sèlman 12 ane pita (nan pwen sa a nan tan - nan kou, byenke aplikasyon aktyèl la, dapre otè a, se trè satisfezan).

Tout bagay te kòmanse lè, nan pwosesis pou ranpli devwa ofisyèl mwen yo nan bibliyotèk la, mwen te atire atansyon sou lefèt ke pwosesis la nan antre done ki soti nan tèks la analize nan tablo kontni nan liv (ak mizik) piblikasyon nan baz done a ki deja egziste, aparamman, yo ka siyifikativman senplifye ak otomatize, pran avantaj de pwopriyete a nan lòd ak repetibilite nan tout done ki nesesè pou opinyon, tankou non an nan otè a nan atik la (si nou ap pale de yon koleksyon atik), tit la nan atik la (oswa soutit la ki reflete nan tab la) ak nimewo paj la nan atik aktyèl la tab la. Okòmansman, mwen te pratikman konvenki ke yon sistèm apwopriye pou fè travay sa a ka fasil jwenn sou entènèt la. Lè kèk sipriz te koze pa lefèt ke mwen pa t 'kapab jwenn yon pwojè konsa, mwen deside eseye aplike li poukont mwen.

Apre yon ti tan, premye pwototip la te kòmanse travay, ke mwen imedyatman te kòmanse itilize nan aktivite chak jou mwen an, ansanm debogaj li sou tout egzanp ki te vin nan men m '. Erezman, nan espas travay abityèl mwen an, kote mwen pa t 'pa vle di yon pwogramè, Lè sa a, mwen te toujou ale ak vizib "Dann" nan travay mwen an, pandan ki mwen te entansif debogaj lide mwen an - yon bagay prèske impensable nan reyalite aktyèl yo, ki vle di. rapò chak jou sou travay ki fèt pandan jounen an. Pwosesis la nan polisaj pwogram nan te pran yon total pa mwens pase apeprè yon ane, men menm apre sa rezilta a te kapab diman dwe rele konplètman siksè - te gen twòp konsèp diferan ki pa t 'byen konpreyansib pou aplikasyon an: eleman opsyonèl ki ka sote. ; gade pi devan nan eleman (nan bi pou ranplase eleman anvan yo nan rezilta rechèch); menm pwòp tantativ nou pou aplike yon bagay tankou ekspresyon regilye (ki gen yon sentaks inik). Mwen dwe di ke anvan sa a mwen te abandone pwogramasyon yon ti jan (pou apeprè 8 ane, si se pa plis), kidonk nouvo opòtinite pou aplike konpetans mwen nan yon travay ki enteresan epi ki nesesè konplètman kaptire atansyon mwen. Li pa etone ke kòd sous la ki te lakòz - nan absans la nan nenpòt ki apwòch klè nan konsepsyon li yo sou pati mwen - byen vit te vin tounen yon mishmash inimajinabl nan moso disparate nan lang C a ak kèk eleman nan C++ ak aspè nan pwogramasyon vizyèl (okòmansman li. te deside sèvi ak yon sistèm konsepsyon tankou Borland C++ Builder - "prèske Delphi, men nan C"). Sepandan, tout bagay sa yo finalman te bay rezilta nan automatisation aktivite chak jou nan bibliyotèk nou an.

An menm tan an, mwen deside, jis nan ka, yo pran kou yo fòme devlopè lojisyèl pwofesyonèl. Mwen pa konnen si aktyèlman posib pou aprann "yo dwe yon pwogramè" nan grafouyen la, men pran an kont ladrès mwen te deja te nan tan sa a, mwen te kapab yon ti jan metrize teknoloji ki te pi enpòtan nan tan sa a, tankou kòm C#, Visual Studio pou devlopman anba .NET, osi byen ke kèk teknoloji ki gen rapò ak Java, HTML ak SQL. Fòmasyon an antye te pran yon total de ane, epi li te sèvi kòm pwen depa pou yon lòt pwojè mwen an, ki finalman lonje sou plizyè ane - men sa a se yon sijè pou yon piblikasyon separe. Isit la li ta sèlman apwopriye pou sonje ke mwen te fè yon tantativ adapte devlopman yo mwen te deja genyen sou pwojè ki dekri a pou kreye yon aplikasyon fenèt plen véritable nan C# ak WinForms ki aplike fonksyonalite ki nesesè yo, epi sèvi ak li kòm baz pou la. pwojè diplòm k ap vini an.
Apre yon sèten tan, lide sa a te kòmanse parèt pou mwen merite pou yo pale nan konferans anyèl sa yo ak patisipasyon reprezantan divès bibliyotèk tankou "LIBKOM" ak "CRIMEA". Lide a, wi, men se pa aplikasyon mwen an nan li nan moman sa a. Lè sa a, mwen te espere tou ke yon moun ta reekri li lè l sèvi avèk apwòch ki pi konpetan. Yon fason oswa yon lòt, nan 2013 mwen deside ekri yon rapò sou travay preliminè mwen an epi voye li bay Komite Òganizasyon Konferans lan ak yon aplikasyon pou yon sibvansyon pou patisipe nan konferans lan. Nan yon ti jan sipriz, aplikasyon mwen an te apwouve, epi mwen te kòmanse fè kèk amelyorasyon nan pwojè a pou prepare li pou prezantasyon nan konferans lan.

Nan tan sa a, pwojè a te deja resevwa yon nouvo non BIRMA, akeri divès kalite adisyonèl (pa tèlman konplètman aplike, men pito sipoze) kapasite - Ou ka jwenn tout detay nan rapò mwen an.

Yo dwe onèt, li te difisil yo rele BIRMA 2013 yon bagay konplè; Franchman pale, se te yon navèt trè rache te fè nan prese. An tèm de kòd, pratikman pa te gen okenn inovasyon espesyal nan tout, eksepte pou yon tantativ olye dekouraje yo kreye kèk kalite sentaks inifye pou analizeur a, nan aparans ki raple lang nan fòma IRBIS 64 (e an reyalite, tou sistèm nan ISIS - ak parantèz kòm estrikti siklik; poukisa Nan moman sa a mwen te panse li te sanble trè fre). Analyseur a san espwa bite sou ti sèk sa yo nan parantèz nan kalite ki apwopriye a (depi parantèz tou fè yon lòt wòl, sètadi, yo te make estrikti si ou vle pandan analiz ki ka sote). Mwen ankò refere tout moun ki vle fè konesans ak lè sa a difisil pou imajine, enjustifye sentaks BIRMA an plis detay nan rapò mwen an nan tan sa a.

An jeneral, apa de lite ak analizeur pwòp mwen an, mwen pa gen anyen plis pou di konsènan kòd vèsyon sa a - eksepte pou konvèsyon ranvèse sous ki egziste deja yo nan C++ pandan y ap konsève kèk karakteristik tipik nan kòd .NET (yo dwe onèt, li nan difisil pou konprann , ki sa egzakteman pouse m 'fè tout bagay tounen - pwobableman gen kèk pè estipid pou kenbe kòd sous mwen an sekrè, kòm si li te yon bagay ki ekivalan a resèt la sekrè nan Coca-Cola).

Petèt desizyon estipid sa a bay manti tou rezon ki fè difikilte pou yo asosye bibliyotèk DLL ki kapab lakòz la ak koòdone ki deja egziste nan yon estasyon travay ki fèt lakay pou antre done nan yon katalòg elektwonik (wi, mwen pa t mansyone yon lòt reyalite enpòtan: depi kounye a, tout kòd la nan "motè" BIRMA la te jan yo espere, li se separe de pati nan koòdone ak pake nan DLL ki apwopriye a). Poukisa li te nesesè yo ekri yon estasyon travay separe pou rezon sa yo, ki de tout fason, nan aparans li ak metòd entèraksyon ak itilizatè a, san wont kopye menm estasyon travay "Catalogizer" nan sistèm nan IRBIS 64 - sa a se yon kesyon separe. Nan ti bout tan: li te bay solidite ki nesesè nan devlopman Lè sa a, mwen an pou pwojè gradyasyon mwen an (otreman motè analizeur endijèr la pou kont li te yon jan kanmenm pa ase). Anplis de sa, Lè sa a, mwen te rankontre kèk difikilte nan mete ann aplikasyon koòdone nan estasyon an Cataloger ak modil pwòp mwen, aplike nan tou de C++ ak C#, ak aksè dirèkteman nan motè mwen an.

An jeneral, etranj ase, li te pwototip sa a olye maladwa nan tan kap vini BIRMA.NET ki te destine vin tounen "cheval travay" mwen pou kat ane kap vini yo. Li pa ka di ke pandan tan sa a mwen pa t 'omwen eseye jwenn fason pou yon aplikasyon nouvo, pi konplè nan yon lide ki dire lontan. Pami lòt inovasyon, ta dwe deja gen enbrike sekans siklik ki ta ka gen ladan eleman opsyonèl - sa a se ki jan mwen te pral pote nan lavi lide nan modèl inivèsèl pou deskripsyon bibliyografik nan piblikasyon ak divès lòt bagay enteresan. Sepandan, nan aktivite pratik mwen yo nan epòk sa a, tout bagay sa yo te nan ti demann, ak aplikasyon an mwen te gen nan moman sa a te byen ase pou antre nan tab la. Anplis de sa, direksyon devlopman bibliyotèk nou an te kòmanse devye pi plis ak plis nan direksyon dijitalizasyon achiv mize yo, rapò ak lòt aktivite ki pa enterese m, ki finalman te fòse m finalman kite l, bay plas moun ki ta. pi kontan ak tout bagay sa yo.

Paradoksal, se apre evènman dramatik sa yo pwojè BIRMA, ki nan epòk sa a te deja gen tout karakteristik yon pwojè konstriksyon tipik alontèm, te sanble kòmanse pran nouvo lavi li te dire lontan! Mwen te gen plis tan lib pou panse san fè anyen konsa, mwen te kòmanse ankò penyen World Wide Web la nan rechèch nan yon bagay ki sanble (ererezman, kounye a mwen te kapab deja devine yo gade pou tout bagay sa yo pa sèlman nenpòt kote, men sou GitHub), ak yon kote nan At the kòmansman ane sa a, mwen finalman te rankontre yon pwodwi ki koresponn nan konpayi Salesforce byen li te ye anba non an ensiyifyan. Gorp. Pou kont li, li te kapab fè prèske tout sa mwen te bezwen nan yon motè analizeur sa a - sètadi, entèlijanman izole fragman endividyèl soti nan tèks abitrè, men byen klè estriktire, pandan y ap gen yon koòdone san patipri itilizatè-zanmitay pou itilizatè a fen, ki gen ladan sans sa yo konprann, tankou yon modèl, modèl ak ensidan, epi an menm tan lè l sèvi avèk sentaks abitye ekspresyon regilye yo, ki vin enkonparab plis lizib akòz divizyon an nan gwoup semantik deziyen pou analiz.

An jeneral, mwen deside ke sa a se youn nan Gorp (Mwen mande ki sa non sa a vle di? Petèt kèk kalite "jeneral oryante regilye parser"?) - egzakteman sa mwen te ap chèche pou yon tan long. Se vre, aplikasyon imedyat li pou pwòp bezwen mwen yo te gen yon pwoblèm konsa ke motè sa a mande aderans twò strik nan sekans estriktirèl tèks sous la. Pou kèk rapò tankou fichye boutèy demi lit (savwa, yo te mete yo pa devlopè yo kòm egzanp klè nan lè l sèvi avèk pwojè a), sa a se byen apwopriye, men pou tèks yo menm nan tablo analize nan kontni, li se fasil. Apre yo tout, menm paj la ak yon tab la ka kòmanse ak mo "Table of Contents", "Contents" ak nenpòt lòt deskripsyon preliminè ke nou pa bezwen mete nan rezilta yo nan analiz la gen entansyon (ak koupe yo manyèlman. chak fwa tou pa konvenyan). Anplis de sa, ant eleman repete endividyèl yo, tankou non otè a, tit ak nimewo paj la, paj la ka gen yon sèten kantite fatra (pa egzanp, desen, ak jis karaktè o aza), ki li ta bon tou pou kapab. koupe. Sepandan, dènye aspè a pa t 'ankò tèlman enpòtan, men akòz premye a, aplikasyon an ki deja egziste pa t' kapab kòmanse chèche estrikti ki nesesè yo nan tèks la soti nan yon sèten kote, men olye tou senpleman trete li depi nan konmansman an, pa t 'jwenn la. espesifye modèl la ak... te fini travay mwen. Li evidan, kèk ajisteman te bezwen omwen pèmèt kèk espas ant estrikti yo repete, e ki te fè m 'tounen nan travay.

Yon lòt pwoblèm se te ke pwojè a tèt li te aplike nan Java, epi si mwen te planifye nan lavni an aplike kèk mwayen pou entèfas teknoloji sa a ak aplikasyon abitye pou antre done nan baz done ki egziste deja (tankou "Catalogue" Irbis a), Lè sa a, omwen Omwen. fè sa nan C# ak .NET. Se pa ke Java tèt li se yon move lang - mwen yon fwa menm itilize li pou aplike yon aplikasyon fenèt enteresan ki aplike fonksyonalite yon kalkilatris pwogramasyon domestik (kòm yon pati nan yon pwojè kou). Ak an tèm de sentaks li trè menm jan ak menm C-sharp la. Oke, sa a se sèlman yon plis: pi fasil li pral pou mwen finalize yon pwojè ki deja egziste. Sepandan, mwen pa t 'vle plonje ankò nan mond sa a olye etranj nan teknoloji Java fenèt (oswa olye, Desktop) - apre tout, lang nan tèt li pa t '"prepare" pou itilizasyon sa a, epi mwen pa t' ditou anvi yon repetisyon nan. eksperyans anvan an. Petèt li se jisteman paske C # an konjonksyon avèk WinForms se pi pre Delphi, ak ki anpil nan nou te kòmanse yon fwa. Erezman, solisyon ki nesesè yo te jwenn byen vit - nan fòm lan nan pwojè a IKVM.NET, ki fè li fasil pou tradui pwogram Java ki deja egziste yo nan kòd jere .NET. Se vre, pwojè a li menm te deja abandone pa otè yo nan moman sa a, men dènye aplikasyon li te pèmèt mwen byen avèk siksè fè aksyon ki nesesè pou tèks sous yo. Gorp.

Se konsa, mwen te fè tout chanjman ki nesesè yo epi reyini tout bagay nan yon DLL nan kalite ki apwopriye a, ki ta ka fasil pou "ranmase" pa nenpòt pwojè pou .NET Framework ki te kreye nan Visual Studio. Nan entre-temps la, mwen te kreye yon lòt kouch pou prezantasyon pratik nan rezilta yo retounen Gorp, nan fòm estrikti done korespondan ki ta bon pou trete nan yon gade tab (pran kòm yon baz tou de ranje ak kolòn; tou de kle diksyonè ak endèks nimerik). Oke, sèvis piblik ki nesesè yo tèt yo pou trete ak montre rezilta yo te ekri byen vit.

Epitou, pwosesis la nan adapte modèl pou nouvo motè a yo nan lòd yo anseye li analize echantiyon ki deja egziste nan tèks analize nan tablo matyè yo pa te lakòz okenn konplikasyon espesyal. An reyalite, mwen pa t 'menm fè referans a modèl anvan mwen yo ditou: mwen tou senpleman kreye tout modèl ki nesesè yo nan grate. Anplis, si modèl yo ki fèt pou travay ak vèsyon anvan sistèm lan mete yon kad jistis etwat pou tèks ki ta ka byen analize avèk èd yo, nouvo motè a te deja fè li posib yo devlope modèl san patipri inivèsèl apwopriye pou plizyè kalite maketing nan. yon fwa. Mwen menm te eseye ekri kèk kalite modèl konplè pou nenpòt ki tèks tab la abitrè, byenke, nan kou, menm ak tout nouvo posiblite yo louvri pou mwen, ki gen ladan, an patikilye, kapasite nan limite aplike menm sekans repete enbrike yo ( tankou, pou egzanp, ti non ak inisyal plizyè otè nan yon ranje), sa a te tounen soti nan yon utopi.

Petèt nan tan kap vini an li pral posib aplike yon sèten konsèp nan meta-modèl, ki pral kapab tcheke tèks la sous pou konfòmite ak plizyè nan modèl yo disponib nan yon fwa, ak Lè sa a, an akò ak rezilta yo jwenn, chwazi a. pi apwopriye youn, lè l sèvi avèk kèk kalite algorithm entelijan. Men koulye a, mwen te plis konsène sou yon lòt kesyon. Yon analizeur tankou Gorp, malgre tout adaptabilite li yo ak modifikasyon mwen te fè yo, li te toujou natirèlman enkapab fè yon sèl bagay ki sanble senp ke analizeur pwòp tèt ou-ekri mwen an te kapab fè soti nan vèsyon an trè premye. Savwa: li te gen kapasite pou jwenn ak ekstrè nan tèks sous la tout fragman ki koresponn ak mask la espesifye nan modèl la itilize nan plas la dwat, pandan y ap pa te enterese nan tout sa ki tèks yo bay la genyen nan espas ki genyen ant fragman sa yo. Jiskaprezan, mwen te sèlman yon ti kras amelyore nouvo motè a, ki pèmèt li fè rechèch pou tout repetisyon posib nouvo nan yon sekans bay mask sa yo soti nan pozisyon aktyèl la, kite posiblite pou prezans nan tèks la nan seri karaktè abitrè ki te konplètman. enkoni nan analiz la, ki fèmen ant estrikti yo repete detekte. Sepandan, sa a pa t 'fè li posib yo mete pwochen mask la kèlkeswa rezilta yo nan rechèch pou fragman anvan an lè l sèvi avèk mask ki koresponn lan: strikte nan estrikti tèks la dekri toujou pa t 'kite plas pou enklizyon abitrè nan karaktè iregilye.

Men, si pou egzanp sa yo nan tablèt ke mwen te rankontre pwoblèm sa a pa t 'ankò sanble tèlman grav, Lè sa a, lè w ap eseye aplike yon nouvo mekanis analiz nan yon travay menm jan an nan analiz sa ki nan yon sit entènèt (sa vle di analiz la menm), li yo. limitasyon yo isit la yo te parèt ak tout evidan yo. Apre yo tout, li se byen fasil yo mete mask ki nesesè yo pou fragman nan maketing entènèt, ant ki done yo nou ap chèche pou (ki bezwen yo dwe ekstrè) yo ta dwe lokalize, men ki jan nou ka fòse analizeur a imedyatman deplase sou pwochen an. fragman menm jan an, malgre tout tag posib ak atribi HTML ki ka mete nan espas ki genyen ant yo?

Apre reflechi yon ti kras, mwen deside prezante yon koup nan modèl sèvis (%all_before) и (%all_after), sèvi ak objektif evidan pou asire ke tout bagay ki ka genyen nan tèks sous la sote anvan nenpòt modèl (mask) ki swiv yo. Anplis, si (%all_before) tou senpleman inyore tout enklizyon sa yo abitrè, lè sa a (%all_after), okontrè, pèmèt yo ajoute nan fragman an vle apre yo fin deplase soti nan fragman anvan an. Li son byen senp, men pou aplike konsèp sa a mwen te oblije penyen nan sous Gorp yo ankò pou fè modifikasyon ki nesesè yo pou pa kraze lojik ki deja aplike. Nan fen a, nou jere fè sa (byenke menm premye, trè premye, byenke trè buggy, aplikasyon analizeur mwen an te ekri, e menm pi vit - nan yon koup de semèn). Depi koulye a, sistèm nan te pran yon fòm vrèman inivèsèl - pa mwens pase 12 ane apre premye tantativ yo fè li fonksyone.

Natirèlman, sa a se pa nan fen rèv nou yo. Ou ka konplètman reekri parser modèl Gorp nan C#, lè l sèvi avèk nenpòt nan bibliyotèk ki disponib pou aplike yon gramè gratis. Mwen panse ke kòd la ta dwe siyifikativman senplifye, e sa pral pèmèt nou debarase m de eritaj la nan fòm lan nan sous Java ki deja egziste. Men, ak kalite motè a ki deja egziste, li se byen posib tou fè divès bagay enteresan, ki gen ladan yon tantativ aplike meta-modèl mwen te deja mansyone, nou pa mansyone analize divès done ki sòti nan divès sit entènèt (sepandan, mwen pa ekskli ke zouti lojisyèl espesyalize ki egziste deja yo pi apwopriye pou sa a - mwen jis pa te gen eksperyans ki apwopriye a nan sèvi ak yo ankò).

By wout la, ete sa a mwen deja resevwa yon envitasyon pa imel nan men yon konpayi ki itilize teknoloji Salesforce (devlopè orijinal la. Gorp), pase yon entèvyou pou travay ki vin apre nan Riga. Malerezman, pou le moman mon pa pare pour sa bann redeployment.

Si materyèl sa a eksite kèk enterè, Lè sa a, nan dezyèm pati a, mwen pral eseye dekri an plis detay teknoloji a pou konpile epi answit analize modèl lè l sèvi avèk egzanp aplikasyon an itilize nan Salesforce. Gorp (Pwòp adisyon mwen yo, ak eksepsyon de yon koup nan mo fonksyon ki deja dekri, fè nòmalman pa gen okenn chanjman nan sentaks modèl la li menm, kidonk prèske tout dokiman pou sistèm orijinal la Gorp Apwopriye pou vèsyon mwen an tou).

Sous: www.habr.com

Add nouvo kòmantè