Sunteți pe pagina 1din 16

Universitatea Politehnică din Bucureşti

Facultatea de Automatică şi Calculatoare

CSpay – Infrastructură de calcul


pentru plata cu ora ı̂n UPB
http://anaconda.cs.pub.ro/~cspay/

Autori:
Andrei Buhaiu
Lucian Cojocar
Dumitru–Vlăduţ Dogaru
Grupa 322CC

Îndrumător:
Răzvan Deaconescu

Bucureşti, 2008
Cuprins
1 Introducere şi motivaţie 2

2 Arhitectura aplicaţiei 2

3 Interfaţa cu utilizatorul 3

4 Biblioteca libcspay 3

5 Biblioteca libspreadconv 4
5.1 Modulul ODS . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5.2 Modulul XLS . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

6 CSpay 2.0 6
6.1 Sistemul de plugin-uri . . . . . . . . . . . . . . . . . . . . . . 7

7 Anexa 1: Fişier de configurare CSpay pentru semestrul de


toamnă, 2008 7

8 Anexa 2: Exemplu de fişier ini de configurare folosit de


CSpay 12

1
1 Introducere şi motivaţie
CSpay este un program care urmăreşte automatizarea procesului de plata cu
ora ı̂n Universitatea Politehnică din Bucureşti. În prezent, mecanismul este
următorul: persoana plătită cu ora completează o foaie de calcul (spread-
sheet) ı̂n fiecare lună, pe care ı̂l trimite la secretariatul facultăţii de care este
plătită. Acest proces este foarte migălos şi consumator de timp, drept pentru
care propunem CSpay ca alternativă viabilă.
La prima vedere, scopul CSpay este acela de a automatiza plata cu
ora prin generarea automată a foilor de calcul după care secretariatele ţin
evidenţa. După ce Răzvan Deaconescu ne-a propus acest proiect, am realizat
că, pentru noi, studenţii implicaţi, ı̂nseamnă mult mai mult decât atât.
Din punctul de vedere al proaspătului student al Facultăţii de Automatică
şi Calculatoare, CSpay este primul contact cu mecanismele şi uneltele folosite
ı̂ntr-un proiect sofware open-source.
În prima etapă, am stabilit ı̂ntâlniri săptămânale cu ı̂ntreaga echipă şi am
gândit ı̂ndeaproape arhitectura aplicaţiei. Aici am ı̂nvăţat cât de importante
sunt unitatea echipei şi o atmosferă relaxată. De asemenea, am ı̂nvăţat să
luăm ı̂n calcul părerile celorlaţi, pentru că membrii echipei aveau arii de
interes diferite: programare web, programare low-level, etc.
Am instalat şi folosit pentru dezvoltarea CSpay unelte ca Subversion,
MediaWiki, Doxygen şi GNU Mailman. Am ı̂nvăţat despre netiquette atunci
când lucrăm ı̂ntr-o echipă şi ne-am motivat unii pe ceilalţi atunci când cineva
pierdea pe moment interesul.

2 Arhitectura aplicaţiei
Gândirea arhitecturii CSpay a fost un mic, dar foarte interesant, exerciţiu de
echilibru ı̂ntre flexibilitate şi simplitate. Pe de o parte, am dorit ca aplicaţia
să poată fi folosită ı̂n ı̂ntreaga Universitate folosind un singur fişier de confi-
gurare. Pe de altă parte, am evitat folosirea unei baze de date pentru a nu
ı̂ncărca serverul gazdă foarte mult.
În cele din urmă, am stabilit că aplicaţia foloseşte un fişier de configurare
XML. Acesta conţine informaţii despre semestrul curent (date de ı̂nceput
şi sfârşit, vacanţe, zile libere) şi despre facultăţi şi catedre. Pentru citirea
acestui fişier folosim libxml1 .
Interfaţa web a CSpay completează un fişier .ini cu detaliile asistentului
ı̂n cauză şi apelează funcţiile bibliotecii libcspay. Aceasta face prelucrările
necesare, filtrează zilele care trebuiesc incluse ı̂n foaia de calcul şi aşează
1
http://xmlsoft.org/

