|
SITA – Program de arbitrare electronica pentru concursurile din unde ultrascurte
Suita
de programe, propusa in continuare, este destinata arbitrarii concursurilor de
radioamatori din unde ultrascurte. Acestea au fost concepute in mai multe
etape, testate si optimizate inainte de publicare. Din suita fac parte
urmatoarele programe: SITA Crosscheck, SITA Total si SITA PHP.
Dar de ce SITA? SITA In
anul 2018 am fost cooptat in Echipa UUS.ro in scopul organizarii si
desfasurarii concursului Maraton YO VHF – UHF.
O parte din colaborare mea consta in participarea la procesul de arbitrare al concursului
si intocmirea clasamentelor. Arbitrarea se realiza electronic cu ajutorul unui
program scris de catre Dan, YO9CWY, program utilizat si in prezent. Publicarea
programului de arbitrare LogXChecker, de catre colegul nostru Sorin, YO5PJB, ne-a fost de
un real folos in procesul de arbitrare. Acesta a fost utilizat ca arbitrare
secundara pentru confruntarea si confirmarea rezultatelor obtinute cu programul
anterior. Nu au existat niciodata diferente. Incepind
cu anul 2020 am sprijinit echipa de arbitrare din Federatia Romana de
Radioamatorism, ca voluntar, operator date, la arbitrarea electronica a
concursurilor organizate de catre aceasta, in unde ultrascurte. Pentru
arbitrare am utilizat programul LogXChecker, singurul program capabil sa
indeplineasca conditiile tuturor concursurilor arbitrate. Deoarece confruntarea
si confirmarea rezultatelor cu un alt program nu era posibila, m-am hotarit sa concep
unul. In
vara anului 2021 am scris si testat primul meu program de arbitrare. Rezultatul
a fost dezamagitor. Aplicatia mea "gindea prea mult" si refuza
cu desavirsire sa afiseze rezultatele. Am fost atit de dezamagit incit am
refuzat sa mai continui. Dupa o pauza de un an m-am reintors in fata
calculatorului. Am recitit codul, am facut teste, am analizat rezultatele si am
tras concluzia: programul imperechea foarte greu legaturile radio, cea mai mare
parte din timp petrecind-o cautind. Astfel, am hotarit sa schimb complet modul
de organizare si manipulare al informatiei. Pe principiul organizarii cartilor dintr-o
biblioteca, am indexat si convertit in date, toate legaturile radio. In plan
orizontal, informatiile din legatura radio, au fost transformate in date cu
acelasi index. In plan vertical, toate legaturile au fost indexate, de la
primul, pina la ultimul concurent. Mai mult, fiecarui concurent i-au fost salvate
indexurile, de inceput si sfirsit, ale legaturilor acestuia, simplificind
procesul de cautare. Urmatoarea
etapa a fost arbitrarea propriu-zisa. Am renuntat la procedeul clasic, "ia
legatura concurentului X si o compara cu legatura corespondentului sau Y",
si am hotarit sa abordez altfel procesul. Dupa indexarea si memorarea indexurilor
legaturilor, am inceput sa elimin, treptat, toate legaturile radio nule. La
final, legaturile ramase, mult mai putine la numar, au fost supuse verificarii
incrucisate. Asa mi-a venit ideea sitei. La prima cernere, am eliminat indexurile
legaturilor cu formatul EDI gresit. La a doua cernere, din indexurile ramase de
la prima cernere, am eliminat indexurile legaturilor cu corespondentii care nu
au trimis log. Am continuat, asemanator sitei, procesul de cernere, de circa sase
ori, eliminind in fiecare etapa indexurile legaturilor nule din indexurile legaturilor
ramase de la cernerea anterioara. Urmatoarea etapa a fost verificarea
incrucisata, urmata de intocmirea clasamentului, etape care nu au creat probleme. Rezultat:
la Campionatul International in Unde Ultrascurte al Romaniei 2023, sectiunea
MultiBand, care include logurile pe toate cele sapte benzi din unde ultrascurte,
arbitrarea electronica a 2800 loguri, sosite direct sau importate de pe
serverul IARU, dureaza mai putin de 4 secunde. In aceste 4 secunde, programul,
pentru fiecare banda in parte, extrage legaturile radio, executa verificarea
incrucisata, exporta legaturile si modul cum acestea au fost arbitrate,
intocmeste clasamentul pe banda si intr-un final, separat, intocmeste si
exporta clasamentul general. Programul a fost rulat pe un calculator laptop Aspire
5. Iata rezultatul:
Inainte
de a prezenta suita de programe doresc sa completez. Arbitrarea electronica
propriu-zisa nu incepe din momentul rularii programului pe calculator. Datele,
respectiv logurile, sint pregatite anterior arbitrarii, inca de cind sint primite
de la concurenti. Totul se intimpla pe site, in pagina de incarcare. Pagina, creata
de mine, obliga concurentii sa selecteze banda si categoria, pentru logurile ce
urmeaza sa fie incarcate, modifica continutul selectat cu denumiri unice si
apoi il salveaza. Totodata triaza si salveaza logurile pe benzi, sterge datele
personale, salveaza copii backup ale logurilor originale, nemodificate. Pagina uniformizeaza
antetul logurilor, care ar putea sa fie interpretat gresit de catre calculator,
simplificind munca echipei de arbitrare. In
interiorul programulului de arbitrare SITA, extragerea legaturilor radio si
verificarea corectitudinii acestora se face cu ajutorul regulilor de potrivire.
Imperecherea legaturilor se face dupa regula celor cinci minute. Verificarea
incrucisata se realizeaza prin confruntarea datelor din legaturile celor doi
concurenti, metoda lenta, sau prin crearea a doua siruri de caractere, din
cuvinte compuse, si compararea acestora, metoda rapida. Toate erorile sint
semnalate cu ajutorul codurilor. Programul intocmeste clasamentul si exporta
legaturile radio arbitrate. SITA Crosscheck Este
prima versiune a programului meu, cea mai simpla. Este destinata concursurilor
din unde ultrascurte cu una sau doua etape. Astfel: -
O etapa – o banda – intr-un
singur log. Ex: etapa 3 a Maraton YO, banda 144 MHz -
Doua etape – o banda – intr-un
singur log. Ex: CNUUS 144 MHz Programul
are o interfata simpla si intuitiva. Toate setarile din interfata, in vederea
arbitrarii, pot fi salvate, modificate, s-au incarcate ulterior. Teoretic, nu
ar trebui sa fie nicio problema la utilizarea lui.
Pentru
arbitrare, logurile de concurs se vor incarca intr-un director, denumit LOGS,
dispus in interiorul directorului program.
Cind
este utilizat, pentru arbitrare, este necesara dispunerea logurilor de concurs
in directorul LOGS, urmata de setarea interfetei, conform regulilor
concursului. Odata terminat acest proces se apasa butonul Verifica si se
asteapta terminarea procesului de arbitrare. In interiorul directorului program
sint create automat doua directoare: -
Directorul CLAS:
contine clasamentul rezultat in urma procesului de arbitrare -
Directorul SAVE:
contine legaturile exportate si modul cum acestea au fost arbitrate, in vederea
publicarii lor, dar si separat, pentru echipa de arbitrare, legaturile bune si
legaturile nule, in vederea verificarii lor. Descarca:
SITA Crosscheck Descarca:
codul sursa SITA Total Este
versiunea extinsa a programului, adaptata pentru mai multe tipuri de concursuri,
din unde ultrascurte, cu una sau mai multe etape si benzi. Astfel: -
O etapa – o banda – intr-un
singur log. Ex: etapa 3 a Maraton YO, banda 144 MHz -
O etapa – mai multe benzi –
fiecare banda cu logul ei. Ex. CIUUS sectiunea MB -
Doua etape – o banda –
intr-un singur log. Ex: CNUUS 144 MHz -
Mai multe etape – o banda –
fiecare etapa cu logul ei. Ex: Maraton YO 144 MHz, logurile pe tot anul -
Mai multe etape – mai multe
benzi – fiecare banda din fiecare etapa cu logul ei. Ex: CRUUS pe intregul an
Interfata
programului este impartita in doua parti, astfel: -
Partea de setare a regulilor
concursului, dispusa in portiunea superioara, in care se pot seta: o Setari concurs: aici trebuiesc setate numele
concursului, numarul de etape, tipul de log si benzile in care urmeaza sa se
desfasoare arbitrarea o Setari etapa: aici trebuiesc setate perioadele de desfasurare
ale etapelor ce urmeaza a fi arbitrate. o Setari banda: aici trebuiesc setati multiplicatorii
utilizati la arbitrare pentru fiecare banda -
Partea de verificare, dispusa
in portiunea inferioara a interfetei, este comuna intregului program. Deoarece
optiunile procesului de arbitrare sint mult mai complexe, dispunerea logurilor
in interiorul directorului program este foarte precisa, programul cautind
logurile in locatii binedefinite ca pozitie si denumire. Astfel: -
Indiferent de optiunea
aleasa directorul cu loguri se va denumi LOGS si se va dispune in
directorul program -
Indiferent daca exista una
sau mai multe etape, pentru fiecare dintre acestea se va crea un director
denumit PERIOD, urmat de numarul etapei, dispus in interiorul
directorului LOGS. Ex: pentru concursurile cu o etapa, in interiorul
directorului LOGS se va gasi un director denumit PERIOD1. Pentru un concurs cu
doua etape se vor gasi doua directoare denumite: PERIOD1 si PERIOD2. Si asa
mai departe. -
In interiorul fiecarui
director PERIOD se vor crea unul sau mai multe directoare, pentru fiecare banda
in parte. Aceste directoare se denumesc BAND urmat de numarul benzii.
Ex: pentru doua benzi voi avea in directoarele PERIOD directoarele: BAND1 si
BAND2. Pentru un concurs cu doua etape, pe doua benzi, in interiorul
directorului LOGS se vor gasi doua directoare, PERIOD1 si PERIOD2, si in
fiecare, alte doua directoare, BAND1 si BAND2. -
Logurile de concurs triate
pe etape si banzi si se vor aseza in directoarele BAND conform benzii in care
s-a lucrat, din directoarele PERIOD, conform etapei in care s-a lucrat. -
Continutul directoarelor
PERIOD si BAND trebuie sa fie acelasi cu setarile din interfata programului,
respectiv Setari etapa si Setari banda.
Procesul
de arbitrare si rezultatul arbitrarii este asemanator cu cel descris la SITA
Crosscheck. Descarca:
SITA Total Descarca:
codul sursa SITA PHP In
anul 2018, dupa desfasurarea a citeva etape ale concursului Maraton YO VHF –
UHF, am identificat problemele pe care le intimpinam la arbitrare si am inceput
sa caut solutii. Aveam dificultati la pregatirea logurilor sosite prin email in
vederea arbitrarii. Procesul minutios si arbitrarea electronica se executa
separat de catre doi colegi, urmat de suprapunerea rezultatelor pentru confruntare.
In acea perioada am simtit nevoia unei automatizari, o incercare de simplificare
a procesului de arbitrare. Prima idee pe care am avut-o a fost necesitatea unei
pagini de incarcare. Rezolvarea a venit din partea lui Dan, YO9CWY, pagina
creata de el a functionat cu succes, o perioada, in cadrul concursului nostru. Ulterior,
am mai avut o noua idee: o pagina de incarcare, care pe linga incarcarea
logurilor, sa arbitreze electronic concursul, in timp real. Dupa cinci ani de
la initierea concursului, aceasta idee a devenit realitate. Incepind cu anul
2023, concursul a beneficiat, experimental, de o pagina de incarcare si arbitrare
in timp real. Dupa un an de utilizare pot afirma, cu mindrie, ca arbitrarea in
timp real a functionat perfect, rezultatele afisate si cele arbitrate, dupa
concurs, fiind similare. Prin acest procedeu de arbitrare, concursul nostru,
Maraton YO VHF – UHF, a trecut in prima faza a experimentarii arbitrarii
electronice in timp real, fara asistenta umana sau cu asistenta umana scazuta.
Intentionam, pe viitor, sa renuntam la arbitrarea asistata a concursului,
interventia umana fiind doar de intretinere. Arbitrarea
experimentala in timp real a fost posibila datorita algoritmilor din cadrul
programului SITA. Dupa ce am terminat de conceput si testat programul, primul
gind pe care l-am avut a fost rescrierea lui in limbaj PHP, pentru testarea
arbitrarii in timp real. Marturisesc ca limbajul PHP nu imi este foarte popular.
L-am utilizat ocazional, singura aplicatie pe care am scris-o a fost pagina de
incarcare din Maraton YO VHF – UHF, urmata de o pauza totala. Dar cum Google
intoarce foarte multe exemple, nu mi-a fost deloc greu sa il rescriu. Toate
modulele si procedurile au fost traduse mot a mot, cu mici exceptii specifice limbajului.
La finalizare testele le-am facut pe servere reale, timpii de procesare fiind
foarte apropiati de cei obtinuti pe calculatorul personal. Despre
SITA PHP nu sint prea multe de spus, nu este un program personal de rulat pe
calculator. Este destinat aplicatiilor online si trebuie rulat pe server. Las
placerea citirii codului, testarii si implementarii lui, eventualilor
utilizatori. Descarca:
SITA PHP Perspective Sincer,
daca ar fi sa continui programul, nu as urma deloc directia spre care am pornit.
De acord, programul functioneaza corect si indeplineste conditiile pentru care
a fost creat, dar… nu poate fi dezvoltat. Motivul? Nu este flexibil. Interconectarea
modulelor, precum verigile unui lant, nu este benefica.
Nu se pot face prea multe schimbari. Folosirea rezultatele din modulul
trei este strins legata de modulul patru si nu pot fi utilizate direct in
modulul cinci. Aceasta se intimpla datorita modului in care a fost conceput
programul. Solutia,
la care ma gindesc, ar fi un buffer unic, pentru toate indexurile de intrare si
rezultate. Fiecare modul, oricare ar fi el, in oricare ordine, ar importa indexurile
dintr-acesta, provenite din procesul anterior. Dupa procesarea lor, le-ar
inlocui cu indexurile rezultate, pregatind bufferul pentru o noua procesare.
Aceasta solutie simpla ar face programul flexibil. Daca modulele vor fi insotite
de documentatie, ar permite arbitrilor sa aleaga ordinea operatiilor de
arbitrare si datele din legatura pe care doresc sa le arbitreze. Prin folosirea
unor fise de reguli, externe, modulele ar putea fi accesate, in orice ordine, sau
excluse. Prin crearea de noi module, s-ar putea extrage datele din fisiere
Cabrillo, ADIF, sau orice alt format, astfel, arbitrarea electronica extinzindu-se
si la concursurile din unde scurte sau moduri digitale. Prin
rescrierea procedurilor de arbitrare in limbaj PHP, acestea ar putea fi
utilizate si la concursurile din unde scurte. Astfel, o multime de concursuri ar
putea beneficia de arbitrare electronica in timp real, in conformitate cu
vremurile pe care le traim. Concursul nostru, Maraton YO VHF – UHF, dovedeste
aceasta: arbitrarea electronica in timp real este posibila si trebuie continuat
in aceasta directie. Codul
sursa se adreseaza celor care scriu programe si poate fi o excelenta sursa de
inspiratie. Programele au fost scrise in limbaj Delphi si PHP. Pentru lizibilitate
acestea sint comentate in totalitate. Surse de inspiratie https://www.ok2kkw.com/ediformat.htm https://www.debuggex.com/cheatsheet/regex/pcre https://github.com/ciorceri/logXchecker https://rosettacode.org/wiki/Haversine_formula#Delphi https://www.swissdelphicenter.ch/en/showcode.php?id=1725 https://www.m0nwk.co.uk/how-to-convert-maidenhead-locator-to-latitude-and-longitude/ https://en.delphipraxis.net/topic/1707-rules-for-changing-cursor-to-hourglass-and-back/ https://stackoverflow.com/questions/21142081/how-do-i-sort-a-tstringlist-according-to-specific-rules http://delphiexamples.com/filesdirectories/delfiles.html https://stackoverflow.com/questions/19567276/faster-way-to-split-text-in-delphi-tstringlist https://www.php.net/manual/en/control-structures.foreach.php https://www.php.net/manual/en/function.array-multisort.php http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe#PHP
Articol aparut la 8-3-2024 2400 Inapoi la inceputul articolului |
Comentariul trebuie sa se refere la continutul articolului. Mesajele anonime, cele scrise sub falsa identitate, precum si cele care contin (fara a se limita la) atac la persoana, injurii, jigniri, expresii obscene vor fi sterse iar dupa caz se va ridica dreptul de a posta comentarii.
|
Copyright © Radioamator.ro. Toate drepturile rezervate. All rights reserved
Articole | Concursuri | Mica Publicitate | Forum YO | Pagini YO | Call Book | Diverse | Regulamentul portalului | Contact |