2
datele corespunzător, după care apelează funcţiile bibliotecii libspreadconv,
care generează efectiv fişierele ı̂n format ODF sau XLS.
Fişierele .ini au fost alese ı̂n detrimentul celor XML pentru simplitatea
la parsare şi pentru overhead-ul ceva mai mic pe care ı̂l implică. De mare
ajutor ne-a fost biblioteca iniparser2 .

3 Interfaţa cu utilizatorul
CSpay a fost gândit iniţial ca având mai multe tipuri de interfaţă: una web,
o interfaţă grafică, şi una ı̂n linie de comandă. Ultimele două erau offline şi
aveau nevoie de un fişier de configurare care trebuia descărcat de pe Internet.
O analiză mai atentă a dezvăluit utilitatea limitată a ultimelor două va-
riante de interfaţă; majoritatea utilizatorilor au posibilitatea de a accesa
pagina interfeţei web a CSpay pentru câteva minute, pentru a completa for-
mularul şi a descărca foile de calcul generate. Mai mult, accesul exclusiv
online la program ne-ar permite ı̂n viitor să centralizăm statistici de interes
pentru Rectorat ori pentru decanatele şi secretariatele facultăţilor.
Pentru interfaţa web am ales combinaţia PHP–JavaScript, la ı̂ndemnul
colegilor noştri, Alex Eftimie şi Mihai Dumitrache, care au şi scris codul
pentru ea. Deşi aceste două unelte sunt omniprezente şi colegii noştri erau fini
cunoscători, problema a fost proiectarea unei interfeţe simple şi funcţionale,
minimale chiar, care să nu şocheze cu nimic. Rezultatul este curat, intuitiv
şi ortogonal, prezentat ı̂n Figura 1.
Din punctul de vedere al integrării cu aplicaţia, interfaţa web comunică
cu libcspay prin intermediul fişierelor .ini. După generarea foilor de calcul,
un script al interfeţei serveşte fişierele utlizatorului.

4 Biblioteca libcspay
Această bibliotecă este practic nucleul ı̂ntregii aplicaţii. Ea manipulează atât
fişiere XML cât şi ini şi se situează ı̂ntre interfaţa cu utilizatorul şi biblioteca
de nivel inferior libspreadconv.
libcspay abstractizează configurarea ı̂n structuri mai uşor de manipulat
şi le foloseşte pentru a determina zilele lucrătoare. Tot aici se ţin totalurile
orelor ţinute ı̂n varii funcţii.
După calculul zilelor lucrătoare, acestea sunt trecute ı̂ntr-o structură de
tip spreadconv data şi trimise libspreadconv.
Tipurile de date expuse de bibliotecă sunt următoarele:
2
http://ndevilla.free.fr/iniparser/

3
Figura 1: Interfaţa web

• interval – un interval de timp, folosit pentru a reprezenta semestre şi


vacanţe;

• department – o catedră dintr-o facultate; numele ei, ı̂mpreună cu nu-


mele şefului de catedră;

• faculty – o facultate, ı̂mpreună cu toate catedrele, numele complet, şi


un nume prescurtat;

• cspay config – reţine o configurare completă, citită din fişierul glo-


bal de configurare. Include informaţii despre numele universităţii, fa-
cultăţilor, catedrelor, şi şefilor de catedră, de asemenea despre durata
semestrului şi zilele libere;

• cspay file list – o listă de fişiere, folosită pentru a transmite numele


fişierelor generate interfeţei cu utilizatorul.

5 Biblioteca libspreadconv
libspreadconv ţinteşte a fi o bibliotecă de uz general pentru generarea foilor
de calcul simple ı̂n diverse formate. Pentru acest motiv, proiectarea ei a fost

4
discutată ı̂ndelung. Până ı̂n acest moment, biblioteca implementează prea
puţin din standardele ODS şi XLS ca să fi fost publicată, dar este suficient
de funcţională şi de stabilă pentru a fi folosită ı̂n CSpay.
Ceea ce am ı̂ncercat să construim este un tip de date suficient de generic
pentru a putea fi folosit la generarea unor foi de calcul de diferite feluri.
Acesta este structura spreadconv data, care reţine informaţii atât despre
celulele foii de calcul, cât şi despre stilul aplicat lor. Iniţial, această structură
a fost gândită pentru Open Document Spreadsheets, dar a fost portată cu
succes şi pentru formatul XLS.
Structurile de date expuse de libspreadconv sunt următoarele:
• spreadconv rc style – un stil corespunzător unei linii sau unei co-
loane. Momentan conţine doar dimensiunea rândului sau coloanei;
• spreadconv cell style – un stil corespunzător unei celule. Include
suport pentru aliniere orizontală şi verticală a textului ı̂n celulă şi pen-
tru dimensiunile bordurilor;
• spreadconv cell – o celulă dintr-o foaie de calcul; conţine textul şi
tipul valorii celulei, dar şi un câmp care arată stilul celulei;
• spreadconv data – structura care unifică toate celelalte tipuri de date
şi reprezintă o ı̂ntreagă foaie de calcul.

5.1 Modulul ODS


ODS este o specificaţie deschisă, un standard ISO, deci am crezut că imple-
mentarea ei va fi facilă. În realitate, ne-am lovit de un document de-a dreptul
intimidant, o specificaţie de peste 800 de pagini. Deşi numai aproximativ 200
vizau direct foile de calcul, numeroasele referinţe din text au rezultat ı̂n mul-
tiple parcurgeri ale textului până la a hotărı̂ ce funcţionalitate vom include.
A parcurge un standard şi a ı̂l implementa a fost ceva complet nou pentru
noi; pornind de la un document stufos, am restrâns funcţionalitatea pe care
urma să o implementăm la strictul necesar, apoi am modelat o structură
pe acest şablon, după care am implementat efectiv funcţiile de generare.
Depanarea acestor funcţii a fost extrem de dificilă, pentru că, deşi standardul
este deschis, nu există unelte pentru a inspecta şi corecta sursele XML ale
documentelor.

5.2 Modulul XLS


Apărut mai târziu ı̂n planuri, modulul de generare a fişierelor Office XLS
a avut o cu totul altă evoluţie. Acest format este practic nedocumentat,

5
cu excepţia unei tentative publice firave de reverse engineering. Între lipsa
noastră de experienţă şi procentul mic din funcţii acoperit de această tenta-
tivă, am căutat o soluţie diferită.
Soluţia a venit din partea pyExcelerator3 , o bibliotecă Python pentru
generarea şi manipularea fişierelor XLS. Deşi incomplet, suportul pe care ı̂l
oferă pyExcelerator este suficient pentru stadiul actual al libspreadconv.
Neputând să apelăm funcţii Python din C (invers este posibil), am ales
o variantă uşor ezoterică: libspreadconv generează un script Python care
generează o foaie de calcul XLS cu informaţia specificată. Scriptul este rulat,
rezultând foaia de calcul dorită.

6 CSpay 2.0
Varianta actuală a CSpay este suficient de stabilă pentru a putea fi folosită
de către persoanele plătite cu ora ı̂n UPB. De la ı̂nceperea proiectului, am
deschis şi un tracker integrat ı̂n Trac4 pentru inevitabilele bug-uri.
Dar viziunea legată de automatizarea procesului birocratic merge mai
departe de atât. Încă de la ı̂nceput, unul dintre scopurile CSpay a fost să
ı̂nvăţăm să facem pachete pentru diferite distribuţii de Linux. În grupul mai
larg din care facem parte (Rosedu5 ) sunt utilizatori Gentoo, Debian, SuSE
şi Ubuntu. A distribui şi instala automat o asemenea aplicaţie este oarecum
diferit, deoarece are atât o componentă web, cât şi una offline.
O altă direcţie ı̂n care sperăm să extindem aplicaţia este aceea a secu-
rităţii; dacă ı̂ncepem să lucrăm cu baze de date, vom dori să evităm SQL
injection, şi vom ı̂ncerca să facem un sistem de protecţie la spam ceva mai
inteligent decât un simplu CAPTCHA. Eventual, am putea ı̂ncerca să creăm
un sistem de sesiuni, poate chiar bazat pe LDAP.
Un ţel mai ambiţios ar fi schimbarea ı̂n ı̂ntregime a sistemului. Astfel,
formularele completate de asistenţi ar actualiza o bază de date, din care s-ar
putea genera foi de calcul mult mai elaborate. De exemplu, atât titularul de
curs, cât şi decanatul, ar putea şti ı̂n orice moment starea orelor ţinute la un
anumit curs.
Documentelor generate le-am putea adăuga un nou format, anume XLSX.
Acesta este deschis şi bazat pe XML, deci nu am mai avea nevoie de unelte
externe.
3
http://sourceforge.net/projects/pyexcelerator
4
http://trac.edgewall.org/
5
http://www.rosedu.org/

6
6.1 Sistemul de plugin-uri
Probabil cel mai ambiţios dintre ţeluri este acela al unui sistem de plugin-
uri. Am putea defini o interfaţă cu care o bibliotecă dinamică (shared object)
interacţionează cu CSpay la nivelul libcspay. Astfel, o funcţie primeşte
starea completă a instanţei de CSpay care este rulată şi actualizează unele
date.
Plugin-urile ar putea fi oricât de variate. Câteva exemple includ:
• Generarea automată de statistici. Dacă facultatea sau Rectoratul doreşte
să cunoască detalii despre fondurile şi numărul de persoane implicate
ı̂n proces, este suficientă o tranzacţie cu baza de date CSpay.

• Trimiterea fişierelor prin email secretariatelor. Dacă asistentul este


mulţumit de fişierele generate, poate opta pentru trimiterea lor către
secretariat prin email. Pentru a preveni mesajele nedorite, am putea
folosi soluţia LDAP amintită mai sus.

• Opţiunea de trimitere de feedback dezvoltatorilor. Poate include email,


link direct la Trac, sau un alt mecanism propriu.

7 Anexa 1: Fişier de configurare CSpay pen-


tru semestrul de toamnă, 2008
În cele ce urmează, este dat fişierul de configurare al CSpay pentru semes-
trul de toamnă, 2008. Formatarea defectuoasă este datorată suportului slab
pentru linii lungi şi pentru Unicode al pachetului de LATEX folosit.
<?xml version=” 1 . 0 ” e n c o d i n g=”UTF−8” ?>
<cspay−c o n f i g>
<!−− i n f o r m a t i i l e v i n d i n
h t t p : //www. pub . ro /romana/ f a c u l t a t i / i n d e x . html −−>
<u n i v e r s i t a t e nume=” U n i v e r s i t a t e a P o l i t e h n i c a
B u c u r e s t i ”>
<!−− A t e n t i e , f i s i e r u l e s t e v a l a b i l
doar un s e m e s t r u−−>
<s e m e s t r u nume=” Semestru 1”
d a t a s t a r t=” 0 1 . 1 0 . 2 0 0 7 ”
d a t a s f a r s i t=” 1 9 . 0 1 . 2 0 0 8 ” />
<v a c a n t e>
<!−− Vacanta de i a r n a −−>
<vacanta d a t a s t a r t=” 2 2 . 1 2 . 2 0 0 7 ”

7
d a t a e n d=” 0 7 . 0 1 . 2 0 0 8 ” />
</ v a c a n t e>
< f a c u l t a t i>
<f a c u l t a t e nume=” I n g i n e r i e E l e c t r i c a ”
nume scurt=”IE ” decan=” Mihai I o r d a c h e ”>
<c a t e d r a nume=” Masuri , a p a r a t e e l c t r i c e
s i c o n v e r t o a r e s t a t i c e ” s e f=” F l o r i n
I o n e s c u ” />
<c a t e d r a nume=” E l e c t r o t e h n i c a ”
s e f=” F l o r i n H a n t i l a ”/>
<c a t e d r a nume=” Masini , m a t e r i a l e s i
a c t i o n a r i e l e c t r i c e ” s e f=” Mircea
Covrig ”/>
</ f a c u l t a t e>
<f a c u l t a t e nume=” E n e r g e t i c a ” nume scurt=”ENERG”
decan=” G a b r i e l B a z a c l i u ”>
<c a t e d r a nume=” Producerea s i u t i l i z a r e a
e n e r g i e i ” s e f=” George D a r i e ”/>
<c a t e d r a nume=” S i s t e m e
e l e c t r o e n e r g e t i c e ” s e f=” Mircea Eremia ”/>
<c a t e d r a nume=” H i d r a u l i c a , m a s i n i
h i d r a u l i c e s i i n g i n e r i a mediului ”
s e f=”Eugen C o n s t a n t i n I s b a s o i u ”/>
</ f a c u l t a t e>
<f a c u l t a t e nume=” Automatica s i C a l c u l a t o a r e ”
nume scurt=”A&amp ;C” decan=” Dumitru Popescu ”>
<c a t e d r a nume=” C a l c u l a t o a r e ”
s e f=” N i c o l a e Tapus” />
<c a t e d r a nume=” Automatica s i I n f o r m a t i c a
I n d u s t r i a l a ” s e f=” Traian I o n e s c u ” />
<c a t e d r a nume=” Automatica s i I n g i n e r i a
S i s t e m e l o r ” s e f=” Ioan Dumitrache ” />
</ f a c u l t a t e>
<f a c u l t a t e nume=” E l e c t r o n i c a , T e l e c o m u n i c a t i i s i
T e h n o l o g i a I n f o r m a t i e i ” nume scurt=”ETTI”
decan=” Teodor P e t r e s c u ”>
<c a t e d r a nume=” T e l e c o m u n i c a t i i ”
s e f=” S i l v i u C i o c h i n a ” />
<c a t e d r a nume=” D i s p o z i t i v e , a p a r a t e s i
c i r c u i t e e l e c t r o n i c e ” s e f=” Adrian Rusu”
/>

8
<c a t e d r a nume=” T e h n o l o g i e e l e c t r o n i c a s i
f i a b i l i t a t e ” s e f=” Ovidiu Iancu ” />
<c a t e d r a nume=” E l e c t r o n i c a a p l i c a t a s i
i n g i n e r i a i n f o r m a t i e i ” s e f=”Dan
S t o i c h e s c u ” />
</ f a c u l t a t e>
<f a c u l t a t e nume=” I n g i n e r i e Mecanica s i
M e c a t ro n i c a ” nume scurt=”IMM” decan=” Ioan
Voica ”>
<c a t e d r a nume=” Mecanica f i n a ”
s e f=” N i c o l a e A l e x a n d r e s c u ”/>
<c a t e d r a nume=” Termotehnica , m a s i n i
termice s i i n s t a l a t i i f r i g o r i f i c e ”
s e f=” Mircea Marinescu ”/>
<c a t e d r a nume=” Echipament termomecanic ,
c l a s i c s i n u c l e a r ” s e f=” Lucian
Mihaescu ”/>
<c a t e d r a nume=” Motoare cu a r d e r e
i n t e r n a ” s e f=” C o n s t a n t i n Pana”/>
<c a t e d r a nume=” Organe de m a s i n i s i
t r i b o l o g i e ” s e f=” Mircea P a s c o v i c i ”/>
<c a t e d r a nume=” Echipamente de p r o c e s ”
s e f=” V a l e r i u J i n e s c u ”/>
</ f a c u l t a t e>
<f a c u l t a t e nume=” I n g i n e r i a s i Managementul
S i s t e m e l o r T e h n o l o g i c e ” nume scurt=”IMST”
decan=” C o n s t a n t i n Minciu ”>
<c a t e d r a nume=” T e h n o l o g i a c o n s t r u c t i i l o r
de m a s i n i ” s e f=” A u r e l i a n V l a s e ”/>
<c a t e d r a nume=” T e h n o l o g i a m a t e r i a l e l o r
s i sudura ” s e f=” Gerghe Amza”/>
<c a t e d r a nume=” R e z i s t e n t a m a t e r i a l e l o r ”
s e f=” C o s t i c a Atanasiu ”/>
<c a t e d r a nume=” T e o r i a mecanismelor s i a
r o b o t i l o r ” s e f=” I o s i f Tempea”/>
<c a t e d r a nume=” Masini s i s i s t e m e de
p r o d u c t i e ” s e f=” C o n s t a n t i n I s p a s ”/>
</ f a c u l t a t e>
<f a c u l t a t e nume=” I n g i n e r i a s i s t e m e l o r
b i o t e h n i c e ” nume scurt=”ISB” decan=” Ioan
Paunescu ”>

9
<c a t e d r a nume=” Mecanica ” s e f=” Ion
C o n s t a n t i n ”/>
<c a t e d r a nume=” S i s t e m e b i o t e h n i c e ”
s e f=” L a d i s l a u David ”/>
</ f a c u l t a t e>
<f a c u l t a t e nume=” T r a n s p o r t u r i ” nume scurt=”TRAN”
decan=” C o r n e l i u M i h a i l A l e x a n d r e s c u ”>
<c a t e d r a nume=” T r a n s p o r t u r i , t r a f i c s i
l o g i s t i c a ” s e f=” Mihaela Popa”/>
<c a t e d r a nume=” A u t o v e h i c u l e r u t i e r e ”
s e f=” C r i s t i a n Andreescu ”/>
<c a t e d r a nume=” Telecomenzi s i
e l e c t r o n i c a in transporturi ”
s e f=” Decebal Nanu F a r i n i ”/>
<c a t e d r a nume=” M a t e r i a l r u l a t de c a l e
f e r a t a ” s e f=” Ioan Sebesan ”/>
</ f a c u l t a t e>
<f a c u l t a t e nume=” I n g i n e r i e A e r o s p a t i a l a ”
nume scurt=”AERO” decan=” S t e l i a n G a l e t u s e ”>
<c a t e d r a nume=” Geometrie d e s c r i p t i v a s i
g r a f i c a i n g i n e r e a s c a ” s e f=” I o n e s
Simion ”/>
<c a t e d r a nume=” S t i i n t e a e r o s p a t i a l e
\&quot ; E l i e C a r a f o l i \&quot ; ”
s e f=” C o r n e l i u Berbente ”/>
<c a t e d r a nume=” I n g i n e r i a s i s t e m e l o r
a e r o n a u t i c e &quot ; N i c o l a e T i p e i&quot ; ”
s e f=” Adrian M i h a i l S t o i c a ”/>
</ f a c u l t a t e>
<f a c u l t a t e nume=” S t i i n t a s i I n g i n e r i a
M a t e r i a l e l o r ” nume scurt=”SIM” decan=”Rami
Saban ”>
<c a t e d r a nume=” I n g i n e r i a s i managementul
e l e b o r a r i i materialelor metalice ”
s e f=” P e t r e Moldovan”/>
<c a t e d r a nume=” S t i i n t a m a t e r i a l e l o r s i
m e t a l u r g i e f i z i c a ” s e f=” Georgeta
Cosmeleata ”/>
<c a t e d r a nume=” P r o c e s a r e a m a t e r i a l e l o r
s i e c o m e t a l u r g i e ” s e f=” I u l i a n Riposan ”/>
</ f a c u l t a t e>

10
<f a c u l t a t e nume=” Chimie A p l i c a t a s i S t i i n t a
M a t e r i a l e l o r ” nume scurt=”CHIM” decan=” Horia
Iovu ”>
<c a t e d r a nume=”Chmie o r g a n i c a ”
s e f=” Luminita P a r v u l e s c u ”/>
<c a t e d r a nume=” T e h n o l o g i a s u b s t a n t e l o r
anorganice s i p r o t e c t i a mediului ”
s e f=” I o n e l C o n s t a n t i n e s c u ”/>
<c a t e d r a nume=” I n g i n e r i e c h i m i c a ”
s e f=” G r i g o r e Bogza ”/>
<c a t e d r a nume=” S t i i n t a s i i n g i n e r i a
m a t e r i o l e l o r o x i d i c e ” s e f=” D o r e l Radu”/>
<c a t e d r a nume=” Chimie f i z i c a s i
e l e c t r o c h i m i e ” s e f=”Dan Geana”/>
<c a t e d r a nume=” Chimie g e n e r a l a ”
s e f=” Ioana Demetrescu ”/>
<c a t e d r a nume=” T e h n o l o g i a s u b s t a n t e l o r
organice s i compusilor macromoleculari ”
s e f=” Ioan C a l i n e s c u ”/>
<c a t e d r a nume=” I n g i n e r i e economica ”
s e f=” C o r n e l i e V i c t o r Radu”/>
<c a t e d r a nume=”Chmie a n o r g a n i c a ”
s e f=” C o r n e l i a Guran”/>
<c a t e d r a nume=” Chimie a n a l i t i c a s i
a n a l i z a i n s t r u m e n t a l a ” s e f=”Ana Maria
Josceanu ”/>
</ f a c u l t a t e>
<f a c u l t a t e nume=” I n g i n e r i e i n Limbi S t r a i n e ”
nume scurt=”FILS” decan=” Adrian Pascu ”>
<c a t e d r a nume=” I n g i n e r i e i n l i m b i
s t r a i n e ” s e f=” Adrian Pascu ”/>
<c a t e d r a nume=”UNESCO” s e f=” A u r e l i a n
Leca ”/>
<c a t e d r a nume=” Comunicare i n l i m b i
moderne ” s e f=”Dana Urs ”/>
</ f a c u l t a t e>
<f a c u l t a t e nume=” S t i i n t e A p l i c a t e ”
nume scurt=”FSA” decan=” C o n s t a n t i n U d r i s t e ”>
<c a t e d r a nume=” F i z i c a I ” s e f=” Gheorghe
Cata−D a n i l ”/>
<c a t e d r a nume=” F i z i c a I I ” s e f=” Paul

11
S t e r i a n ”/>
<c a t e d r a nume=” Matematica I ”
s e f=” V a l e r i u P r e p e l i t a ”/>
<c a t e d r a nume=” Matematica I I ”
s e f=” Gheorghe Oprisan ”/>
<c a t e d r a nume=” Matematica I I I ”
s e f=” Mariana Craiu ”/>
</ f a c u l t a t e>
</ f a c u l t a t i>
</ u n i v e r s i t a t e>
</ cspay−c o n f i g>

8 Anexa 2: Exemplu de fişier ini de configu-


rare folosit de CSpay
În cele ce urmează, este dat un exemplu de fişier ini pe care CSpay ı̂l foloseşte
pentru a comunica ı̂ntre interfaţa web şi libcspay. Din nou, limitările pa-
chetului folosit pentru reprezentarea surselor sunt vizibile.

[antet]
nume = Razvan Deaconescu
intocmit = Razvan Deaconescu
universitate = Universitatea Politehnică Bucureşti
facultate = Facultatea de Automatică şi Calculatoare
nume_curs = USO_curs
titular = Razvan Rughinis
decan = Dumitru Popescu
sef_catedra = Nicolae Tapus
catedra = Calculatoare
luna = 8, 9, 0
tip_fisier = xls, ods

[ore/1]
facultate = AC ; facultate
disciplina = USO ; disciplina aferenta (abreviere e suficient)
rol = 2 ; 0 = as, 1 = conf, 2 = sl, 3 = prof
numar_post = 36 ; numarul de post asociat cu rolul
tip_post = 0 ; 0 = curs, 1 = aplicatii
grupa = 1CC ; seria sau grupa la care se tine cursul/aplicatia

12
zi = 1 ; 1 = luni, 2 = marti, etc.
ore = 16-18 ; interval orar
paritate = 1 ; ???
paritate_start = 1 ; ???

[ore/2]
zi = 1 ; 1 = luni, 2 = marti, etc.
facultate = AC ; facultate
disciplina = RC ; disciplina aferenta (abreviere e suficient)
rol = 0 ; 0 = as, 1 = conf, 2 = sl, 3 = prof
numar_post = 89 ; numarul de post asociat cu rolul
tip_post = 1 ; 0 = curs, 1 = aplicatii
grupa = 342CBa ; seria sau grupa la care se tine cursul/aplicatia
ore = 08-10 ; interval orar
paritate = 1 ; ???
paritate_start = 1 ; ???

[ore/3]
zi = 3 ; 1 = luni, 2 = marti, etc.
facultate = AC ; facultate
disciplina = USO ; disciplina aferenta (abreviere e suficient)
rol = 0 ; 0 = as, 1 = conf, 2 = sl, 3 = prof
numar_post = 87 ; numarul de post asociat cu rolul
tip_post = 1 ; 0 = curs, 1 = aplicatii
grupa = 311CAb ; seria sau grupa la care se tine cursul/aplicatia
ore = 16-18 ; interval orar
paritate = 1 ; ???
paritate_start = 1 ; ???

[ore/4]
zi = 3 ; 1 = luni, 2 = marti, etc.
facultate = AC ; facultate
disciplina = USO ; disciplina aferenta (abreviere e suficient)
rol = 0 ; 0 = as, 1 = conf, 2 = sl, 3 = prof
numar_post = 87 ; numarul de post asociat cu rolul
tip_post = 1 ; 0 = curs, 1 = aplicatii
grupa = 312CAa ; seria sau grupa la care se tine cursul/aplicatia
ore = 08-10 ; interval orar
paritate = 1 ; ???
paritate_start = 1 ; ???

13
[ore/5]
zi = 3 ; 1 = luni, 2 = marti, etc.
facultate = AC ; facultate
disciplina = USO ; disciplina aferenta (abreviere e suficient)
rol = 0 ; 0 = as, 1 = conf, 2 = sl, 3 = prof
numar_post = 87 ; numarul de post asociat cu rolul
tip_post = 1 ; 0 = curs, 1 = aplicatii
grupa = 312CAb ; seria sau grupa la care se tine cursul/aplicatia
ore = 14-16 ; interval orar
paritate = 1 ; ???
paritate_start = 1 ; ???

[ore/6]
zi = 3 ; 1 = luni, 2 = marti, etc.
facultate = AC ; facultate
disciplina = USO ; disciplina aferenta (abreviere e suficient)
rol = 0 ; 0 = as, 1 = conf, 2 = sl, 3 = prof
numar_post = tx3 ; numarul de post asociat cu rolul
tip_post = 1 ; 0 = curs, 1 = aplicatii
grupa = 315CAa ; seria sau grupa la care se tine cursul/aplicatia
ore = 12-14 ; interval orar
paritate = 1 ; ???
paritate_start = 1 ; ???

[ore/7]
zi = 3 ; 1 = luni, 2 = marti, etc.
facultate = AC ; facultate
disciplina = USO ; disciplina aferenta (abreviere e suficient)
rol = 0 ; 0 = as, 1 = conf, 2 = sl, 3 = prof
numar_post = tx3 ; numarul de post asociat cu rolul
tip_post = 1 ; 0 = curs, 1 = aplicatii
grupa = 315CAb ; seria sau grupa la care se tine cursul/aplicatia
ore = 18-20 ; interval orar
paritate = 1 ; ???
paritate_start = 1 ; ???

[ore/8]
zi = 4 ; 1 = luni, 2 = marti, etc.
facultate = AC ; facultate
disciplina = USO ; disciplina aferenta (abreviere e suficient)
rol = 0 ; 0 = as, 1 = conf, 2 = sl, 3 = prof

14
numar_post = 106 ; numarul de post asociat cu rolul
tip_post = 1 ; 0 = curs, 1 = aplicatii
grupa = 314CAa ; seria sau grupa la care se tine cursul/aplicatia
ore = 08-10 ; interval orar
paritate = 1 ; ???
paritate_start = 1 ; ???

[ore/9]
zi = 5 ; 1 = luni, 2 = marti, etc.
facultate = AC ; facultate
disciplina = USO ; disciplina aferenta (abreviere e suficient)
rol = 0 ; 0 = as, 1 = conf, 2 = sl, 3 = prof
numar_post = 106 ; numarul de post asociat cu rolul
tip_post = 1 ; 0 = curs, 1 = aplicatii
grupa = 313CAa ; seria sau grupa la care se tine cursul/aplicatia
ore = 08-10 ; interval orar
paritate = 1 ; ???
paritate_start = 1 ; ???

[ore/10]
zi = 5 ; 1 = luni, 2 = marti, etc.
facultate = AC ; facultate
disciplina = USO ; disciplina aferenta (abreviere e suficient)
rol = 0 ; 0 = as, 1 = conf, 2 = sl, 3 = prof
numar_post = 106 ; numarul de post asociat cu rolul
tip_post = 1 ; 0 = curs, 1 = aplicatii
grupa = 313CAb ; seria sau grupa la care se tine cursul/aplicatia
ore = 10-12 ; interval orar
paritate = 1 ; ???
paritate_start = 1 ; ???

15

S-ar putea să vă placă și