Elaborarea Unui Asistent Electronic Public
CUPRINS
INTRODUCERE 5
1. FORMULAREA PROBLEMEI DE CREAREA A AEP 7
2. INSTRUMENTARE SI APLICAȚII PENTRU CREAREA AEP 9
2.1 Tehnologii si limbaje server 9
2.1.1 PHP 10
2.1.2 Active Server Pages 11
2.1.3 Perl 12
2.1.4 Cold Fusion 12
2.1.5 Java Server Pages 13
2.1.6 Java Servlets 14
2.2. Sistemurile de gestiune a BD 15
2.2.1 Oracle 15
2.2.2 Postgres 16
2.2.3 MySQL 17
2.3 Web-servere 18
2.3.1 Internet Information Server 19
2.3.2 Apache 20
2.4 Alegerea instrumentarelor pentru realizarea proiectului 21
3. FUNDAMENTELE PROGRAMĂRII CGI ÎN LIMBAJUL PERL 22
3.1 Protocolul HTTP 22
3.1.1 Directive cerere 22
3.1.2 Directive răspuns 24
3.2 Interfața CGI 25
3.2.1 Schimbul de informații 26
3.2.2 Variabilele de mediu CGI 26
3.2.3 Metode de transmitere a datelor 29
3.2.4 Răspunsul dat de script 30
3.2.5 Decodarea argumentelor CGI 31
3.3 Descrierea mediului de programarea Perl 32
3.3.1 Descrierea generala 32
3.3.2 Interfața Perl cu SGBD MySQL 33
4. CONCEPTUL AEP 36
4.1 Destinația si facilitațile AEP 36
4.2 Schema funcțională 37
4.3 Cerințele către resurse hardware si software 39
4.4 Web-server Apache si configurarea lui 39
5. PROIECTAREA DE DETALIU 41
5.1 Crearea bazei de date 41
5.2 Utilizarea programului 45
5.2.1 Calendarul 46
5.2.2 Complectarea formelor 47
5.2.3 Carnetul de adrese 48
5.2.4 Referințe preferate 48
5.2.5 Carnetul de notițe 49
5.2.5 Informația personala 49
6. ESTIMAREA ECONOMICĂ A PROIECTULUI 50
7. PROTECȚIA MUNCII 61
CONCLUZIE 69
BIBLIOGRAFIE 70
ANEXE 71
Anexa 1 Graful rețea la estimarea economică 71
Anexa 2 Codul sursă al programului secretary.pl 72
Anexa 3 Codul sursă al programului service.pl 85
Anexa 4 Bloc schema a programului secretary.pl 88
Anexa 5 Interacțiune programului cu SGBD 89
Anexa 6 Interacțiune client-server la executare programului CGI 90
Anexa 7 Interfața AEP 91
Anexa 8 Bloc schema a programului service.pl 92
=== DIPLOM ===
INTRODUCERE
Organizarea cît mai efecientă a datelor si informației existente a devenit o necesitate stringentă datorită creșterii volumui si complexitații acestora. Orice utilizator are informația personală importantă care trebuie sa fie organizată și accesată rapid.
Până la apariția calculatoarelor pentru păstrarea si organizarea ei se folosea suport de hîrtie sau era angajat un om special în acest scop (asistent). Aceasta concepție de organizare aducea la cheltuieli organizatorice esențiale si deseori nu era comodă. Cu apariția calculatoarelor păstrarea datelor a devenit mai ușoară, datorită faptului ca informația se păstrează in forma digitală. Insă la prima etapa de dezvoltare înca nu existau aplicații ce erau destinate să organizeze datele personale ale utilizatorului (era costisitor sa folosești un calculator mainframe pentru funcțiile ce le putea executa un om). Aceste aplicații au apărut numai după creșterea brusca a numărului de calculatoare personale si a măriri cerințelor utilizatorilor către produsele software .
La ora actuală există mai multe aplicații pentru păstrarea datelor personale ale utilizatorului la calculator, așa numitele asistente electronice (organizere) sau calendare care stochează și organizează fluxul de informație ce revine la o persoană. In componența lor intra o mare gama de servicii orientate la ajutorarea utilizatorului în activitatea zilnică (calendare, notițe, carnet de adrese etc.). Mulți utilizatori folosesc aceste programe permanent si au trecut aproape complet de la suport de hîrtie la ele. Dar acest soft are un neajuns important – el lucrează pe calculatorul utilizatorului și pentru accesul la informația păstrată avem nevoie să avem acces la acest calculator. Însă de multe ori informația păstrată în aceste asistente electronice este necesară cînd nu putem să accesăm acest calculator anumit. Astfel de cazuri sînt foarte frecvente în viața omului contemporan.
Complexitatea accesului informației păstrate a adus la schimbarea concepției de organizare a datelor. În ultimele ani a apărut tendința de a muta atributele obișnuite ale utilizatorilor in rețea: sisteme de operare, aplicațiile, cutii poștale sau chiar discurile logice. Adică informația necesară este păstrată intr-un loc și poate fi accesată de mai mulți utilizatori concomitent. Aplicația server ce dirijează fluxul de date se află permanent în stare de așteptare și răspunde la cerințele utilizatorilor în orice timp și poate fi accesată de pe orice calculator conectat la rețea. Pentru accesul la date deseori se folosesc aplicații ce sunt prezente pe fiecare calculator – exploratoare web.
Avantajele unei asfel de organizării sunt evidente:
redistribuirea si păstrarea resurselor utilizatorilor,
aplicația poate fi accesată de pe orice calculator conectat la rețea,
informație poate fi obținută in orice moment de timp.
Un caz mai general este conectarea serverului la rețeaua Internet. Dacă serverul unde este păstrata informația este conectat la Internet, putem sa accesăm informația de pe orice loc al globului pământesc.
Asistentul electronic public face parte din acest rînd de aplicații și vine să ajute utilizatorului în viața lui de toate zile.
Asistentul electronic public prezintă un serviciul public care permite utilizatorilor să folosească online aceleași facilități ca și aplicațiile pentru organizarea datelor personale offline și anume – calendarul zilnic, carnetul de adrese, carnetul de notițe si etc. Toate acestea sînt accesibile 24 ore pe zi, 265 zile în an.
Teza dată este destinată creării unui asistent electronic care include următoarele servicii publice: calendarul zilnic cu posibilitatea de păstrare a evinementelor, păstrare a notițelor și a datelor personale și de organizare a referințelor preferate. Datele asistentului electronic pot fi accesate repede de pe orice calculator. Programul este instalat pe server și permite organizarea, păstrarea, modificarea datelor prin interfața exploratorului web. Paginele lui sînt ușoare și pot fi încărcate prin rețea cu canalul îngust de comunicare (este des cazul cînd utilizatorii se conectează la rețea prin dial-up). În afară de aceasta AEP are interfața utilizatorului ușoară de ințeles și repede de însușit.
În lucrarea prezentată sunt stabilite cerințele către aplicațiile destinate pentru organizarea informației personale a utilizatorilor și sunt cercetate instrumentarele folosite la crearea web-aplicațiilor. Dintr-un număr mare de tehnologii și aplicații folosite la crearea web-aplicațiilor sunt alese: Perl, Apache și MySQL. Sunt explicate fundamentele programarii CGI, protocolului HTTP și a limbajului de programare Perl cunoașterea cărora este necesara la elaborarea AEP. O mare parte a lucrarii este dedicată descrierii conceptului creării AEP și realizarii nemijlocite a proectului.
1. FORMULAREA PROBLEMEI DE CREARE A AEP
Nu există încă un consens deplin în ceea ce privește definirea asistentului electronic. Diferiți oameni, diferite companii sau grupuri oferă variante ușor diferite pentru definirea a ceea ce se înțelege prin asistente electronice. Deși există o serie de facilitați , dezvoltarea rapidă a domeniului face dificila o evoluție corespunzătoare a standardizării. Se pot considera ca fiind aspecte importante pentru organizarea datelor următoarele elemente si cerințele care trebuie se înaintează către asistentul electronic:
securitatea datelor – informația pastrată poate fi de gradul înalt de confedențialitatea și accesul la ea a persoanelor străine poate aduce mari prejudicii. Asistentul electronic trebuie să ofere mecanismele de autentificare și controlul accesului pentru utilizatori. Procedurile de control al accesului și de securitate trebuie să asigure posibilitatea administrării drepturilor acordate utilizatorilor și să ofere accesul la datele care sînt permise pentru el. Cel mai des accesul este limitat prin existența numelui utilizatorului si a parolei.
posibilitatea de acces online de la orice stație a rețelei
asigurarea performanței, scalabilitații si robusteții aplicației – la creșterea volumului de date și a numărulului de utilizatori aplicație trebuie să funcționeze în regim normal, fără greșeli și pierderi de informație. Pentru aceasta la elaborarea aplicației trebuie să ne folosim de instrumente software care economisesc resursele.
prezența unei interfețe clare, consistente și grafice – utilizatorul care folosește aplicația poate fi și un om neexperementat în domeniul calculatoarelor. Dar aplicația este destinată pentru utilizator de orice nivel ( fiecare om are datele ce trebuie să fie organizate ) și interfața grea va fi o piedică pentru el.
păstrarea datelor intr-un loc – accesul la date va fi dirijat de un soft special instalat pe server. Este evidentă folosirea SGBD de tip client/server, care ie pe seama sa probleme principale: păstrarea fizică, accesul autorizat, convertirea datelor etc.
organizarea datelor asemănătoare uneltelor folosite de utilizator în viața – modul de folosire a mijloacelor virtuale nu trebuie să deosibească mult de folosirea celor reale ( carnetelor, zilnicelor, calendarelor etc.). Utilizatorul este deja obișnuit să folosească un mijloc anumit și trecerea la modul de organizare pe calculator nu trebuie sa fie compusă.
posibilitatea de a păstra și a organiza evinementele și mesajele zilnice – adică este nevoie de existența unui organaizer zilnic care este organizat ca un calendar.
posibilitatea de a trimite mesajele de alert si rememorarea pentru evinemente ce vor avea loc in viitor – este frecvent cazul cînd utilizatorul uită de careva evinemente și aceasta va aduce prejudiciu simțitoare materiale și morale ( de exemplu neachitarea la timp a unei plați, uitarea de o aniversarea sau intîlnirea etc. ).
posibilitatea de a exporta / importa datele in alte formate – deseori utilizatorul are mai multe aplicatii ce organizeaza datele si atunci apare necesitatea de a trece informația de la un program la altul pentru ca utilizatorul sa nu introducă aceleași date de mai multe ori. Aceasta se organizeaza prin folosirea a unui format de date intermediar ( CSV, XML etc. ) si e necesar ca programul sa sustina aceste formate.
existenta unui carnet de contacte – omul contemporan are de memorat un număr destul de mare a informației de contact : telefon, adrese, adrese e-mail, etc. a mai multor adresati. Organizarea lor are loc după prima litera a adresatului.
posibilitatea de configurare – trebuie să permitem utilizatorului configurarea unor parametre ce privesc modul de prezentarea datelor: interfata, datele ce depind de regionul.
economisirea resurselor – cu una și aceeași aplicația pot lucra concomitent mai mulți utilizatori iar funcționarea programului pate fi pe sisteme cu resurse restrinse in ceea ce privește volumul memoriei și frecvența procesorului.
Asistentul electronic public ce este conectat la rețea trebuie sa corespunda acelorași cerințe expuse mai sus insa la crearea lui trebuie sa atragem o atenție mai mare la cerința de securitate, deoarece datele sînt expuse public si accesul ilegal la ele poate fi obținut mai ușor.
2. INSTRUMENTARE SI APLICAȚII PENTRU CREAREA AEP
Asistentul electronic este o aplicație de tip client-server cu pastrarea datelor pe un calculator central (serverul ). Interfața utilizator ( client ) va fi afișată prin browser, ce este o tendința moderna la crearea aplicațiilor client. Folosirea browserului este comoda prin faptul ca acesta aplicație este prezenta pe majoritatea calculatoarelor si nu trebuie să fie instalată și configurată prealabil.
La calculator central va rula web-serverul care va primi cererile utilizatorilor si va trimite la executare scripturile aplicației. Web serverul la timpul actual este o aplicație care este prezenta pe majoritea serverilor la organizații și întreprinderi. Punerea in funcțiune a programului nu va cere cheltuieli suplimentare .
Asistentul electronic este o aplicație ce lucrează intensiv cu datele ce se păstrează pe server, informatie ce trebuie fi prezentata trebuie sa fie actuala si modificarea lor trebuie sa fie rapidă si dinamică. Limbajul HTML nu are astfel de facilitați, cu ajutorul lui putem să prezintăm informatie statică si el nu permite a accesa dinamic datele. Pe partea serverului este nevoie de a folosi programele scrise intru-un limbaj de programarea. Web-serverul va trimite datele către programul nostru prin interfața CGI, iar aplicația va răspunde prin ieșirea standartă OUTPUT. Din mulțime de limbaje de programarea vom alege limbajul care este mai comod la crearea programelor CGI.
Pentru crearea asistentului electronic sînt necesare instrumente si aplicațiile de acces la BD. Cel mai bine corespunde pentru scopurile noastre SGBD-ul după modelul client-server . Scripturile aplicației vor fi clienți, iar SGBD-ul va lua funcțiile de păstrarea si organizarea datelor, accesarea lor rapida, securitatea lor și etc. In așa fel noi ne eliberăm de o partea colosală a lucrului cu date și ne putem concentra la funcțiile nemijlocite asistentului . Este nevoie de a folosi un SGBD care va acorda facilitați destule pentru aplicația noastră si nu va cheltui multe resurse.
2.1 Tehnologii și limbaje server
Construcția paginilor web dinamice este foarte folositoare si comoda din mai multe motive si poate fi aplicata in următoarele cazuri :
pagina web este bazata pe datele pe care le trimite utilizatorul, de exemplu rezultatele de pe paginile generate de motoarele de căutare sunt generate in acest fel, si același lucru se întâmpla cu paginile unui site de comerț electronic.
datele se schimba in mod frecvent, de exemplu, un raport despre vreme sau știrile zilnice
paginile web folosesc informații din baze de date mari sau altfel de asemenea surse, de exemplu construirea unei pagini web al unui magazin on-line in care se afiseaza lista curenta de preturi si catalogul de produse.
Pentru aceasta este nevoie de folosit o tehnologie, care ar lucra pe partea server si ar genera codul HTML dynamic. Atunci cind este nevoie sa realizam pagini dinamice, ne confruntam cu următoarea problema- care dintre tehnologiile disponibile pe piața ar fi cea mai potrivita. Exista mai multe tehnologii server, mai jos sînt prezentate cele mai raspindite.
2.1.1 PHP
Cu ajutorul PHP se pot crea pagini de WEB dinamice, care sînt generate in momentul in care programul utilizator a formulat cererea câtre serverul web.
Este o așa numita sursa deschisa (open source), realizata si permanent imbunatatita de comunitatea dezvoltatorilor de aplicații web, la fel ca si baza de date cu care lucrează in mod preferențial (MySQL). Un număr din ce in ce mai mare de site-uri utilizează tehnologia PHP.
PHP este un limbaj de "scripting" utilizat in fișierele HTML. Sintaxa PHP este o combinație intre limbajele C, Java si Perl. Scopul limbajului este de a permite programatorilor WEB sa scrie rapid pagini ce se generează dynamic si este un limbaj specializat pentru scopul acesta. Serverul de WEB trebuie sa abia activat suportul pentru PHP. Toate fișierele care au extensia .php3 trebuie sa fie rulate de către motorul PHP.
Fișierele se creează in aceeași maniera ca si fișierele HTML. Fiecare tag PHP începe cu <? php , se continua cu propoziția PHP si se închide in partea dreapta cu ?> . Intr-un fișier HTML pot exista un număr nelimitat de tag-uri PHP.
Prin intermediul PHP3 se pot accesa Microsoft SQL Server si baze de date Microsoft Access cu ajutorul ODBC. Una dintre cele mai importante caracteristici este "database integration layer". Scrierea paginilor WEB cu acces la baze de date este foarte ușor datorita PHP3.
Următoarele SGBD-uri pot fi utilizate împreuna cu PHP3: Oracle, Sybase, mSQL, MySQL, Informix, dBase, ODBC, PostgreSQL.
Avantaje
cu ajutorul scripturilor php se poate integra o mare varietate de baze de date (de la MySQL la Oracle).
este o tehnologie extrem de flexibila si dedicata utilizatorului: permite modificarea si extinderea codurilor cu mare usurinta
lucrează cu o mare varietate de sisteme de operare; rulează in egala măsura pe servere web Windows NT si UNIX.
este complet gratuita.
comunitate de dezoltatori php care creste de la o zi la alta este gata sa ofere oricind suport tehnic.
Dezavantaje
Fiecare baza de date cu care lucrează PHP-ul necesita un set de comenzi mai mult sau puțin diferite. Spre exemplu, o aplicație construita pentru a integra MySQL necesita schimbarea completa a fiecărei linii de script pentru înlocuirea bazei de date cu Oracle.
Totuși tandemul PHP/MySQL este extrem de raspindit si aproape orice furnizor de web hosting (indiferent ca serverul este UNIX sau NT) oferă suport pentru acest tip de aplicații.
2.1.2 Active Server Pages
ASP este un instrument de dezvoltare a aplicațiilor web utilizat de un mare număr de dezvoltatori. Principalul motiv pentru care atit de mulți aleg tehnologia ASP este ca este gratuita si este de asemenea inclusa in Internet Information Server (IIS) care rulează pe Windows NT. Automat furnizorii de web hosting care oferă pachete NT, oferă si suport pentru aplicații ASP, fara taxe suplimentare. Toate fișiere care conțin codul ASP trebuie sa abia extensia *.asp. Fișierul cu aceasta extensia este interpretat mai intii de motorul ASP si in rezultat este obținut HTML cod generat dynamic.
Codul se include cu tegul <% %>. Intr-un fișier HTML pot exista un număr nelimitat de tag-uri ASP. Programarea se face in limbaje JavaScript, VBScript.
Avantaje
limbajul de programare in ASP se bazează pe VBScript, astfel incit programatorii in VisualBasic se adaptează ușor. Pentru mai mare usurinta scripturile ASP pot fi realizate si cu vesiunea Microsoft de Javascript (JScript).
ASP include un set de instrumente pentru integrarea bazelor de date COM (connection, RecordSet, query etc.)
intra gratuit in componenta web serverului Internet Information Server
accesul la diferite SGBD prin ODBC, ADO
administrarea simpla prin interfața grafica
Dezavantaje
nu este o platforma de dezvoltare de aplicații web completa. Nu include servicii de tip FTP, LDAP sau HTTP.
nu rulează decit pe servere de web hosting Windows NT. Serverele UNIX nu oferă suport pentru aplicații ASP.
2.1.3 Perl
Limbajul Perl a fost gindit inițial pentru crearea rapoartelor si prelucrării șirurilor de caractere de aici si denumirea lui – Perl (Practical Extraction and Report Language).
Totodată, Perl are un mecanism foarte eficient de căutare si înlocuire într-un text după un model . Aceasta facilitatea a lui e folosita des in Web , unde exista masive imense de date de tip șir. Este inclusa posibilitatea programării in obiecte, ce incurajeasa programatorii pentru scrierea aplicațiilor mari.
Poate fi considerat ca un venerabil stramos al tuturor intrumentelor de dezvoltare web. Chiar daca au apărut o mulțime de tehnologii noi, Perl continua sa abia un rol important in cadrul unui număr mare de site-uri web.
Avantaje.
exista o imensa biblioteca de resurse disponibila pe internet care cuprinde o mare varietate de scripturi.
procedurele de lucrul flexibile cu șiruri de caractere
este gratuit si este inclus des in componenta softului pe server
rulează pe diferite platforme ( Unix, Windows, MacOS etc. )
Dezavantaje
Perl nu a fost proiectat inițial pentru aplicații Web si principalul sau inconvenient este ca nu se integrează ca alte instrumente similare in sursa HTML a paginii web.
2.1.4 ColdFusion
O platforma completa de dezvoltare de aplicații web: limbaj de programare, server de aplicații, mediu de dezvoltare. Nu este o sursa deschisa, deci nu este gratuita. Studiile de piața indica faptul ca este cel mai bine vindut server de aplicații web cu plata, in competiție cu Microsoft Activeserver Pages (asp), Sun Java Server Pages (jsp), Perl, Php.
Avantaje
simplitate, pentru majoritatea dezvoltatorilor care stapinesc limbajul HTML, ColdFusion este ușor de invatat, fiind un limbaj intuitiv. Tagurile specifice sunt "cfset" si "cfoutput". Variabilele se încadrează cu semnul "#". Limbajul de programare este CFML (ColdFusion Markup Lamguages) iar extensiile paginilor sunt "cfm".
oferă acces la baze de date, inclusiv proceduri de înregistrare si tranzactionare
include protocoale de retea: LDAP, POP3, SMTP, HTTP si FTP
permite includerea unor taguri specifice scrise in C++, Java sau Delphi
exista o mare comunitate de dezvoltatori care utilizează ColdFusion, extrem de activa in grupurile de discuții si in cadrul secțiunii de forum din site-ul Allaire.
Dezavantaje
rulează pe platforma Windows NT. Serverele de web hosting pe platforme UNIX, de regula nu oferă suport pentru dezvoltarea de aplicații ColdFusion.
pot exista probleme de securitate in situația in care serverul nu este bine configurat
nu este gratuita
2.1.5 Java Server Pages
Java Server Pages (JSP) este o tehnologie care permite îmbinarea de HTML static cu HTML generat dynamic. JSP poate fi considerat echivalentul Java al ASP. Lucrează cu un set de obiecte similar (request, response, application etc.) si este scris utilizind Java. Oferă dezvoltatorului întreaga paleta a capacitatilor Java. Totuși este un limbaj de programare mai dificil decit cele enumerate mai sus si accesibil mai ales programatorilor care lucrează cu Java. De aceea aplicațiile realizate in tehnologie JSP sunt mai rar intilnite pe web.. Serverul de WEB trebuie sa abia activat suportul pentru JSP. Toate fișierele care au extensia *.jsp trebuie sa fie rulate de către motorul JSP.
Fișierele se creează in aceeași maniera ca si fișierele HTML. Fiecare tag JSP începe cu <% , se continua cu codul si se închide in partea dreapta cu %> .
Avantajele
in primul rând, partea dinamica este scrisa in Java, nu in Visual Basic sau alt limbaj specific Microsoft, deci este mai puternic si mai ușor de folosit
este tehnologie gratuita
este portabil pe diferite platforme web server datorita limbajului care sta la baza.
JSP este mult mai flexibil la modificările decit un servlet Java
Dezavantaje
la baza sta limbajul Java care este considerat mai complicat decit limbaje scripturale
tehnologia JSP este mai lenta
2.1.6 Java Servlets
Servleturile sunt un răspuns Java la programarea CGI. Sunt programe scrise in Java care rulează pe un server Web si care construiesc pagini Web dinamice.
Avantajele limbajului din punctul de vedere al dezvoltării de aplicații server sunt оn esența aceleași care оl fac o soluție buna si pe partea client, doar proporția lor fiind diferita. Potabilitatea, principalul atu al limbajului, este importanta si о n cazul aplicațiilor server, dar poate ca оntr-o măsura mai mica decвt оn cazul aplicațiilor client, de genul apleturilor. Pentru un aplet portabilitatea este de o importanta majora, fiind necesar ca același program sa ruleze pe orice calculator de pe Internet. In cazul aplicațiilor server, daca un program poate rula fara modificări pe UNIX si pe Windows NT, оnseamna o dublare a pieței fara a fi necesara schimbarea nici unei linii de cod. Bineоnteles ca oricine va alege o soluție portabila fata de una mai puțin portabila, iar Java cistiga clar la acest capitol de fiecare data.
Aplicațiile server trebuie de obicei sa ruleze mai multe zile, poate chiar luni de zile, fara оntrerupere, iar apariția unor probleme cu memoria, poate cauza probleme serioase. Оn Java, erori de acest tip nu au cum sa apara, programatorul nu trebuie sa se ocupe de gestiunea memoriei, deci problema pur si simplu dispare.
Avantaje
eficienta in fata tradiționalul CGI, un nou proces este pornit la fiecare cerere HTTP. Daca programul CGI face relativ repede o operație, punctul de pornire al procesului poate domina timpul de execuție. Cu servleturi, Mașina Virtuala Java ramine in memorie si fiecare cerere este satisfăcuta de un fir de execuție Java si nu de un proces al sistemului de operare. Similar, in tradiționalul CGI, daca sunt N cereri simultane către același CGI, atunci codul pentru programul CGI este încărcat in memorie de N ori. Cu servleturi, sunt N fire de execuție, dar o singura copie a clasei servletului. Servleturile au mai multe alternative decât programele CGI pentru optimizări cum ar fi păstrarea calculelor anterioare, menținerea deschisa a conexiunii către o baza de date, si altele asemenea.
convenabil. In afara de faptul ca e convenabil sa utilizezi un limbaj familiar, servleturile au o infrastructura expandabila pentru parsarea si decodarea formularelor HTML, citirea si setarea headerelor HTTP, lucrul cu cookies, urmărirea sesiunilor(tracking sessions) si multe altele.
puternic- servleturile Java iti permit sa efectuezi o mulțime de lucruri care sunt dificile sau imposibile cu obisnutul CGI. Un simplu exemplu : servleturile pot sa dialogheze direct cu serverul Web (programele CGI obișnuite nu pot). Asta simplifica operațiile de încărcare a imaginilor sau a altor date stocate in locuri standard. Servleturile pot sa isi partajeze datele unul altuia, cum ar fi conexiunile la baza de date.
portabilitatea- servleturile sunt scrise in Java si urmăresc API-ul sau bine standardizat. De asemenea, servleturile scrise, sa zicem pentru Apache functioneaza virtual neschimbat si pe Netscape server, Microsoft IIS etc. Servleturile sunt suportate direct sau printr-un plugin pe oricare server Web important.
cost redus, sunt un număr de servere web gratuite sau cu costuri mici pentru uzul pe site-urile personale sau de trafic mediu.
Dezavantaje
la baza sta limbajul Java care este considerat mai complicat decit limbaje scripturale
tehnologia Java servlet este mai lenta
nu este atit de flexibila la modificari
2.2 Sisteme de gestiune a BD
2.2.1 Oracle
Oracle Server este recomandat instituțiilor sau organizațiilor mari cu un număr mare de utilizatori , cu un volum de date mediu (de ordinul sutelor GB) și cu aplicații care nu efectuează tranzacții în regim intens (organizațiilor de tip workgroup).
Este un SGBD obiectual-relațional puternic care oferă aproape toate facilitatile pentru gestionarea datelor nefiind necesare cunoștințe avansate de administrare pentru instalarea și întreținerea acestuia în funcționare. Procedura de instalare este intuitivă și oferă tot ceea ce este necesar pentru a avea un server Oracle funcțional și preconfigurat pentru a funcționa șa parametrii optimi.
Performanțe înalte pentru procesarea tranzacțiilor – pentru procesarea tranzacțiilor cu performanțe ridicate, arhitectura multithreaded și multiserver a lui Oracle coordonează mii de cereri simultane ale utilizatorilor.
Acces deschis (standard) la date. Oracle8 oferă un acces deschis printr-o varietate de standarde la date. Acestea includ ODBC, Oracle Objects for OLE, JDBC ca și driverele native Oracle.
Cerințe hardware și software
48 MB RAM
200 MB spațiu pe hard disk (Windows NT, Netware, OS2)
275 MB spațiu pe hard disk (UNIX)
Rețea Net8 TCP/IP, IPX/SPX, Named Pipes, DECNet, DCE, NDS, LU6.2
Oracle8 este complet portabil pe mai mult de 80 de platforme hardware și software distincte, incluzând peste 40 de sisteme de operare UNIX, VMS, MVS, VM, HP MPE/XL, Siemens, ICL, Novell Netware, OS/2 și Windows NT.
Avantajele
administrarea sistemului avansata ( set de instrumente de administrare grafice ,agenți inteligenți pentru administrarea de la distanță )
securitatea performanta datelor
scalabilitate superioară pentru a suporta un număr mare de utilizatori și volume mari de tranzacții. Procesoare și/sau noduri adiționale (într-o arhitectură cluster) pot fi adăugate pentru extinderea incrementală a configurației pe măsură ce atât organizația cât și volumul de date crește, conducând la îmbunătățiri dramatice de performanță.
optimizarea interogărilor
Dezavantajele
are cerințe mari fata de resursele serverului
2.1.2 Postgres
SGBD Postgres este prezentat drept "cel mai performant sistem de gestiune, de baze de date, gratuit disponibil pe Internet",si se adresează celor care au nevoie de produs software gratuit de calitate în domeniul SGBD.
Sistemul de gestiune de baze de date Postgres poate fi definit ca fiind: relațional, foarte extensibil, cu orientare obiectuală si este construit conform unui model client/server .
Sunt incluse facilitățile majore ale modelului relațional clasic, precum cereri declara tive în SQL, optimizarea interogării, controlul concurent, tranzacții, suport multiutilizator. PostgreSQL este compatibil cu standardele ISO SQL, ANSI SQL/98, SQL/92 și ANSI SQL/89 etc
Extensibilitatea (ca posibilitate a utilizatorului de a defini arbitrar operatori, tipuri, funcții și metode de acces) este asigurată printr-un mecanism tipic sistemelor relaționale: un ansamblul de cataloage.
Postgres include, o serie de produse destinate administrării acestui tip de baze de date și facilitării dezvoltării de aplicații. Aceste produse s-au acumulat în timp, prin aportul mai multor specialiști din toată lumea
Se oferă interfețe de programare din C , C++, Perl ,PHP, Java și soluția de imbricare SQL – "embedded SQL" (apelurile SQL, într-o sintaxă specifică, sunt integrate în aplicația scrisă în C care, înainte de a fi compilată, este prelucrată de preprocesorul ecpg). S-a dezvoltat driver ODBC si JDBC pentru PostgreSQL. S-au scris clase Java dedicate facilitării accesării Postgres. Prin disponibilitate (posibilitatea de a obține gratuit produsul, documentația, utilitare de dezvoltare aferente) și prin facilitățile oferite, Postgres poate fi util oricărui programator dispus să facă mici eforturi suplimentare pentru a dezvolta, fără achiziționare de software, aplicații viabile. Unele facilități specifice (posibilitatea de a-și modifica modul de operare "din mers", în urma extensiilor utilizator, posibilitatea existenței unor atribute non-atomice ale unei relații, elementele de orientare obiect) impun Postgres ca un instrument deosebit de adecvat pentru constituirea rapidă de prototipuri în dezvoltarea de noi aplicații și structuri de date (care pot fi de o mare complexitate).
Avantajele
este mai ușoara decit Oracle
este SGBD gratuit cu texte surse publice
are documentația buna si complete
unele facilitați a SGBD orientate pe obiecte
Dezavantajele
necesita resurse mai mult decit MySQL
2.1.3 MySQL
MySQL poate fi denumit ca un SGBD de clasa mijlocie intre SGBD de model client/server. MySQL este un SGBD scalabil, rapid si gratuit, cu caracteristici foarte potrivite pentru multe dintre aplicațiile care folosesc suportul de baze de date pentru WWW. El n-are astfel de multe facilitați cum are Oracle , dar el nu necesita atit de multe resurse si este cel mai potrivit pentru aplicații de greutate mijlocie.
MySQL este un server de baze de date SQL, multi-user si multi-threaded si este o implementare client/server ce consta intr-un "demon server" multe programe client, precum si biblioteci. Se oferă interfețe de programare din C , Perl ,PHP.
Avantajele principale ale MySQL sînt: viteza, robustețea si usurinta in utilizare. Firma care a creat MySQL il utilizează din 1996 intr-un mediu cu peste 40 de baze de date continind 40.000 de tabele, din care peste 500 au mai mult de 7 milioane de rinduri.
Caracteristici importante MySQL : lucrează pe platforme diferite, un sistem de privilegii si parole foarte sigur si flexibil, care permite verificarea la nivelul mașinii gazda ( toate parolele pentru conectarea la baza de date sînt codificate ), ODBC draiver pentru Windows95 (cu sursa), toate funcțiile ODBC 2.5, un sistem de alocare a memoriei foarte rapid bazat pe thread-uri, si multe altele
MySQL operează in baza unui model client/server. Orice mașina care dorește sa proceseze interogări asupra unei baze de date MySQL trebuie sa ruleze MySQL server (mysqld), care este responsabil de tot traficul de tip incoming/outgoing cu baza de date. Ca orice alt server, mysqld ‘asculta’ pe un port particular (3306) eventualele cereri de conexiune ale unui ‘client’ – orice aplicație care trimite cereri către o baza de date mysqld. Acest client poate fi un simplu script in Perl care (prin modulului DBI) poate trimite o cerere către ‘database’ prin intermediul serverului MySQL sau chiar clientul ‘command-line’ mysql. Clientul mysql este o interfața interactiva pentru trimiterea de comenzi către server.
Avantajele
este gratuit cu texte publice
intra in marea majoritatea distributivelor Unix
nu necesita multe resurse hard
Dezavantajele
nu are documentația bine structurata
2.3 Web-servere
Exista multe serverele web care pot fi rulate pe diferite platforme: Windows, MacOS, Unix etc. Pina nu demult marea majoritatea lor rula sub SO Unix. Odată cu creșterea sensibilă a numărului de calculatoare personale, dotate cu sisteme de tip Windows (95, NT), conectate în Internet, producătorii de software și-au îndreptat atenția spre acest domeniu. Astfel, portarea unor aplicații de succes din lumea UNIX sau crearea de programe echivalente direct pentru platformele Windows a devenit un fapt obișnuit.
Din larga ofertă de produse am ales pentru analiza doua web servere cel mai des folosite pe platformele lor.
2.3.1 Internet Information Server
Sistemul de operare Windows 2000 Server include in web serverul – Internet Information Services ( IIS ). Performantele IIS sunt un rezultat direct al felului in care IIS incorporează caracteristici sale in sistem de operare Windows . IIS este construit pe caracteristicile si capabilitatile necesare funcționarii siturilor Web
Exista o serie de caracteristici care fac IIS sa fie sigur si performant. Caracteristica sigura de "restart" a IIS permite unui administrator sa re-pornească serviciile Web fara sa fie nevoie de o repornire a calculatorului. Pentru a imbunatatii siguranța, Application Protection furnizează posibilitatea de a rula aplicațiile separat de serviciile Web.
IIS permite utilizarea unui mecanism de securitate: Secure Sockets Layer (SSL). Acesta este un protocol ce se interpune între HTTP și TCP/IP, asigurând tranzacțiile sigure (de regulă, prin criptare) între clienți și server.
Instalat și configurat corect, IIS asigură funcționarea fără probleme a celor trei servicii mai sus amintite. Acestea sunt lansate automat la pornirea serverului NT, urmând ca oprirea sau pornirea lor ulterioara să se facă din aplicația Internet Server Manager. Pentru serviciul FTP, cu aplicația mai înainte amintită, pot fi vizualizate conexiunile active.
Dacă serverul NT utilizează pentru monitorizarea rețelei protocolul Simple Network Management Protocol (SNMP), acesta poate fi utilizat și pentru monitorizarea serviciilor WWW, FTP și Gopher din IIS. Fișierele de tip login sunt utile pentru a vizualiza activitatea în timp a serverului Internet. Pot fi obținute informații despre utilizatorii ce s-au conectat la server: numele utilizatorului, adresa IP a mașinii de pe care s-a conectat acesta, timpul de conectare, fișierele accesate/vehiculate etc.
IIS este ușor de instalat si de intretinut. O serie de caracteristici suporta aceasta caracteristica, proces de instalare simplificat, task wizard-uri pentru securitate, capacitatea de a înregistra timpul necesar proceselor, o administrare de la distanta mult mai flexibila si posibilitatea de a crea mesaje de eroare personalizate.
Pentru dezvoltatorii de aplicații, performanta sitului Web poate fi imbunatatita prin procesarea Microsoft Active Server Pages (ASP), auto-reglarea ASP si obiectele ASP cu performante mărite. Dezvoltatorii vor descoperi ca IIS mediul serverului de dezvoltare a aplicațiilor prin utilizarea noilor tehnologii incluse in Windows Server. Aceste noi tehnologii includ Active Director si un Component Object Model (COM+) mărit.
Avantajele
SO Windows NT si versiuni ulterioare includ IIS in componenta sa
este inclus motorul Active Server Pages (ASP)
ușor de administrat
Dezavantajele
mecanizmul de securitatea nu este perfect
SO Windows platforma pentru IIS nu este gratuit si nu este stabil
2.3.2 Apache HTTP Server 1.3
Web Serverul Apache este un produs al Apache Group, și serverul este distribuit sub formă de "copyrighted freeware", utilizatorul având la dispoziție, pe lângă varianta binară, executabilă, și toate sursele produsului. Produsul vine cu un program de instalare foarte direct, care are grijă și de efectuarea setărilor minime pentru ca serverul să poată rula.
Documentația buna pusă la dispoziție este foarte explicită și detalii de folosire se găsesc chiar în fișierele ce trebuiesc modificate.
Popularitatea Apache-ului se datorează (conform specialiștilor) in buna măsura firmei C2 Software Inc., cea care se ocupa de partea de securitate a serverului si tehnologiei avansate ce este inclusa in acest produs. Apache, ce a pornit ca un set de patch-uri ale serverului NCSA, a fost unul dintre primele ce a implementat protocolul HTTP 1.1.
Un alt motiv pentru care Apache este atât de larg adoptat este faptul ca este absolut gratuit. Pe Internet sunt disponibile atât variante precompilate, cat si sursele complete, utilizatorii putându-le modifica pentru a răspunde cat mai bine la propriile cerințe.
Configurarea se poate face la distanță și este făcută foarte elegant și ușor de folosit prin intermediul unei secțiuni protejată prin parolă. Accesul la secțiunea de administrare poate fi restricționat la anumite adrese de IP. Serviciul FTP nu oferă artificiile puse la dispoziție de WebSite, dar asigură un serviciu robust și sigur.
Prin simplitatea utilizării și configurării, precum și prin unele facilități deloc de neglijat, cum ar fi Watcher Demon, care monitorizează activitatea serverului detectând o eventuală oprire neprevăzută, este un server demn de luat în seamă.
Avantajele
Este server gratuit
Apache este considerat clasic pentru Unix platformă
Securitatea avansata
Dezavantajele
Administrarea mai complicata decit la IIS
2.4 Alegerea instrumentarelor pentru realizarea AEP
Analiza efectuată în pp. 2.1-2.3 arată la opotunitatea folosirii pentru crearea AEP a serverului Apache, limbajului Perl și SGBD MySQL. Soluția cea mai ușor de folosit pentru server (și cea mai ieftină) este Apache. Gestiunea unui site propriu sau chiar paginile mai multor utilizatori, configurarea avansată, gratuitatea lui face oportună folosirea acestuia. Acesta oferă un control riguros asupra activității serverului și este produs considerat clasic pentru platformă Unix.
Acest pachet este gratis si oferă tot ce-și poate dori un creator de pagini de web moderne, necesitând însă și ceva resurse suplimentare în ceea ce privește cerințele de sistem.
Din SGBD descrise mai sus este cel mai bine de utililizat serverul MySQL care este cel mai comod pentru aplicații mijlocii ( defapt asistentul electronic este o aplicație mijlocie după mărime ) si are versiunea sub Unix ( FreeBSD ). Este un SGBD care are facilitați destule pentru aplicația noastrăre și economiselște în același timp resursele utilizate de el. In afara de ceasta el este oferit pe gratis si necesita cheltuieli suplimentare.
Limbajul Perl este un limbaj clasic pentru CGI programarea si este susținut de toți provaiderii hostingului sub SO Unix. El ne oferă toate facilitatile necesare pentru aceasta si trecerea de la alte limbaje nu este complicata
In așa fel noi am ales instrumintariul soft in total gratis ce ne evita de la cheltuieli suplimentare materiale si ne oferă capacitatile si facilitatilti bune si destule pentru programul AEP.
3. FUNDAMENTELE PROGRAMĂRII CGI ÎN LIMBAJUL PERL
3.1 Protocolul HTTP
HTTP este protocolul care sta la baza World Wide Web, si limbajul in care comunica web serverele si browserele.
Orice comunicare in HTTP se petrece sub forma de cerere-răspuns, ceea ce ne permite sa ne referim la comunicare ca la o discuție. O aplicație client trimite cereri către aplicația webserver, la care acesta da replica prin răspunsuri.
Limbajul HTTP este in format text, cu toate ca o transmisie poate conține si informație binara. O aplicație webserver asculta pe un port si asteapta conexiuni. Este folosit de obicei portul 80. La detectarea unei cereri creează un proces-copie a sa, care începe sa discute cu clientul. Programele-client, pe de alta parte, initiaza conexiuni cu un server pe un anumit port, unde știu ca asculta o aplicație webserver. Daca aceasta intr-adevăr se afla acolo, încep sa discute cu ea.
Transmisiile constau din comenzi si parametri HTTP, sub forma de linii de text, sau pârti de informație.
Orice transmisie conține obligatoriu, in aceasta ordine:
linie text reprezentind tipul cererii, sau statutul răspunsului, in funcție de tipul transmisiei (cerere/raspuns)
multiple linii de text numite directive, constituind comenzi si parametri HTTP
linie libera, care anunța sfirsitul directivelor
pârti de informație, fie binara fie text
O transmisie poate fi alcătuita exclusiv din directive, sau poate conține o parte de informație, numit entitate. Prezenta unei entitati in transmisie înseamnă de obicei ca o seama de directive speciale sînt si ele prezente, oferind informații despre acea entitate.
Directivele pot fi directive cerere, directive răspuns, directive entitate, sau directive cache. O directiva se compune dintr-o comanda urmata de parametri separați prin virgule sau punct si virgula.
3.1.1 Directive cerere
Linia de debut a cererii
Este prima linie trimisa întotdeauna de un program client către server. Este formata astfel: Metoda URL-resursa Versiune-HTTP
GET /index.html HTTP/1.1
Nu este permisa impartirea acestei directive pe mai multe linii, ca in cazul celorlalte directive.
Metoda
Descrie tipul cererii, care poate fi OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT:
GET: Cere o resursa (oricare ar fi tipul sau) de la server.
HEAD: Identic cu GET, insa serverul răspunde doar cu directivele, fara sa trimită si o entitate. Metoda este folosita pentru a verifica disponibilitatea unei resurse fara a transfera efectiv acea resursa.
POST: Cere ca serverul sa accepte entitatea inclusa in cerere. Daca serverul
URL-resursa
Indica o resursa pe server, mai precis un fișier indicat fie in forma absoluta http://www.server.dom/cale/fisier fie in forma relativa (/cale/fisier).
Versiune-HTTP
Este de forma HTTP/V.v, unde V este versiunea majora, iar v versiunea minora. In mod curent HTTP a ajuns la versiunea 1.1, dar si 1.0 sau 0.9. sînt versiuni valide. Omisiunea versiunii face serverul sa asume automat versiunea 0.9 (sau cel puțin așa se recomanda).
Practic, majoritatea serverelor aflate in funcțiune sînt versiuni mai vechi sau care se conforma mai puțin standardului, prin urmare atunci cind nu suntem siguri, probabilitatea cea mai mare de reușita o avem folosind HTTP 1.0 pentru comunicare.
Host
Aceasta directiva identifica serverul căruia i se adresează cererea. Aceasta identificare e folosit cu un server DNS si poate fi un nume sau un IP. De menționat ca NU se precizează protocolul (ceea ce ar fi redundant), ci doar serverul: Host: http://www.server.com e greșit, Host: www.server.com e corect. Prezenta unei directive Host este obligatorie intr-o cerere.
User-Agent
Identifica programul client (browser). Browserele isi furnizează in acest mod numele, versiunea si sistemul de operare. Alte amănunte sînt furnizate ocazional, cum ar fi cazul in care un browser este o varianta intr-o anumita limba a unui browser original.
Referer
Programul client specifica astfel documentul de la care a obținut legătura spre cererea curenta. Acest cimp nu va fi specificat daca utilizatorul a introdus URL-ul de la tastatura sau in alt mod. Cimpul apare NUMAI daca utilizatorul a urmat o legătura prezenta intr-un document.
3.2.2 Directive răspuns
Linia de debut a răspunsului
Este prima linie trimisa de server in cadrul răspunsului. Este de forma: Versiune-HTTP Cod-statut Fraza-motiv. Nu se permite impartirea acestei directive pe mai multe linii.
Cod-statut si Fraza-motiv
Cod-statut este un cod numeric de trei cifre, reprezentind situația cererii, iar Fraza-motiv este un text care oferă o scurta explicație in legătura cu acel cod.
Prima cifra a codului reprezintă clasa răspunsului:
1xx: Informațional – cererea a fost primita, procesarea continua
2xx: Succes – acțiunea a fost primita, inteleasa, si acceptata
3xx: Redirectare – acțiuni suplimentare sînt necesare pentru procesarea completa a cererii
4xx: Eroare client – cererea conține greșeli, sau cererea nu poate fi satisfăcuta
5xx: Eroare server – cererea era valida, dar serverul nu a reușit sa o satisfacă
Perechile cod principale implementate de HTTP/1.1:
200 OK
401 Unauthorized
403 Forbidden
404 Not Found
500 Internal Server Error
Orice alte perechi de cod-explicație pot fi folosite de server, atita timp cit codul nu exista deja, iar clasa ramine 1-5. Programul client nu trebuie sa inteleaga toate codurile posibile, ci este obligat sa inteleaga si sa reacționeze doar la clasa lor.
Location
Anunța redirectarea cererii spre o alta resursa, identificata printr-un URI.
Server
Conține informații despre programul-server. Este similar cu User-Agent, si va conține in mod uzual denumirea programului, versiunea, sistemul de operare, si eventual amânunte suplimentare.
3.2 Interfața CGI
CGI este descrierea prescurtata de la denumirea Common GateWay Interface si si descrie partea web-serverului care poate sa interactioneze cu alte programe care se executa pe acest server, si in acest sens este o punte (gateway) intre programe executate pe server așa ca SGBD, tabele electronice si programe client (browser).CGI definește un mediu în care orice proces este rulat de către serverul de Web. Un proces rulat de server poate fi scris în orice limbaj de programare. Programe CGI este mai ușor să le scriem în limbaje interpretate, numite "limbaje de scripting" (unul dintre ei si Perl ). Interfața CGI redirectează datele de intrare către un proces rulat de server și interceptează datele de ieșire ale acestuia.
In linii generale shema de lucru a CGI e alcătuita din următoarele elemente
Primirea de către web servere informației de la programa-client. Pentru transmitea datelor de la client in limbajul HTML exista noțiune de forme. Forma este introdusa in pagina web cu ajutorul tegului <FORM> </FORM> si este compusa din cimpurile ,care in browser se afiseasa ca elemnetle de control : cimpuri text, radio butoane, chakbox etc.
Analiza si prelucrarea informației primite . datele extrase din HTML sînt se transmit la CGI-programa. Datele nu întotdeauna sînt prelucrate nemijlocit numai de programa CGI, ci pot retransmite la rindul sau câtre alta programa ( de exemplu interogarea către o baza dde date, pecareo CGI programa nu poate citi. In acest caz programa CGI formează interogarea cu ajutorul oricărui limbaj de programarea, care are mijloace de intershimb a informației cu alte programe. In sistemul Unix cel mai des este folosit limbajul Perl, iar SO Unix este socotit ca cel mai raspindit ca web-platforma , se poate de spus ca Perl este cel mai raspindit limbaj pentru CGI programarea. Programe in Perl prezintă o succesiune de operatori care sînt executate unul după altul de către interpritatorul Perl fara a transforma codul sursa in cod executabil binar. Din aceasta cauza CGI programe se mai numesc CGI –scenarii , sau SGI sripturi.
Crearea unui nou HTML document si trimiterea lui la brouser . după prelucrarea informației programa creaza un HTML dynamic ( cum se mai spune si virtual ) si il tranmite la web server prin input. Web-server la rindul sau transmite acesta informație catre client.
3.2.1 Schimbul de informații
Când scriem scripturi CGI, creăm de fapt un program care va rula ca un subproces al serverului Web. Trebuie să găsim o modalitate pentru ca scriptul nostru să primească informații de la server. Există câteva metode care sunt folosite pentru a transmite informațiile către scriptul care rulează. Prima modalitate este folosirea parametrilor. Scripturile CGI nu folosesc parametri așa cum sunt folosiți în alte programe, pentru că această modalitate trebuie sa fie specifica unui system de operare anumit, iar standardele pentru transmiterea de parametri către programe sunt prea restrictive.
A doua metodă de a transmite date către procesul fiu este prin variabile de mediu : o serie de perechi de forma nume=valoare sunt moștenite de procesul fiu de la părinte în momentul în care procesul fiu este creat. UNIX-ul folosește de obicei variabile de mediu pentru a păstra informațiile utile în context global, punându-le astfel la dispoziția proceselor.
Structura nume=valoare a variabilelor de mediu se potrivește foarte bine cu datele care vin din formularul (form) pe care utilizatorul l-a încărcat în navigator. Fiecărui câmp de intrare de pe formular poartă un nume și va primi și o valoare furnizată de către utilizator. Valoarea trebuie să fie legată de numele câmpului și perechea să fie trimisă serverului Web.
O altă metodă de a trimite date către procesul fiu este să scriem informațiile într-un fișier și să specificăm procesului fiu să citească datele din acesta. Această tehnică este frecvent utilizată în redirectarea de tip shell. Shell-ul lansează comanda și redirectioneaza rezultatul comenzii către o intrare standard
3.2.2 Variabilele de mediu CGI
Când un client trimite serverului Web o cerere care are drept rezultat execuția unui script, serverul va preîncărca mai multe variabile de mediu, pe care scriptul CGI le va moșteni și pe care le va putea consulta. Anumite variabile de mediu sunt considerate părți "standard " ale protocolului CGI. Serverul poate să definească și alte variabile de mediu
Un server HTTP transfera informații unui scenariu CGI utilizând argumente de linie de comanda si variabile de mediu. Serverul atribuie valori varibilelor de mediu când executa un scenariu. In continuare sînt prezentate cele mai importante dintre aceste variabilele lor.
Aceste variabile pot fi împărțite în trei categorii.
În primul rând, sunt variabile care comunică scriptului date despre serverul pe care rulează. De exemplu, scriptul poate afla numărul portului pe care îl folosește. dacă avem doi serveri în paralel care folosesc aceeași arbore de sursă, da
În al doilea rând, sunt și câteva variabile care furnizează scriptului informații de bază despre programul client (de obicei un browser Web) și despre sistemul care a formulat cererea pentru date. Astfel, de exemplu, scriptul poate să identifice adresa IP a clientului sau tipul navigatorului. Dar pe de altă parte, nu poate identifica nici persoana, nici adresa de e-mail a acesteia.
În al treilea rând, sunt variabile care conțin informații despre tranzacția curentă. Precum am mai spus, HTTP folosește protocolul MIME pentru a schimba informații. Tipul MIME este pus la dispoziția scriptului în variabila CONTENT_TYPE.
Mai jos sînt descrise cele mai principale variabile de mediu
Variabila AUTH_TYPE
Variabila AUTH_TYPE este folosita pentru autentificarea unui utilizator care încearcă sa obtina acces la un scenariu. Daca serverul este configurat pentru a permite autentificarea utilizatorilor, utilizatorul care încearcă sa obtina ace la un scenariu CGI trebuie sa furnizeze un nume de utilizator si o parola valida.
Variabila CONTENT_LENGTH
Variabila este folosita pentru a determina numărul exact de octeți conținut in daele atașate
Variabila CONTENT_TYPE
Scenariile CGI utilizează variabila de mediu CONTENT_TYPE pentru interogări care au atașate informații, de exemplu o operație HTTP de tip POST. Informația conținuta specifica tipul atasamentelor (MIME tip/subtip).
Variabila GATEWAY_INTERFACE
Scenariile CGI utilizează variabila de mediu GATEWAY_INTERFACE pentru a determina numărul de revizie al specificației CGI cu care lucrează serverul Web. Formatul numărului de revizie al specificației CGI este: CGI/numar revizie.
Variabila PATH_INFO
Variabila PATH_INFO poate fi utilizata pentru a obține numele de cale virtuala al scenariului.
Variabila PATH_TRANSLATED
Variabila PATH_TRANSLATED poate fi utilizata pentru a obține numele complet de cale al scenariului.
Variabila QUERY_STRING
Scenariile CGI utilizează variabila QUERY_STRING pentru a primi informații de tip text care urmează după caracterul semnul întrebării (?) in URL-ul specificat de utilizator pentru lansarea scenariului. Serverul va înlocui toate caracterele speciale cu caracterele "%aa" ude "aa" este o cifra in baza 10, iar spațiul il va înlocui cu "+". Deci scenariul trebuie sa contina instrucțiuni pentru decodarea șirului de caractere.
Variabila REMOTE_ADDR
Folosind variabila REMOTE_ADDR un scenariu CGI poate afla adresa IP a unui browser care efectuează o cerere.
Variabila REMOTE_HOST
Folosind variabila REMOTE_HOST un scenariu CGI poate afla numele unei gazde care efectuează o cerere.
Variabila REQUEST_METHOD
Folosind variabila REQUEST_METHOD un scenariu CGI poate afla tipul de cerere HTTP pe care browser-ul a trimis-o serverului pentru apelarea unui scenariu, de exemplu GET, HEAD sau POST.
Variabila SCRIPT_NAME
Scenariile CGI folosesc variabila SCRIPT_NAME pentru a determina calea virtuala către scenariul care va fi rulat pe server.
Variabila SERVER_NAME
Folosind variabila SERVER_NAME se poate determina numele de gazda al unui server Web, numele unui domeniu sau o adresa IP.
Variabila SERVER_PORT
Folosind variabila SERVER_PORT se poate afla numărul portului utilizat de browser pentru conectarea la serverul Web.
Variabila SERVER_PROTOCOL
Folosind variabila SERVER_PROTOCOL se poate afla numele si numărul de revizie al protocolului utilizat de browser pentru a trimite o cerere către serverul Web.
Variabila SERVER_SOFTWARE
Folosind variabila SERVER_SERVER se poate afla numele si numărul de revizie al serverului de Web folosit.
Variabila HTTP_USER_AGENT
Folosind variabila HTTP_USER_AGENT se poate afla numele si versiunea browser-ului folosit de client.
3.2.3 Metode de transmitere a datelor
Există două variante de a trimite către serverul Web informația culeasă într-un formular care apelează un script CGI: GET și POST. Parametrul METHOD specifică alegerea făcută la implementarea formularului în pagina Web. Fiecare metodă folosește o cale diferită pentru a trimite informațiile din formular la server, în momentul în care butonul submit este apăsat.
Denumirile GET și POST se referă la comenzi din protocolul HTTP. Când navigatorul cere o pagina obișnuită, trimite o cerere de genul:
GET /main.html HTTP/1.1
Cererea de mai sus îi solicită serverului pagina "/main.html" și îi indică faptul că este capabil să facă față versiunii 1.1 a protocolului HTTP. Dacă totul este normal, atunci serverul va răspunde cu un mesaj care conține datele corespunzătoare.
Când navigatorului i se spune să trimită datele de pe formular folosind o cerere de tip GET, acesta va trimite cererea adăugând la sfârșitul URL-ului un semn de întrebare și conținutul formularului. Se creează un URL, extins conținând adresa paginii și parametrii care trebuie trimiși scriptului (de exemplu http://www.domeniu.dom/cgi-bin/script.pl?nume=Ion&tel=132474). Dacă sunt foarte multe perechi nume=valoare în formular sau dacă valorile sunt mari, atunci această cerere inițială către server poate fi prea mare iar serverul nu îi va putea face față. La fel, când URL-ul este procesat de server, orice șir de caracter urmat de un semn de întrebare ajunge într-o variabilă de mediu (QUERY_STRING), care este pusă la dispoziția scriptului CGI.
Este de dorit să se limiteze spațiul ocupat de variabilele de mediu. Astfel, pentru formularele mai mari este de preferat metoda POST. În acest caz, datele din formular nu sunt trimise ca parte a URL-ului, ci sub forma unui fișier codat cu standardul MIME înglobat în corpul mesajului trimis către server. Datorită faptului că datele sunt trimise codat MIME, serverul știe mărimea și tipul datelor și va trece aceste valori în script folosind variabila de mediu CONTENT_LENGTH și CONTENT_TYPE. În plus, scriptul așteaptă să se citească setul de parametrii trimis din formular de pe canalul său standard de intrare. Este de datoria serverului să asigure ca datele trimise de către navigator să fie puse la dispoziția scriptului, gata de a fi importate și scanate pentru perechile nume=valoare.
Există însă o complicație atât pentru GET cât și pentru POST. HTTP este un protocol de tip text și că folosirea textului pentru a transporta informații are problemele ei.
Se întâmplă des ca într-o aplicație de text să trebuiască sa folosească caracterul două puncte (":") pentru a separa diferitele informații despre utilizator, cum ar fi parola, numele, iar acest lucru înseamnă că nu putem avea un nume de utilizator care să conțină caracterul două puncte
Pentru a evita acest lucru, protocolul HTTP folosește o metodă de decodare ca să asigure faptul că informația rămâne intactă în urma transmisiei. Pentru a codifica datele folosite în URL-uri, caracterele spațiu sunt înlocuite cu semnul plus ("+") și toate celelalte caractere care nu sunt alfanumerice sunt înlocuite cu semnul procent ("%") urmat de codul hexazecimal al caracterului.
Într-un mesaj POST sau GET, datele din formular sunt trimise folosind această metodă de codificare. Numele câmpurilor și valorile sunt codate și fiecare pereche este transformat într-un șir de caractere nume=valoare, aceste șiruri de caractere fiind apoi concatenare într-un singur șir, în care perechile sunt separată de caracterul "&". De exemplu, un formular cu metoda POST care conține două variabile NAME și PHONE își va trimite data astfel:
NAME=Joe&PHONE=1274
Metoda GET va adăuga acest șir de caractere la URL, după semnul de întrebare, în timp ce metoda POST va transmite datele ca o parte a protocolului HTTP, urmând ca scriptul să le citească de pe canalul său standard de intrare.
Un exemplu de interogarea HTTP după metoda POST este mai jos
POST /cgi-bin/script.pl HTTP/1.1
Accept: images/gif, image/x-xbitmap, image/jpeg, image/pjepeg, */*
Accept-Language: en-us,ro;q=0.5
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 4.0; Windows 95)
Host: www.domain.com
Content-Length: 41280
Connection: Keep-Alive
Pragma: no-cache
Name=John&tel=1274
3.2.4 Răspunsul dat de script
Datoria serverului Web este de a trimite răspunsuri la cererile clienților. Scripturile CGI sunt utilizate de regulă pentru a colecta date din diverse surse (de obicei baze de date, fișiere locale etc.), a le grupa, a le formata și, în fine, a le trimite clientului care le-a solicitat. Serverul Web aranjează lucrurile în așa fel încât ieșirea standard a scriptului să fie redirecționată către navigatorul clientului. Totuși, datele trimise de către script trebuie să fie codificate prin standardul MIME, astfel încât un script trebuie să pornească prin trimiterea unui antet (header) MIME care specifică tipul datelor care vor urma, antetul care este separat de informația codată printr-un rând liber. Dacă v-om examina un script scris în PERL care returnează o pagină HTML-ul, sunt șanse mari ca acesta să înceapă o linie de forma:
Print "Content-type:text/html\n\n";
Prin aceasta se specifică faptul că datele care urmează reprezintă cod HTML. Observați că apare un rând liber în plus după această afirmație, pentru a separa antetul de corpul mesajului. Antetul fiind trimis, scriptul poate să transmită liniștit
Trebuie să plasam acest script în cgi-bin-ul nostru și să s-al denumim – să zicem – plan. Scriptul este executat de shell. Folosim perechea standard de caractere magice la începutul fișierului ( #!) pentru a comunica sistemului că acesta este un fișier executabil. Pentru a rula, scriptului trebuie să-i setăm drepturile de execuție prin comanda
chmod +x plan
Deoarece scriptul CGI returnează o parte informațiile trimise prin protocolul HTTP către browser, este ușor să-l determinăm să folosească capacități speciale ale acestuia. De exemplu, se pot crea pagini în care să spunem: "Mulțumesc pentru introducerea datelor" și să instruim navigatorul să aștepte 10 secunde și apoi să se conecteze la o altă adresă, de exemplu la pagina de intrare a serverului (sau, eventual, la pagina pe care utilizatorul o vizitase înainte să înceapă să completeze formularul).
3.2.5 Decodarea argumentelor CGI
Exista citeva metode de codarea datelor care se conțin in forma
Metoda standard application/x-www-form-urlencoded care se folosește in caz daca nu indicam o oricare alta
Alta metoda multipart/form-data , care este necesar in cazul in care vrem sa tranmitem la server fișier de pe discul local ales cu ajutorul elementului <INPUT TYPE=FILE >
Scriptul citește câțiva octeți de pe canalul lui standard de intrare, unde serverul Web plasează valorile metodei POST . Programul știe câți octeți trebuie să citească deoarece poate să examineze variabila de mediu CONTENT_LENGTH. Folosind limbajul Perl, toate variabilele de mediu pot fi interogate folosind vectorul asociativ ENV.
Datele citite sunt stocate într-un șir care apoi este separat într-un vector folosind caracterul "&" ca separator. Avem acum câteva șiruri de caractere nume=valoare de care avem nevoie în continuarea procesului. Separăm fiecare dintre parametrii șirului de caractere în două variabile la semnul = și aplicăm rutina de decodare URL la a doua variabilă. În cele din urmă se depozitează argumentele într-un vector asociativ (HASH), astfel încât valorile unui câmp pot fi accesate prin cod folosind:
If ($FORM{nume} eq "")
Un vector într-un limbaj de programare este un obiect care poate deține mai multe valori și noi în mod normal accesăm aceste valori utilizând un index numeric. Vectorii asociativi (HASH) sunt potrivite pentru depozitarea parametrilor din formular, pentru că ele permit să accesăm valorile folosind partea de nume a perechii nume=valoare.
Afirmația $FORM{"nume"} va spune: FORM este un vector asociativ și noi vrem să aflăm valoarea care este asociată șirului "nume".
3.3 Descrierea mediului de programare Perl
3.3.1 Descrierea generala
Limbajul Perl este un limbaj interpretat – compilat în timpul încărcării. Inițial a fost scris de către Larry Wall pentru a ușura niște sarcini administrative, fiindcă nu a vrut să folosească alte programe care aveau limitări însemnate. Limbajul se poate învăța foarte ușor deoarece conține elemente bine cunoscute din alte limbaje.
Se pot scrie programe eficiente cunoscând doar o mică parte a limbajului, iar programele pot fi testate imediat datorită execuției foarte rapide a acestora. La baza programării stau unelte ca C, sed, awk si sh
În Perl, munca programatorului este limitată doar de capacitățile hardware ale calculatorului. Un întreg fișier poate fi citit într-o singură variabilă de tip string si putem apela funcții recursive de orice adâncime (dacă avem destula memorie). Totodată, Perl are un mecanism foarte eficient de căutare si înlocuire într-un text după un model dat (inițial era conceput pentru prelucrarea fișierelor de tip text, așa cum arată si numele lui Practica Extraction and Report Language).
De la versiunea 5 putem folosi deja programarea modulară si programarea orientată obiect. În Perl programele setuid sunt mult mai sigure decât în C datorită unui mecanism care urmărește evoluția datelor, acesta putând fi activat cu ajutorul parametrului -T în linia de comandă. Astfel, apeluri de sistem care necesită o securitate mare nu vor fi executate, dacă se bazează pe informații primite de la utilizator.
Cu ajutorul acestui limbaj se pot scrie foarte ușor programe CGI (Common Gate Interface), ale căror rezultate de obicei apar într-o pagina WWW, singurul lucru la care trebuie să avem mare atenție este securitatea sistemului nostru, adică serverul pe care vor rula aceste programe.
Ca și în alte programe, și în Perl mediul în care rulează un program CGI poate fi controlat într-o mare măsură. Inițial acest mediu este setat de către serverul Web, care poate fi același cu mediul serverului sau modificat doar pentru programe CGI (aceasta depinde de serverul pe care-l folosim). Mediul în care rulează un program CGI, poate să schimbe comportamentul programului și rezultatele lui.
De exemplu, variabila de mediu PATH este folosită de un program CGI pentru a căuta alte aplicații care sunt lansate din cadrul programului CGI. Dacă variabila PATH era setată la /bin:/usr/bin:/usr/local /bin, și a fost lansat programul ls, atunci programul va fi căutat în aceste trei directoare. Se așteptă ca programul ls să fie găsit (/bin/ls pe cele mai multe sisteme de operare UNIX).
Dacă variabila PATH ar fi fost setată la /tmp:/bin:/usr/bin (de către server sau de programator), iar noi lucram la un proiect oarecare pe același sistem, creând un script temporar numit /tmp/ls, când programul CGI caută și lansează comanda ls în loc de /bin/ls va rula /tmp/ls care va avea desigur alte rezultate decât cele la care ne-am fi așteptat.
3.3.2 Interfața Perl cu SGBD MySQL
Pentru orice SGBD poate fi găsita biblioteca care ar da posibilitatea sa conectam si sa accesam datele dela acest sistem .Pentru cele mai populare SGBD exista biblioteci care permit accesul cu ajutorul limbajelor C, C++, perl, Tcl, Java etc. Setul de funcții care este dispus in biblioteca se numește API (Application Program Interface ) de conectare la baza de date.
Schema de funcționare a intefetei este prezentata in următoare shema (Vedeți Anexa 2 )
Exista doua biblioteci de conectare la baza de date MySQL din programe scrise in PERL. In complectatia interpritatorului Perl intra ambele .
Biblioteca nativa Perl da posibilitatea sa accesam repede gfunctiile intefetei MySQL fara careva nivele intermediare. Pentru a accesa aceasta biblioteca este nevoie de include in primele rinduri ale scriptului codul.
use Mysql;
ce include set de funcții Perl in programul nostru.
Mai jos sunt prezentate cele mai principale funcii din aceasa biblioteca.
Conectare la SGBD MySQL
$dbh = Mysql->Connect($host,$database,$password,$user);
Funcția data stabilește conecsiune cu serverul SGBD. Parametrii care sînt transmise la aceasta funcția sînt numele hostului (si poate fi transmis numărul portului ), si denumirea bazei de date la care ne conectam. SGBD MySQL permite a ipărți accesul la BD pentru mai mulți utilizatori prin mecanizmul de autentificare. Pentru aceasta la conectare se transmite numele utilizatorului si parola.
Pentru fiecare utilizator se indica nivelul de permisiune la care putem pune niște restrictii și să restrictăm acțiunile pe care el poate sa execute ( de exemplu: limitarea numai posibilitatea de citirea datelor pentru utilizatori nepriviligiati si etc. ).
Daca hostul nu este indicat adică se lasă șir vid , aceasta înseamnă ca conectare are loc la calculatorul local. Daca nu este indicat numele utilizatului se folosește numele curent.
Funcția întoarce ca valoarea descriptorul bazei de date in caz de reusuita, si valoarea nedefinita in caz ca nu are loc conectare. Din descriptorul primit putem sa extragem informația despre portul folosit, adresa serverului
$scalar = $dbh->sock;
$scalar = $dbh->host;
Acțiunea principala a serverului SGBD este executare comenzilor SQL. Aceasta se face prin funcția
$sth = $dbh->Query($sqlsquery) or die $Mysql::db_errstr
Funcția de mai sus tremite interogarea SQL către baza de date deschisa prealabil , prin folosirea descriptorului bazei de date $dbh. Ca rezultat este întors set de iregistrari in cazul interogări de selectare sau set vid in caz interogării de modificare a BD. Este recomandata controlul rezultatului cu ajutorul blocului „or die „ care afiseaza șirul cu descrierea erorii.
Cu rezultatul acestei functi putem sa executam mai multe operații : sa controlam datele returnate, numărul înregistrărilor modificate, etc. , aproape toate operațiile care permite SGBD.
$scalar = $sth->affected_rows;
se întoarce numărul de înregistrări afectate
$scalar = $sth->insert_id;
numărul ID pentru ultima iregistrarea inserata prin SQL comanda INSERT
$scalar = $sth->numrows;
numărul de înregistrări in setul rezultat
$scalar = $sth->numfields;
Numărul de cimpuri in setul rezultat
Funcția $sth->DataSeek($row_number)
mișca cursorul interior la o anumita inregistrarae după ordine. Setul de iregistrari se accesează prin cursorul interior. Este o noțiune folosita des in domeniul bazelor de date.
Instrucțiunea @arr = $sth->FetchRow;
Inscrie in masivul l @arr înregistrarea următore după ordine. Fiecare element al masivului conține valoarea cimpului respectiv. Elementele din masiv merg in ordine după care ele sînt in interogarea SQL. După înscrierea , cursorul interior se mișca cu o înregistrarea mai departe.
%hash=$sth -> FetchHash( );
In masivul asociativ %hash este înscrisa înregistrarea următore după ordine. Accesarea cimpurilor se face prin $hash{‚numele cimpului’}După înscrierea , cursorul interior se mișca cu o înregistrarea mai departe.
$scalar = $dbh->quote($binary_string);
este funcția care controlează interogarea SQL, daca ea conține simboluri care nu sînt permise in interogarea si sînt evaluate ca speciale .Ea aduce interogarea la forma corecta. Ași fi de dorit ca toate interogările formate cu datele obținute de la utilizator sa fie trecute prin aceasta funcția, pentru scopul de securitatea.
@arr = $sth->FetchCol($col);
Întoarce masivul care conține valorile coloanei $col
4. CONCEPTUL AEP
4.1. Destinația si facilitațile AEP
Asistentul electronic la prima vedere este o sinteza carnetului de notițe simplu si carnetului de adrese, cutiei poștale, calendarului si altor atribute necesare omului contemporan. Dar aceasta e numai la prima vederea. Datorita funcțiilor sale , care sînt posibile numai in Internet el poate fi un ajutor pentru utilizator in orice partea a lumii.
De ce a fost conceput asistentul electronic ? informația are proprietea sa acomuleze , a umpla carnetele de notițe care se stochează in arhiva tot mai mult si mai mult. Deacea cind este nevoie de a aminti detaliile unei sau altei intilniri sau a numărului de telefon apar unele probleme care nu pot fi rezolvate daca ne găsim departe de casa sau oficiul.
Aceste probleme nu vor apărea daca veți avea la mina asistentul electronic care nu poate fi pierdut , nu poate fi uitat acasă ,deoarece el nu poate fi mutata , el se gaseste la locul sau permanent – in Internet . Acum in loc de căutarea lunga in arhivele existente, putem sa visitam asistentul electronic si informația necesara poate fi găsita in citeva secunde . Aceasta acțiunea poate fi făcuta in orice loc pe pamint , principal sa avem calculator cu acsesul la Internet. In afara de accesibilitatea rapida este inca un avantaj- confedentialitatea. In diferența de analogul sau de hirtie asistentul utilizatorului electronic poate fi deschis numai de stapin, si lui poate fi incredintata orice informația confedentiala.
In afara de aceasta asistentul electronic poate fi folosit nu numai ca înlocuitorul carnetului de notițe ci si ca secretarul virtual neinsufletit. La dorința utilizatorului el va deveni ajutorul activ, care nu va uita si va aminti de evinementele apropiate in viitor tremitind un mesaj SMS, un mesaj la pager sau la cutie electronica poștala.
Utilizatorilor asistentului electronic sînt prezentate următoarele servicii si componente.
Calendarul zilnic – el da posibilitaea de a compune si a redacta oralul utilizatorului zilnic, saptaminal etc., si a păstra informația despre evinementele importante a utilizatorului ( de exempu zilele de naștere a prietenelor, intilniri etc. ). Pentru fiecre evinementul planificat este posibilitatea de a termite un mesaj de rememorare la telefonul mobil, pager sau adresa electronica in timpul indicat. Calendarul zilnic electronic nu are limitarea de timp, adică evinementele pot fi planificate pe termen de 10 ani .
Carnetul de adrese – care permite utilizatorului a păstra careva informații de contact : telefon, adrese email, etc. a mai multor adresați ( făra limitarea numarului lor ). Carnetul de adrese este integrat strins cu cele lalte componente ale asistentului electronic.
Referințe preferate – acest serviciu este orientat mai mult pentru utilizatori activi ai Internetului care accesează Internet din mai multe calculatore. Acest serviciul permite a păstra centralizat referințe la cele mai des vizitate internet-saituri. Referințe se organizeză in structura ierarhica comoda.
Carnetul de notițe – este un serviciul simplu care permite de a păstra datele de tip text ( careva notițe de exemplu ) nu pe hirtie , ci intru-un loc – in Internet.
Informația personala- este destul de des cazul cind la alcătuirea unor documente oficiale apare necesitate a înscrie numărul pașaportului, cartelei de munca sau a altui document , dar el nu este la indemina. In acest caz asistentul electronic îl poate ajuta utilizatorului.
4.2 Schema funcțională
Aplicația asistentului electronic poate fi împărțită funcțional în două părți. Scriptul plan.pl care va executa aproape toate acțiunele în aplicația și scriptul serv.pl care este un script ajutător .
La culegerea adresei secretary.hit.md este executat scriptul plan.pl ( aceasta poate fi configurat la web server ).Acest script execută la început toate acțiunele necesare de inițializare : conectarea la baza de date, includerea bibliotecelor Perl necesare, decodificarea parametrilor de întrare.
Scriptul ajutător serv.pl execută următoarele acțiuni : șterge din tabelul Sesions identificatorii timpul cărora a expirat, tremite evinementele de avertizare la e-mail, pager, SMS.
Informația care este primită de aplicație este transmisă în două moduri în dependența de care codificarea am folosit la transmiterea datelor din forme (application/x-www-form-urlencoded, metoda multipart/form-data). La începutul scriptului trebuie de stabilit ce metoda este folosită și de decodificat datele.
La realizarea sistemului meu am ales modul de păstrarea a sesiunii cu ajutorul unui identificator Session, acest parametru este dat sesiunii la intrarea în sistem și transmis mai departe prin cîmpul ascuns Session . La fiecare executare a scriptului plan.pl este controlată prezența acestui cîmp. În caz dacă acest cîmp nu există sau nu este prezent în tabelul Session atunci utilizatorul trebuiesă între iarăși în sistem. Dacă utilizatorul nu efectuiază nici o acțiune în timp de 30 minute atunci sesiunea este terminată. Acesta este planificat cu scopul securității aplicației.
Scriptul primește informația despre acțiunea care trebuie să fie executată prin cîmpul HTML ascuns Action. Acest cîmp este obligatoriu prezent in datele de întrare, în caz dacă nu există atunci se începe procedura de întrarea în sistem și apare interfața de întrare pentru utilizator păstrată in șablonul login.html.
Acțiunele care pot fi executate de utilizator sînt : întrarea în sistem sub un nume de utilizator înregistrat și înregistrarea sub un nou nume de utilizator. La întrarea sub un nume deja exitent este controlată existența acestui nume și veridicitatea parolei. Sesiunii este atribuit un identificator – un șir arbitrar ales la întâmplare, probabilitatea ca șirul va coincide cu altul e foarte mică. La înregistrarea se întroduce un nou utilizator în tabelul Users și se atribuie sesiunii curente un identificator.
După aceasta se execută acțiunea GoToDate de trecerea la calendarul și afișarea evinementelor pe zi curentă. La afișarea evinementelor pe o zi și pe o luna în partea de dreaptă se afișează calendarul pe 3 luni. Folosind acest calendar se poate trece la orice data care ne trebuie . La trecerea se transmit paramentele Session, Date, Action, .Unde Date este data la care trecem iar Session este identificatorul sesiunii, care este asignat la intrarea în sistem.
Schema aplicației permite trecerea la afișarea evinementelor pe săptămâna, luna , anul, . La afișarea săptămânii este transmis un parametru Action=showweek, lunei=showmonth, anului=showyear. La primirea unui din aceste parametre este stabilită data de incepere a perioadei și data de sfirșit a perioadei pe care am ales. Aceasta se execută de procedurile speciale de manipulare a datei din modulul Date::Manip , un modul standart luat din arhivul organizației SPAN. Folosirea acestui modul ne eliberează de o munca grea la calcularea a numărului de zile în an și luna ,zilele de odihnă și etc. Are loc interogarea SQL către baza de date păstrată și anume tabelul Tasks. Toate evinementele se afișează în celula cu data respectivă. La afișarea evinementului este controlat cîmpul TYPE a lui și este afișata iconița respectivă .
La adăugarea unui evinement se transmite si tipul evinementului pentru adăugarea . În dependența de acest parametru procedura care afișează forma alege forma respectiva necesara.
La afișarea formei se transmite acest parametru pentru a seta cîmpul Type al Taskului . Forma conține toate cîmpurile text pentru setarea cîmpurilor în tabel .Cîmpul mesajului este complectat automat de către funcțiile Java Script păstrate în fișierul plan.pl, . acest script ie datele din cîmpurile de mai sus și formează textul final.
Inserarea nemijlocita se face la apăsarea butonului submit si este introdusa înregistrarea in tabel Tasks. In dependenta de dorința utilizatorului mesajul evinementului poate fi codificat in tranliteratie kirilica si este îndeplinit de procedura Transliterate. Aceasta este efectuat pentru utilizatorii echipamentului fară susținere grafiei chirilice.
Un alt bloc de subrutine răspunde de funcționarea Carnetului de adrese. La primirea parametrului Action=addres se afiseaza toate contactele utilizatorului păstrate in tabelul Contacts. Daca utilizatorul alege o litera la care se începe adresatul se executa interogarea SQL cu limitarea spațiului de înregistrări rezultante la prima litera respectiva.
Alte proceduri efectuiaza adăugarea, ștergerea, redactarea – DeleteContact(), UpdateContact(), EditContact(), AddContact()..
4.3 Cerințele către resurse hard si soft
Produsul program “Asistentul electronic public” este elborat pentru lucrul la serverul sub sistemul de operare FreeBSD. Produsul este elaborat in limbajul de programare interpritabil Perl.
Pentru functionarae normala a programului pe server trebuie sa fie instalate următoarele modul.e
Web-server Apache
Serverul bazei da date MySQL
SMTP server
POP3 server
Interpritatorul limbajului Perl
Configurarea pârtii hardware pentru desrvirea 1000 utilizatori
Motherboard cu doua procesoare
Procesorul Intel Xeon
256 MB memoriei operative
Discul fix cu interfața SCSI cu memoria disponibila 20GB
4.4 Web-server Apache si configurarea lui
Servere Apache trebuie sa fie configurat în așa fel încât atunci când o cerere HTTP de la navigator solicită un fișier cu extensia "cgi", fișierul nu va fi trimis. În schimb, serverul va verifica dacă programul respectiv este executabil și, în caz afirmativ, va rula programul, despre care se poate presupune că are sarcina să genereze date de ieșire corespunzătoare. Serverul Apache poate fi configurat și în așa fel încât o cerere către un fișier aflat într-un director anume să se execute ca un script. Acest director special este numit de obicei "cgi-bin".
Aceasta este adoptat din motive de securitate. Este periculos să permitem utilizatorului necunoscut să lanseze programe pe mașina noastră – chiar dacă este vorba de propriile noastre programe – deci majoritatea serverelor limitează accesul la scripturile CGI. Este un obicei bun să ascundem scripturile în așa fel încât acestea să fie executabile, dar să nu poată fi descărcate.
Pentru activarea serverului se executa comanda
/usr/local/apache/httpd -f /usr/local/apache/conf/httpd.conf
Configurarea webserverului se face prin redactarea fisieruelor httpd.conf, srm.conf и access.conf. Toate parametri de reglare a fișierului de configurare se împart in doua grupuri: cele legate cu specificul sistemului (directoria de baza ,adresa IP, etc ) si cele necritice pentru system care pot fi lăsate standarte
Parametri globali:
DocumentRoot – directorâul de baza
ServerRoot –directorul unde se afla subdirectoriile principale conf,logs
MaxClients – numărul maxim de clienți care pot fi deserviți de web server
User и Group – grupa si numele utilizatorului de la care vor fi.
5. PROIECTAREA DE DETALIU
5.1 Crearea bazei de date
Modelul de securitate folosit de MySQL se bazează pe username/password, hostname si privilegii si este similar celui generic folosit de sistemele Unix. Prin privilegii se inteleg in cazul MySQL operațiunile ce vor fi permise asupra bazei/bazelor de date, tabelelor sau indecșilor, cum sunt de exemplu SELECT, INSERT, UPDATE, DELETE, CREATE, DROP.
Crearea bazei de date:
CREATE DATABASE Secretary ;
Acord utilizatoruluiului ‘user’ cu parola ‘parola’ care se conectează la serverul MySQL de pe orice mașina din rețeaua dreptul de a face SELECT pe orice tabele din baza de date ‘Clienți’:
GRANT SELECT ON * TO user IDENTIFIED BY 'parola' ;
Folosirea GRANT si REVOKE este notificata serverului imediat si, spre deosebire de acordarea de privilegii cu UPDATE sau INSERT, nu necesita o comanda ulterioara de tip FLUSH PRIVILEGES – care spune serverului sa recitească tabelele de permisiuni.
Pentru securizarea datelor si a accesului la mysqld se recomanda implementarea politicilor specifice necesare, instrumentele furnizate de MySQL fiind doar o parte din întreg.
După crearea nemijlocita a bazei de date trebuie sa cream toate tabelele care sînt necesare pentru lucrul apliocatiei.
Tabelul Login conține informația referitor la utililizatorii ( numele, parola, e-mail etc.)
CREATE TABLE Login (
Login char(255) DEFAULT '' NOT NULL,
Pswd char(255),
Question char(255),
Answer char(255),
Email char(255),
PRIMARY KEY (Login)
);
Tabelul Session este necesar pentru păstrarea sesiunilor utilizatorului pentru protecția informației.
CREATE TABLE Sessions (
Session char(48),
Login char(255),
Time int(11)
);
Tabelul Tasks conține toate informația despre evinementele de alerta. In el se pastraza atit codul mesajelor cit acțiune ce trebuie sa fie îndeplinita, data si timpul de activare a ei si destinația (numărul SMS, e-mail ,etc. )
CREATE TABLE Tasks (
ID int(11) DEFAULT '0' NOT NULL auto_increment,
Login varchar(255),
Date date,
Time time,
Category varchar(255),
Description blob,
RemTime datetime,
Email varchar(255),
SMS varchar(255),
Operator varchar(255),
Pager varchar(255),
Message varchar(255),
PRIMARY KEY (ID)
);
In tabelul Dates se meemioreaza evinementele sistemului. Anume din acest table ie informația cal;endarul.
CREATE TABLE Dates (
ID int(11) DEFAULT '0' NOT NULL auto_increment,
Login varchar(255),
Day int(11),
Month int(11),
Year int(11),
Category varchar(255),
Description blob,
PRIMARY KEY (ID)
);
Bookmarks e tabelul pentru componenta Favorites si conține referințele la resurse web
CREATE TABLE Bookmarks (
ID int(11) DEFAULT '0' NOT NULL auto_increment,
Login varchar(255),
Code varchar(255),
Type int(11),
Path varchar(255),
Title varchar(255),
Description blob,
PRIMARY KEY (ID)
);
Tabelul Personal conține informație adăugătoare despre utilizator adică numele,prenumele, telefon, email si etc. necesar pentru funcționarea AEP.
CREATE TABLE Personal (
Login char(255) DEFAULT '' NOT NULL,
Name char(255),
Lastname char(255),
Email char(255),
SMS char(255),
Operator char(255),
Pager char(255),
IDcart char(255),
Passport char(255),
Drivers char(255),
AutoPassport char(255),
Insurance char(255),
Bank char(255),
Blood char(255),
Info BLOB,
PRIMARY KEY (Login)
);
Componenta carnetul de adrese folosește aceasta table pentru păstrarea contatelor si adresatelor
CREATE TABLE Contacts (
ID int(11) DEFAULT '0' NOT NULL auto_increment,
Login varchar(255),
Lastname varchar(255),
Name varchar(255),
Email varchar(255),
Phone varchar(255),
Work varchar(255),
Mobile varchar(255),
Operator varchar(255),
Pager varchar(255),
Fax varchar(255),
Address blob,
http varchar(255),
Info blob,
PRIMARY KEY (ID)
);
Utilitatea publicarii pe WWW din baze de date apare, printre altele, pentru companiile care au sedii, depozite sau puncte de lucru dispuse in diverse locații geografice distincte, unde accesul la Internet este totuși disponibil pe baza unui cont de dial-up. Aceste companii pot dori, de exemplu, ca o baza de date centrala a firmei sa fie accesibila pe web angajaților săi, care sa introducă si sa extragă unele date aferente operațiunilor zilnice.
Raportarea sau introducerea datelor se poate face diferențiat, in funcție de privilegiile per utilizator, si intr-o maniera sigura, împiedicând furtul de date confidențiale, daca se aleg soluții de securizare potrivite.
Costul final al unei aplicații de acest tip este compus numai din tariful perceput pentru servicii de web hosting de către orice Internet Service Provider si de costul de dezvoltare. Produsele software menționate in articol (Linux, Apache, interpretorul PERL, MySQL) sunt disponibile gratuit pentru uz comercial/non comercial, intern (MySQL este disponibil gratuit pentru uz intern pe sisteme de operare non-Microsoft). Doar in cazul MySQL, pentru uz comercial este posibil sa fie nevoie de o taxa modica de licențiere – precizări pot fi găsite in manualul MySQL
5.2. Utilizarea programului
Pentru începutul lucrului cu asistentul electronic este necesar de culege in browser adresa asistentului in Internet -(http://secretary.hit.md). După încărcarea primei pagini a asistentului elctronic – pagina autinteficarii utilizatorului – utilizatorul trebuie sa introducă in cimpurile respective numele de înregistrare si parola pentru accesul la system.
Figura 1. Intrarea in sistem
Daca utilizatorul nu este inregistrat in sistem el poate pe aceiași pagina sa treacă prin procedura simpla ( conține numai trei cimpuri ) de înregistrare . După înscrierea informației de autentificare si apăsarea butonului respectiv utilizator va intra in sistem. Pentru trecerea in diferite pârti ale asistentului electronic trebuie sa folosim panelul de navigare care se afla in partea de sus a paginei.
După intrarea in sistem vom putea sa lucram cu asistentul electronic un timp nelimitat , dar daca in timpul 30 de minute utilizatorul nu va apasa nici o referința, atunci conectarea la server se va intererupe in scopurile securitatii si pentru continuarea lucrului trebuie ca utilizatorul sa intra in sistem inca o data. Tot in scopul securitatii se recomanda la terminarea lucrului sa apasati referința “Logout” pe panelul de navigare.
5.2.1. Calendarul
La prima deschiderea a calendarului el va afișa toate evinementele planificate pe ziua curenta . Pentru afișarea evinementelor pe luna , saptamina , anul trebuie sa apasam referința respectiva .Pe urma vom putea ușor sa trecem la evinementele zilei curente.
Evinemente care au loc fiecare an ( zilele de naștere, aniversari, sărbători etc. ) se afișeaza in partea de sus prin butoane mari cu descripția respectivă. Pentru ștergerea astfel de evinementelor din calendar trebuie sa apasam pe butonul de dreapta in fata evinementului respectiv ( pe el este semnul crucii ) si sa confirmați stergerea prin apăsarea butonului “OK” in fereastra de dialog ce va apărea .
Evinementele care au fost planificate pe ziua concreta ( intilniri, adunări, calatorii, etc. ) se afiseaza pe ecran prin imaginea mai mica care caracterizează evinement, timpul , si descrierea lui. In cazul in care pentru evinement este aplicat serviciul de amintire , in partea dreapta va fi pictograma respectiva tipului echipamentului la care va fi tremis mesaj ( telefon mobil , pager , e-mail) Daca trecem cu mousul deasupra pictogramei vom vedea informatia pentru sugerarea, care conține timpul de tremitere a mesajului, numărul de telefon, pagerul, sau e-mailul adresatului , va fi afișat si mesajul respectiv.
Tabelul 1
Pictogramele folosite
Daca vom alege afișarea evinementelor pe careva an, vom vedea calendarul pe an unde lingă zi in care este planificat un evinement, se afla pictogramele a evinementelor respective . Daca trecem cu mousul deasupra pictogramei va apărea informația de sugerarea care descrie evinementul respectiv. Apasind pe denumirea lunii vom trece pe pagina dorita in careva fi afișata evinementele pe luna respectiva, iar apasind pe data respectiva vom vedea evinemente pe ziua aceasta.
Pentru planificarea unui evinement trecem cu mausul deasupra inscripției “Adăugarea evinementelor ‘ in partea de sus a paginii. Din meniul care va apărea alegem referința respectiva : zi de naștere, intilnirea, calatoria, etc. Forma care va aparea trebuie sa completam.
5.2.2 Completarea formelor
Daca vom introduce informația despre zi de naștere, atunci in cimpul “Zi de naștere” va fi indicata virsta acestei persoanei . Analogic va fi prelucrata informația despre aniversarea.
La introducerea informației despre careva evinement ( intilnirea, adunare, calatorie, etc. ) in timpul complectării va fi generata descrierea evinementului si textul informației pentru aviz. Deacea se recomanda in cimpurile de introdus informația in declinarea respectiva cimpului. De exemplu, in cimpul “Cu cine va fi intilnirea” trebuie sa introduceți “cu Ivanov Sergiu. In acest caz in cimpul descrierii evinementului va fi generat textul “Intilnirea cu Ivanov Sergiu”. Analogic va fi generat textul avizului de avertizare “2001-08-05 â 10:00 Intilnirea cu Ivanov Serioja”.In orice caz textul in cimpul “Descrierea” si “Textul mesajului “ trebuie sa redactam numai înainte de salvarea formei.
Figura 2. Adaugarea evinementelor
Pentru tremiterea mesajelor de avertizare despre careva evinement trebuie in cimpurile respective sa alegem data si timpul tremiterii mesajului iar după aceasta sa setam chekbox care corespund email, telefonului mobil, sau pagerul. După aceasta introducem adresa si numărul de telefon la care va fi tremis mesajul de avertizare in cimpul corespunzător. Numarul telefonului
mobil trebuie de introdus in formatul internațional fara delimitatori si spațiu liber adică "+3739xxxxxx" , atrgem atenția ca daca in rubrica “Informatia personala” am introdus email, numărul teelfonului mobil , sau pagerului , atunci ele vor aparea in cimpurile respective ale formei.
Daca textul mesajului generat nu ne satisface , atunci înainte de salvare putem sa-l redactam. Checkbox “A transla mesajul in transliterare” trebuie sa setam in caz daca echipamentul la care va fi tremis mesajul nu corect afișeaza simboluri chirilice.
Orice înregistrarea făcuta putem in viitor sa redactam sau sa stergem. Pentru aceasta trebuie sa apasam pe referința “a redacta”, sau “a șterge”, care se găsesc sub descrierea evinementului respectiv.
5.2.3 Carnetul de adrese
La deschiderea carnetului de adrese vom vedea lista tuturor contactelor care se gasesc in el. Pentru afisarea numelor care se incep cu o anumita litera, apasam referința respectiva in partea de sus a paginii. Pentru a introduce coordonatele unei persoane sau a organizației, apasam pe refirinta, “Adăugarea contactului”. Numele si informația poate fi introdusa atit cu grafia chirilica cit si latina. Redactarea si ștergerea înregistrărilor se face cu ajutorul referințelor “redactarea” si “stregerea “.
5.2.4 Referințe preferate
In acesta partea putem sa pastram adrese paginelor care ne interesează. Pentru început formam lista temelor care ne interesează. De exemplu avem nevoie sa pastram adresese serverilor, dedicate Moldovei. Pentru aceasta trebuie sa apasam referința “Adăugarea catalogului” in partea de dreapta sus a paginii. In forma care apare introducem cimpul “denumirea directorului” – “Moldova” iar pe urma daca dorim si cimpul “descrierea “.
Figura 3. Referințe preferate
Descrierea se va conține in informație de sugestie , care apare la mișcarea cursorului deasupra denumirii directorului. In cimpul “In care directorul sa pastam directorul ?”alegem directorul părinte pentru directorul nou creat. Dapa aceasta apasam referința “Păstrarea”, după aceasta vom fi transferați la pagina principala referințelor, unde deja a apărut catalog “Moldova”.
Pentru adăugarea unei referințe la internet resursă concretă apasam la referinta “adăugarea referintei”. In forma care va apărea alegem directorul in care va fi pastrata referința data (de exemplu “Poșta”) si după aceasta introducem adresa referinței in cimpul “URL” si nu sa uitam sa introducem http:// de exemplu http://www.mail.md. In caz contradictoriu legatura cu serverul necesar nu va fi stabilita.
Daca e necesar putem sa complectam cimpul “descrierea”. Efectuind toate operatiile apasam butonul “Păstrarea”. In rezultat in directoarea “moldova “ va apărea directoarea “Poșta” apasind la care nimerim la adresa www.mail.md. Referințe si directoarele putem sa ștergem apasind la referința respectivă care se afla lîngă înregistrarea data.
5.2.5 Carnetul de notițe
Pentru a introduce inregistrarea – apasam pe referința “adăugarea inregidtrarii” . In forma ce va apărea trebuie sa complectam cimpul “Denumirea înregistrării” si “Textul”, iar pe urma s salvam informația introdusa. In rezulta pe pagina principala a carnetului de notițe va apărea denumirea inregistarii. Apasam pe denumirea pentru a citi textul. Ștergerea este posibila daca apăsam referinta “stregerea”.
5.2.6 Informația personala
Daca de exemplu pentru contabilul organizației utiliyatorului va fi necesar numărul pasaportuli lui, atunci ușor gasim aici daca prealabil l-am introdus aici.
In afara de aceasta numerele de telefon mobil si pagerului, si a adresei email vor fi automat introduse in cimpurile respective pentru trimiterea mesajelor de avertisment.
6. ESTIMAREA ECONOMICĂ A PROIECTULUI
Pentru determinarea volumului de lucru necesar la executarea proiectului în cauză se alcătuiește lista tuturor etapelor și lucrărilor de bază, care au fost îndeplinite. În timpul de față Moldova se bazează pe relațiile de piață și este nevoie ca viitorii specialiști (cercetători, constructori, ingineri) să cunoască nu numai ingineria, dar și economia. Aceasta este cauzată de mai multe aspecte: de intensificarea producției, de dezvoltarea progresului tehnico-științific, de reforma economică și de trecerea la metodele economice de dirijare.
Un inginer care cunoaște noțiuni generale în domeniul economiei duce la aceea, că specialistul dat va putea demonstra economic corectitudinea principiilor tehnice, va putea aprecia rezultatele muncii sale din punct de vedere economic și altele.
Din cele expuse mai sus, reiese că fiecare proiect trebuie să fie privit și din punct de vedere economic. Adică, pe lângă toate aprecierile tehnico-științifice, trebuie să apreciem și valoarea sa economică. Acest proiect va conține și toate cheltuielile care au fost făcute la realizarea proiectului.
Proiectele tehnologice contemporane sunt caracterizate de următoarele particularități:
tehnica nouă utilizată este foarte complexă și este construită utilizând ultimele elaborări științifice;
accelerarea vitezei de elaborare a proiectelor;
proiectele referitoare la complexele tehnicii de calcul și softului sunt supuse uzurii morale foarte rapide;
necesitatea proiectării de sistemă la elaborarea softului și sistemelor tehnice.
Toate acestea au dus la necesitatea de creare a noi metode de planificare. Una din aceste metode prezintă modelarea procesului de elaborare, adică prezentarea legăturilor și caracteristicilor lucrărilor în procesul elaborării proiectului. Metodele tradiționale de planificare presupun utilizarea celor mai simple modele de tipul construirea diagramelor de tip consecutive și ciclice.
Dar în asemenea diagrame nu este posibil de a prezenta legăturile dintre niște lucrări, de unde rezultă imposibilitatea de a afla cât de importantă este lucrarea dată pentru executarea scopului final. Pot apărea diferite întârzieri în timp, ce apar pe porțiuni de interconectare a lucrărilor, care sunt complicat de prezentat în diagrame. De obicei, în procesul dirijării se culege informația despre lucrările efectuate și aproape nu se culege și nu se prezintă informația referitor la prognoza finisării lucrărilor viitoare, de aceia este imposibil de a prognoza rezultatele diferitor variante de soluționare la modificările planului inițial de lucru. Este de asemenea complicat de a reflecta și dinamica lucrărilor, de a corecta toată diagrama în legătură cu schimbarea termenilor de efectuare a unei lucrări, ce este necesar de a efectua ca să nu schimbăm termenul de efectuare a întregului complex de lucrări.
Aceasta este doar o parte mică din neajunsurile metodelor utilizate în prezent pentru planificare și prezentarea grafică a planurilor de pregătire a producerii. Aceste neajunsuri în mare pare sunt excluse de către sistemele de planificare și dirijare rețea utilizate în prezent.
Sistemele de planificare și gestiune rețea prezintă un complex de metode grafice și de calcul, metode de control și de organizare, care asigură modelarea, analiza și reconstruirea dinamică a planului de executare a proiectelor complexe.
Sistemul de planificare și gestiune rețea este o metodă cibernetică creată pentru gestiunea cu ajutorul sistemelor dinamice complexe cu scopul asigurării condiției de optim pentru careva indicatori. Așa indicatori, în dependență de condițiile concrete, pot fi:
timpul minim pentru elaborarea întregului complex de lucrări;
costul minim al elaborării proiectului;
economia maximală a resurselor.
Particularitățile sistemului de planificare și gestiune rețea în general sunt următoarele:
se realizează metoda proiectării de sistem la rezolvarea problemelor de organizare a gestiunii proceselor.
se utilizează modelul informațional-dinamic special (graful-rețea) pentru descrierea matematico-logică a procesului și calculul automat (conforma algoritmului) a parametrilor acestui proces (durata, costul, forțele de muncă, etc.)
se utilizează sisteme de calcul pentru prelucrarea datelor operative pentru calculul indicatorilor și primirea rapoartelor analitice și statistice necesare.
Unul din scopurile de bază a planificării procesului de executare a procesului de executare a proiectului este determinarea duratei de îndeplinire a acestuia.
În cazul unor lucrări nu mari ca volum se practică construirea graficului tabelar de îndeplinire a lucrărilor. Electric reprezintă un tabel în care se enumeră toate lucrările petrecute, funcțiile șu numărul executărilor, volumul de lucru a fiecărei lucrări.
Longevitatea fiecărei lucrări se determină după formula:
;
unde Ti – volumul de lucru a lucrării;
Nl – numărul de executări.
Graficul calendaristic este prezentat în tabelul 8.1
Tabelul 2
Biblioteca evenimentelor și lucrărilor, efectuate în procesul elaborării
Asistentului Electronic Public.
Documentul de bază în sistemul de planificare și gestiune rețea este graful-rețea (modelul rețea), care prezintă modelul informațional-dinamic, în care sunt prezentate legăturile și rezultatele tuturor lucrărilor, necesare pentru atingerea scopului final.
În figura 8.1 este prezentată schema reprezentării grafice a grafului-rețea:
Figura 4 Structura grafului-rețea.
unde: cercul – un eveniment;
săgeata – o lucrare;
tij – durata lucrului ij;
Rlij – rezerva liberă de timp a lucrului ij;
Rdij – rezerva deplină de timp a lucrului ij;
Tdi – timpul devreme de începere a evenimentului i;
Tti – timpul târziu de terminare a evenimentului i;
Ri – rezerva liberă de timp a evenimentului i;
Ni – numărul evenimentului i;
Tdj – timpul devreme de începere a evenimentului j;
Ttj – timpul târziu de terminare a evenimentului j;
Rj – rezerva liberă de timp a evenimentului j;
Nj – numărul evenimentului j.
Parametrii calculați ai grafului rețea sunt prezentați în tabelul 7.2.
Tabelul 3
Calculul parametrilor grafului rețea
Graful în Anexa 1
Din graful-rețea vedem că realizarea proiectului durează 58 de zile – adică 11,6 saptamâni (saptamâna cu 5 zile lucrătoare a câte 8 ore lucrătoare). Salariul săptămânal al lucrătorilor este reprezentat în tabela 7.3
Tabelul 4
Salariul săptămânal al lucrătorilor
Salariul săptămânal alcătuiește 1000 lei. Pe durata proiectului salariul de bază alcătuiește:
lei
Salariul suplimentar (10% din salariul de bază):
lei
Defalcări în fondul social (31%):
lei
Să calculăm cheltuielile de energie electrică. Un calculator personal obișnuit nu are o putere mai mare de 200 W. Toate calculatoarele în sumă vor cheltui 400 W. Pe parcursul proiectului, timp de 58 de zile vor fi consumate:
kWh
Coeficientul 0,8 în formula de calcul apare din cauza că calculatoarele nu lucrează în continuu cele 8 ore pe zi.
La momentul actual un kWh costă 0,65 lei, deci cheltuielile vor fi:
149 0,65 = 96,85 97 lei
Necesitățile în materiale, soft și hard sunt prezentate în tabelele 8.4 și 8.5
Tabelul 5
Costul hardului și softului procurat
Tabelul 6
Costul materialelor utilizate
Deoarece procurarea hardului și a softului în domeniul Tehnologiilor Informaționale este considerată ivenstiție de capital, v-om amortiza aceste cheltuieli timp de 2 ani – termen în care totul din acest domeniu se uzează moral:
;
unde: S – suma ce trebuie de amortizat;
A – perioada de amortizare în ani;
Z – perioada proiectului în zile.
lei;
Tabelul 7
Calculul prețului de livrare a AEP
Această metodă informațională poate fi utilizat la crearea oricărui modul de colectare a datelor. Astfel de module sunt prezente aproape în toate sistemele informaționale. Noi ne vom concentra atenția la sistemele informaționale noi create. Ținând cont că în ultimul an au fost înregistrate mai mult de 1000 de întreprinderi, iar cel puțin a douăzecea partea din ele au nevoie de un asistent electronic public, noi estimăm livrarea a 50 de copii într-un an.
Sinecostul unei copii va fi
Tabelul 8
Estimarea prețului unei copii a programului
S-a presupus că cheltuielile suplimentare să fie recuperate de primele 100 de copii a programului realizate.
Avind date despre cost, eficiența economică poate fi calculată după următoarea formulă:
Eanual=(Pc-Sn)*N-Ken*(Ic+Ipr)
Unde:
Eanual-efectul economic anual;
Pc-prețul unei copii;
Sn-sinecostul unei copii;
N –numărul de copii realizate pe an;
Ken-coeficientul de normare a investițiilor capitale (=0,35);
Ic-investiții capitale;
Ipr-investișii de proiectare;
Vom considera că numărul de copii a programului pa an se va lua 50, iar investițiile capitale sînt estimateca fiind egale cu zero. Astfel obținem:
Eanual=(645,5-430,02)*50-0,35*(0+19551)=3908,15 lei
Un alt coeficient important în aprecierea eficacității economice este coeficientul eficienții investițiilor (sau timpul de recuperare a investițiilor):
Trec=(Ic+Ipr)/Eanual=(0+19551)/3908,15= 5
Calculăm coeficientul eficientii economice – Kec
Kec=1/Trec=1/5=0,20
P tot pe 50 de copii=50*(645,5-430.02)=10750 lei.
Valorile indicatorior eficienței economice vorbesc că crearea AEP este oportună.
7. PROTECȚIA MUNCII
Analiza condițiilor de muncă apreciate în timpul efectuării practicii de diplomă se apreciază în primul rând vizual aplicând noțiunile "normal" (n) și "periculos" (p). Analiza factorilor ce acționează asupra omului la locul de muncă e prezentată în formă de tabel (caracteristicile condițiilor sanitar-igienice, factorii de producție dăunători și periculoși):
Tabelul 9
Caracteristicile condițiilor sanitar-igienice și a factorilor de producție
Analiza condițiilor de muncă a fost efectuată pentru laboratorul firmei. In tabelă se indică condițiile optimale microclimaterice (STAS 12.1.005.88), care sunt destinate creării condițiilor favorabile de muncă pentru personalul centrului de calcul. După STAS ele sunt clasificate ca nepericuloase.
La laboratorul firmei se practică iluminarea naturală laterală și iluminarea artificială generală. Iluminarea corespunde normelor (SNIP-II-4-79).
La laboratorul firmei persistă zgomotul, generat de surse de zgomot de diferite tipuri. Imprimantele creează zgomot metalic, instalațiile de condiționare-aerodinamice, transformatoarele de tensiune-magnetice. Datorită măsurilor luate (folosirea barajelor acustice, planificarea rațională a încăperii) nivelul de zgomot la locul de muncă nu depășește nivelul admisibil.Analiza condițiilor de muncă a arătat că la laboratorul firmei sunt toți factorii, necesari pentru izbucnirea incendiului (sursa de aprindere: sursa de curent electric, hârtia, etc.)„ De acea la laboratorul firmei sunt prevăzute mijloace primare de stingere a incendiului – furtunuri
în rezultatul analizei condițiilor de muncă la locul de lucru, putem spune că ele corespund normelor și sînt favorabile pentru lucru.
Analiza ergonomică și aprecierea locului de muncă
Progresul tehnic ce a atins diferite domenii a producerii, folosirea pe larg a tehnicii de calcul și prelucrarea numerică a semnalelor, sistemele automate de proiectare sunt legate tot mai mult și mai mult cu trecerea de la munca fizică la munca intelectuală. Automatizarea și computerizarea duc la schimbarea mijloacelor și caracterului activității de muncă, la schimbarea condițiilor de muncă.
Totodată automatizarea și computerizarea pot avea și urmări sociale negative, deoarece se cer cerințe înalte față de posibilitățile psihofizice a inginerului-operator. în felul acesta, funcțiile activității în condițiile automatizării se schimbă. în procesul de lucru operatorul primește, memorează si prelucrează un mare volum de informație, ia diferite decizii și dirijează cu starea sistemului.
Principalul conținut a activității omului îl alcătuiesc procesele de memorare și psihice – recepționarea activă, memorarea și gândirea. De aceea în condițiile actuale a apărut necesitatea de a efectua acordarea dintre construcțiile sistemelor tehnice și condițiile lor de funcționare cu posibilitățile psihofizice a lucrătorului.
Cu studierea și proiectarea interacționării omului (a unui grup de oameni) în procesul de lucru cu mijloacele tehnice, obiectele de activare cu mediul ambiant se ocupă ergonomică. Țelul analizei ergonomice – ridicarea eficienței și calității activității omului în sistemul "om – mașină – obiect – mediu" cu condițiile păstrării sănătății omului. în procesul de lucru a operatorului un mare rol îl ocupă dispozitivele de vizualizare a informației care trebuie să satisfacă anumite cerințe ergonomice.
Ergonomie – știință, care studiază în mod complex particularitățile psihofiziologice, anatomice și antropologice ale omului în procesul muncii, precum și problemele igienei, toxicologiei. biomecanicii și biofizicii în scopul de a crea omului condiții optime de muncă cu un consum minim de energie. Respectarea recomandațiilor ergonomice duce la ridicarea productivității muncii omului și la păstrarea capacității lui de muncă, a forței musculare și a sănătății lui. Cercetările ergonomice se extind și asupra unor discipline specializate (psihologia inginerească, protecția muncii). Termenul "ergonomie" a fost pus în circulație în Anglia (1949) de către un grup de specialiști.
Din punct de vedere ergonomic locul de muncă destinat proiectării este amenajat satisfăcător, dat fiind faptul că pentru proiectare sunt prezente:
un calculator IBM cu monitor color de o rezoluție satistăcâtoare;
microclima încăperii este asigurată de un condiționer;
proiectarea se efectuează cu ajutorul unui pachet destul de comod de proiectare a schemelor electrice principiale;
scaune foarte comode, o masă specială, ce permite aranjarea comodă a tuturor componentelor necesare proiectării (blocul calculatorului, monitorul, imprimanta, scheme electrice proiectate).
Ca neajuns din punct de vedere ergonomic este generarea zgomotelor de către condiționer și imprimantă;
Aprecierea pericolului electrocutarii
Analiza accidentelor arată că partea electrocutării în producție face undeva 40 la 100, dar în sistemele energetice ajung 60 la 100. Acțiunea curentului electric poate fi termică, electrică, biologică, mecanică.
Pericolul depinde de tipul de atingere și de tipul rețelei. Tipul de atingere poate fi la un pol sau două poluri la rețea monofazică, sau la o fază sau la 2 a rețelei trifazice. Cea mai periculoasă este atingerea omului la doi poli sau 2 faze. Curentul care, se scurge prin om este
Ih=Uc/Rc
Dacă omul se atinge de o fază în rețelele trifazice, atunci pericolul depinde de tipul rețelei (curentul alternativ provoacă un pericol mai mare decât cel continuu).
Măsurele de electrosecuritate
Folosirea tensiunelor mici.
Separarea rețelelor electrice.
Dacă rețelele sînt lungi și ramificate, atunci capacitatea față de pământ se mărește, dar reactivă totală scade. De aceia se produce separarea rețelelor cu ajutorul transformatoarelor.
Folosirea și controlul izolării.
Izolarea poate fi
de lucru (menține tensiunea de lucru îndelungat); » adăugătoare (mânerele, carcasele);
izolarea dublă – se folosește, când este contact nemijlocit a electroutilajului cu organizmul uman;
izolarea perfecționată (izolarea de lucru dar are parametri izolării dublei.
Starea izolării se caracterizează cu rezistența electrică activă, care periodic se controlează cu megommetru și trebuie să fie nu mai mic ca 0.5 MH. Periodic se controlează regiditatea electrică (se aplică o tensiune majoră până la 3UIIUix într-un timp scurt). Protecția prin legarea la pământ constă în egalarea potențialelor, și dacă omul va atinge carcasa, atunci curentul care va trece prin el va fi minim.
Asigurarea inactivității părților conductoare fără izolare:
Atârnarea firelor la înălțime
Îngrădirea lor
Legarea la pământ, se folosesc în rețele cu neutrala izolrtă – unirea carcaselor cu priza de pământ
Protecția prin legarea la nul.
Se folosește la rețelele cu neutrala legată la pământ. Ea prezintă unirea carcaselor cu firul de protecție nul, care este unit cu neutrala legată la pământ. Dacă apare tensiunea, atunci se va scurge prin carcasă, prin firul nul, prin neutrală, prin firul fazic și formează un circuit. Acest circuit are o rezistență mică și deci o intensitate mare ceia ce va provoca arderea siguranței.
Nivelarea potențialelor – legarea tuturor carcaselor a utilajului dat cu carcasa generală.
Protecția prin legarea la pământ este unirea carcaselor cu priza de pământ, prezintă un ansamblu de electrozi bătuți în pământ de la (0,8-3)^ în adâncime și uniți în paralel pentru asigurarea legături bune cu pământul. Protecția prin legarea la pământ constă în egalarea potențialelor dintre carcasă și pământ și în caz de atingere a omului curentul, care trece prin el este foarte mic.
Protecția prin legarea la nul. Protecția prin legarea la nul prezintă unirea carcaselor cu la nul, care la rândul său este unit cu neutrala legată la pământ. Dacă apare tensiunea pe carcas curentul se scurge prin carcasă, prin firul nul, prin neutrală, prin firul fazic și în rezultat formează un circuit cu o rezistență electrică mică, ceia ce provoacă scurtcircuit, care este mare și provoacă arderea fuzibilităților. Protecția legarea la nul constă în reducerea duratei scurgerii curentului prin organismul omului. în laborator se folosește legarea prizei la pământ.
Cerințele ergonomice ale dispozitivului
Criteriile ergonomice de bază:
securitate;
reparabilitatea;
comoditatea exploatării;
Cerințele ergonomice generale și recomandațiile către construcția aparatajului sunt îndreptate spre asigurarea securității și ridicarea productivității muncii tehnicienilor, operatorilor și personalului de deservire. Deși multe din cerințe par a fi triviale, ele încă nu întotdeauna și nu complet sunt realizate.
Cerințele ergonomice pentru design:
Design – metodă de creare a unor forme estetice ale obiectelor, în care ideea constructivă, argumentată din punct de vedere tehnic și economic, capătă o formă expresivă, de o înaltă valoare estetică, îmbinată organic cu conținutul și destinația funcțională a obiectului, fiind potrivită condițiilor lui de utilizare. Aplicarea designului permite obținerea cu cheltuieli minime a unei producții industriale care se deosebește prin comoditate, confort și securitate în exploatare, prin greutate și gabarite reduse, acționare fără zgomot și printr-un aspect frumos.
Cerințele ergonomice generale:
1). Dispozitivele electronice trebuie proiectate și construite utilizând maximal module și elemente standarde.
2). Trebuie să fie asigurată posibilitatea montării, demontării simple și rapide, a extragerii, substituirii sau remontării a unor elemente aparte. Instrumentele necesare pentru astfel de operații trebuie păstrate într-un loc accesibil.
3). Trebuie de înlăturat posibilitatea instalării, schimbării și montării greșite a blocurilor sau componentelor și de prevăzut măsurile pentru ce asigură identificarea, orientarea și amplasarea corectă a cablurilor și conectorilor
Cerințele ergonomice la instalarea componentelor în interiorul blocurilor aparatajului electronic:
1). Componentele de formă identică sau asemănătoare trebuie să fie ușor identificate și deosebite.
2). Componentele fragile trebuie amplasate în așa mod, ca ele să nu se deterioreze în timpul efectuării lucrărilor de montare /reglare.
Cerințele ergonomice pentru organele de dirijare cu reglarca și acordare:
1). Toate organele de reglare trebuie să fie asistate de indicatoare sau cn mijloace de legătură inversă.
2). Regulatoarele pentru rotire limitată trebuie să fie asigurate cu delimitatori mecanici pentru evitarea deteriorării.
3. Organele de reglare sensibilă trebuie să fie protejate sau amplasate astfel ca ele să nu fie întâmplător atinse.
Cerințele ergoiiomice pentru accesihilitatca componentelor:
1). Elemcntele dc construcție ale blocurilor nu trebuie să închidă accesul la componente.
2). Detaliile care mai des trebuie schimbate din cauza frecvenței înalte de defectare ale lor trebuie de amplasat astfel ca să nu fie necesară deniontarea componentelor apte de kicru.
Cerinte-ergonomice pentru conductoare – electrice:
1). Conductoarele electrice trebuie să fie unite în mănunchiuri.
2). Cablurile trebuie să fie marcate pentru ca să fie clar la ce bloc ele se referă și la ce conectoare trebuie unite.
3). Cablurile trebuie să fie îndeajuns de lungi pentru a avea posibilitatea de a extrage fiecare bloc pentru a putea fi verificat sau reparat.
4). Cablurile trebuie protejate astfel ca ele sa nu poată fi deteriorate prin careva acțiuni involuntare.
Dat fiind faptul că dispozitivul proiectat este un sistem portativ cerințele ergonomice față de el se reduc la:
1). Minimizarea dimensiunilor și masei dispozitivului.
2). Reducerea vibrațiilor cauzate de părțile rotative ale aparatului sau evitarea în genere a componentelor mecanice.
3). Utilizarea unei surse de alimentare autonome.
Pentru prevenirea incendiilor sunt necesare următoarele măsuri:
a) prevenirea și combaterea formării mediului inflamabil;
b) prevenirea și combaterea formării în mediul inflamabil a surselor
și cauzelor de aprindere;
c) menținerea temperaturii și presiunii mediului inflamabil mai jos de nivelul de autoinflamare;
d) micșorarea mărimii determinate (dimensiune, volum, cantitate) a mediului inflamabil la nivel mai jos de cel de ardere sinestătătoare,
Securitatea în caz de incendiu se asigură de următoarele măsuri:
Aplicarea maximă posibilă a materialelor și substanțelor nearzătoare și greu fuzibile în locul celor ce prezintă pericol, Limitarea substanțelor fuzibile și amplasarea lor în laborator corespunzător normelor stabilite,
a) izolarea mediului inflamabil;
b) prevenirea răspândirii incendiului din limitele focarului;
c) aplicarea surselor de stingere eficiente;
d) folosirea construcțiilor cu limită reglamentată de rezistența la ardere și de ardere de sinestătătoare;
e) evacuarea oamenilor, conform planului de evacuare în caz de incendiu;
f) utilizarea mijloacelor de securitate colectivă și personală;
utilizarea mijloacelor de semnalizare antiincendiară;
organizarea pazei antiincendiare,
CONCLUZII
În aceasta lucrare de diplomă este elaborat și realizat un produs soft complet – asistent electronic public. El înclude în sine o gama largă de servicii online: calendarul, notițele, păstrarea evinementelor pe o perioadă nelimitată de timp, referințele preferate, păstrarea infromației personale, carnetul de adrese. Posibilitaile și facilitățile lui sînt destule pentru a înlocui mijloacele tradiționale de organizarea informației pe hîrtie. AEP mai dispune de posibilăți care nu le au analogii lui de hirtie : posibilitatea de a tremite mesaje de alert, securitatea informației păstrate, spațiul nelimitat.
Acest produs este explorat deja în rețea, adresa web – secretary.hit.md, și va fi dotat în versiunea lui finală cu posibilitățile mai largi: lucrul cu poșta electronică.
In perioada actuala elaborarea si punerea in funcțiune a asistentului electronic public este o schimbare modernă a conceptului de organizare si păstrare a datelor și este o introducere binevita pentru utilizatori în instituțiile publice și unitățile economice. Organizarea datelor in rețea a devenit astăzi o necesitate stringentă, deoarece volumul si complexitatea informației crește pe orice zi, iar ramânerea în urma în acest domeniul aduce pierderi organizatorice considerabile.
El poate fi folosit în organizațiile mijlocii și mari, agenți economici, insituții de stat care au un număr mare de utilizatori și pot permite instalarea și intreținere cuplului: web-server, serverul SGBD. Pentru o organizație e comod ca lucratorii în cadrul ei să dispuna de facilitațile AEP prentru că se micșorează cheltuieli organizatorice.
AEP este o aplicație care face parte din rîndul de aplicații cu o concepție nouă de accesarea datelor. Informația nu este păstrata la calculatorul utilizatorului ci se află pe un server în rețea : o astfel de aplicații au apărut în număr mare în ultimul timp și vor apărea curînd. Ca de exemplu poate fi arătat sistemul de operare Windows XP, care va înclude în versiunea sa finală unele servicii Internet de felul realizate mai sus. O astfel de concepție va fi realizată în versiunea urmatoare a Internet pagerului ICQ, se va încărca un applet Java prin browser iar datele despre adresați vor fi păstrate pe serverul Mirabilis corporation. Exemplele expuse mai sus arată perspectiva astfel de aplicații în lumea contemporană mobilă.
Realizarea acestui proiect a fost o încercare de crea o aplicație cu facilități bune și destule pentru utilizatorii din Republica Moldova.
BIBLIOGRAFIE
[1] Самоучитель Perl – Александр Мастросов, Михаил Чаунин, Ed. BHV, Peterburg 2000, ISBN 5-8206-0070-3
[2] MySQL and mSQL – Randy Jay, George Reese, Tim King, Ed.O’Reilly 1999
ISBN: 1-56592-434-7
[3] CGI/Perl Создание програм для Web – К. Пэтчетт, М. Райт, Ed. BHV, Chiev 1999, ISBN 0-7315-0043-6
[4] CGI- программирование. Учебный курс – Алексей Павлов, Ed. Питер 2000, ISBN 5-272-00242-3
[5] Programming Perl – Larry Wall, Tom Christiansen & Jon Orwant Ed. O’Reilly 2000
ISBN-0-596-00027-8
[6] HTML 4.0 в подлинике – Александр Мастросов, Михаил Чаунин, Ed. BHV, Санкт-Петербург 1999, ISBN 5-8206-0072-X
[7] Perl Cookbook. Tips and Tricks for Perl Programmers – Tom Christiansen & Nathan Torkington Ed. O’Reilly 1998 ISBN-1-56592-243-3
[8] http://www.beep.ru
[9] http://anyday.com
[10] http://www.mywebos.com
[11] http://calendar.rambler.ru
[12] http://www.ezcontact.com
[13] http://www.webaddressbook.com
[14] http://www.daylydrill.com
[15] http://www.perl.com/pub
[16] http://www.mysql.com/
[17] http://www.apache.com/
[18] http://www.programare.ro
[19] http://phobos.cs.unibuc.ro/~ancag/proiect/
[20] http://www.computerworld.com/
[21] http://www.citforum.ru
[22] http://www.resurse.com/programare/
[23] http://rowd.go.ro/articole/tehnologie/
[24] http://conferences.oreilly.com/perl/
ANEXE
Anexa 1
Graful rețea la estimarea economică
Anexa 2
Codul sursă al programului secretary.pl
#!/usr/bin/perl
use Mysql;
use Socket;
use Date::Manip;
require 'login.pl';
require 'mail.pl';
require 'personal.pl';
require 'calendar.pl';
require 'address.pl';
require 'note.pl';
require 'bookmarks.pl';
require 'settings.pl';
print "Content-type: text/html\n\n";
$dbh = Mysql->Connect($host,$database,$user,$password);
$attach_folder = "/plan.md/attachments/";
sysread(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
if ($ENV{'CONTENT_TYPE'} =~ /multipart/)
{
($bound) = ($ENV{'CONTENT_TYPE'} =~ /boundary=(\S+)/);
@arguments = split (/–$bound(-)*\n/,$buffer);
@arguments = grep (length > 2, @arguments);
for $item (@arguments)
{
$item =~ s/Content-Disposition: form-data; name=\"//g;
@nt = split (/"\s*/,$item,2);
if ($nt[0] ne 'file') { chop $nt[1]; }
$args{$nt[0]} = $nt[1];
if ($nt[0] eq 'file')
{
@fl = split (/\n/,$nt[1],4);
chop $fl[3];
$filedata = $fl[3];
($filename) = ($fl[0] =~ /filename=\"(.+)\"/);
if ($filename =~ /\\/) { ($filename) = ($filename =~ /\\([^\\]+)$/); }
if ($filename =~ /\//) { ($filename) = ($filename =~ /\/([^\/]+)$/); }
}
}
}
else
{
@arguments=split("\&",$buffer);
foreach $item (@arguments)
{
@nt = split("=",$item,2);
$nt[1] =~ tr/+/ /;
$nt[1] =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($)/eg;
$nt[1] =~ s/"/""/g;
$args{$nt[0]} = $nt[1];
#print "$nt[0] = $nt[1]<br>";
}
}
if ($args{'Session'})
{
$query = "SELECT Login FROM Sessions WHERE Session=\"$args{'Session'}\"";
$sth = $dbh->Query($query);
if ($sth->NumRows)
{
%arr = $sth->FetchHash;
$login = "\"$arr{'Login'}\"";
$user = $arr{'Login'};
$from = "$arr{'Login'}\@hit.md";
$tm = time;
$query = "UPDATE Sessions SET Time=$tm WHER Session=\"$args{'Session'}\"";
$sth = $dbh->Query($query);
}
else
{
&ShowLogin("Scuyați dar timpul de lucru sa terminat. Trebuie să intrți încă o dată");
exit;
}
}
@pagers = ("Telecom Pager","NewPage");
if ($args{'Action'} eq 'register') { &Registration; }
elsif ($args{'Action'} eq 'login') { &LogIn; }
elsif ($args{'Action'} eq 'logout') { &LogOut; }
elsif ($args{'Action'} eq 'inbox') { &Inbox; }
elsif ($args{'Action'} eq 'outbox') { &Outbox; }
elsif ($args{'Action'} eq 'drafts') { &Drafts; }
elsif ($args{'Action'} eq 'deleted') { &Deleted; }
elsif ($args{'Action'} eq 'newmessage') { &NewMessage; }
elsif ($args{'Action'} eq 'sendmessage') { &SendMessage; }
elsif ($args{'Action'} eq 'savedraft') { &SaveDraft; }
elsif ($args{'Action'} eq 'uploadfile') { &UploadFile; }
elsif ($args{'Action'} eq 'readmessage') { &ReadMessage; }
elsif ($args{'Action'} eq 'replymessage') { &ReplyMessage; }
elsif ($args{'Action'} eq 'forwardmessage'){ &ForwardMessage; }
elsif ($args{'Action'} eq 'editmessage') { &EditMessage; }
elsif ($args{'Action'} eq 'deletemessage'){ &DeleteMessage; }
elsif ($args{'Action'} eq 'dropmessage') { &DropMessage; }
elsif ($args{'Action'} eq 'addtask') { &AddTask; }
elsif ($args{'Action'} eq 'adddate') { &AddDate; }
elsif ($args{'Action'} eq 'updatetask') { &UpdateTask; }
elsif ($args{'Action'} eq 'deletetask') { &DeleteTask; }
elsif ($args{'Action'} eq 'deletedate') { &DeleteDate; }
elsif ($args{'Action'} eq 'showform') { &ShowForm; }
elsif ($args{'Action'} eq 'edittask') { &EditTask; }
elsif ($args{'Action'} eq 'gotodate') { &GoToDate($args{'Date'}); }
elsif ($args{'Action'} eq 'showweek') { &ShowWeek; }
elsif ($args{'Action'} eq 'showmonth') { &ShowMonth; }
elsif ($args{'Action'} eq 'showyear') { &ShowYear; }
elsif ($args{'Action'} eq 'personal') { &EditPersonal; }
elsif ($args{'Action'} eq 'updatepersonal'){ &UpdatePersonal; }
elsif ($args{'Action'} eq 'address') { &AddressBook; }
elsif ($args{'Action'} eq 'addcontact') { &AddContact; }
elsif ($args{'Action'} eq 'editcontact') { &EditContact; }
elsif ($args{'Action'} eq 'updatecontact'){ &UpdateContact; }
elsif ($args{'Action'} eq 'deletecontact'){ &DeleteContact; }
elsif ($args{'Action'} eq 'bookmarks') { &Bookmarks; }
elsif ($args{'Action'} eq 'addbookmark'){ &AddBookmark; }
elsif ($args{'Action'} eq 'addfolder') { &AddFolder; }
elsif ($args{'Action'} eq 'deletebookmark'){ &DeleteBookmark; }
elsif ($args{'Action'} eq 'notebook') { &Notebook; }
elsif ($args{'Action'} eq 'addnote') { &AddNote; }
elsif ($args{'Action'} eq 'viewnote') { &ViewNote; }
elsif ($args{'Action'} eq 'updatenote') { &UpdateNote; }
elsif ($args{'Action'} eq 'deletenote') { &DeleteNote; }
elsif ($args{'Action'} eq 'settings') { &Settings; }
elsif ($args{'Action'} eq 'help') { &Help; }
else
{ &ShowLogin; }
#+++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++
sub Help
{
open (template,"html/help.shtml");
while ($line = <template>)
{
if ($line =~ /<input type=hidden name=Session>/)
{
print "<input type=hidden name=Session value=\"$args{'Session'}\">\n";
}
elsif ($line =~ /<body bgcolor=/)
{
print "<body bgcolor=\#FFFFFF onLoad=\"javascript:location.href=\'\#$args{'HelpID'}\'\">\n";
}
else { print $line; }
}
}
#+++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++
sub ShowLogin
{
open (template,"html/login.shtml");
while ($line = <template>)
{
if ($line =~ /<<message>>/)
{
if ($_[0]) { print "<br>\ \;<b>$_[0]</b><br><br>"; }
}
else { print $line; }
}
}
sub LogIn
{
$query = "SELECT Login, Pswd FROM Login WHERE Login=\"$args{'Login'}\"";
$sth = $dbh->Query($query) || print $Mysql::db_errstr;
%arr = $sth->FetchHash;
if ((!$sth->NumRows) || ($args{'Password'} ne $arr{'Pswd'}))
{
&ShowLogin ("Numarul vostru de utliliyator nu e corect.");
}
else
{
&GetSessionID;
$tm = time;
$query = "INSERT INTO Sessions (Session,Login,Time) VALUES (\"$session\",\"$args{'Login'}\",\"$tm\")";
$sth $dbh->Query($query);
$args{'Session'} = $session;
$login = "\"$args{'Login'}\"";
&Inbox;
}
}
#+++++++++++++++++++++++++++++++++++++++++++++++++++++
sub GetSessionID
{
$session = "";
for ($i=0;$i<48;$i++) { $session .= int rand 10; }
$query = "SELECT Session FROM Sessions WHERE Session=\"$session\"";
$sth = $dbh->Query($query);
if ($sth->NumRows) { &GetSessionID; }
}
#+++++++++++++++++++++++++++++++++++++++++++++++++++++
sub LogOut
{
$query = "DELETE FROM Sessions WHERE Session=\"$args{'Session'}\"";
$sth = $dbh->Query($query);
&ShowLogin;
}
#+++++++++++++++++++++++++++++++++++++++++++++++++++++
sub Registration
{
$query = "SELECT Login FROM Login WHERE Login=\"$args{'Login1'}\"";
$sth = $dbh->Query($query);
if (!$sth->NumRows)
{
for ($i=0;$i<12;$i++) { $passwd .= int rand 12; }
$add_ok = `/usr/home/secretary/mcgi/adduser.pl $args{'Login1'} $passwd`;
if (!$add_ok)
{
$query = "INSERT INTO Login (Login,Pswd,Pop) VALUES (\"$args{'Login1'}\",\"$args{'Password1'}\",\"$passwd\")";
$sth = $dbh->Query($query) || print $Mysql::db_errstr;
$args{'Login'} = $args{'Login1'};
$args{'Password'} = $args{'Password1'};
&LogIn;
}
}
else
{
&ShowLogin("Scuyati dar nume de utiliyator deja exista<b>$args{'Login1'}</b> Alegeți un alt nume");
}
}
#+++++++++++++++++++++++++++++++++++++++++++++++++++++
sub Bookmarks
{
$query = "SELECT * FROM Bookmarks WHERE Login=$login";
$sth = $dbh->Query($query)|| print "$Mysql::db_errstr";
open (template, "html/bookmarks.shtml");
while ($line = <template>)
{
if ($line =~ /<<data>>/)
{
$len = length($args{'Code'});
$len2 = length($args{'Code'}) + 2;
$query = "SELECT * FROM Bookmarks WHERE Code LIKE \"$args{'Code'}\%\" AND (LENGTH(Code) = $len OR LENGTH(Code) = $len2) AND Login=$login ORDER BY Type DESC, Code";
$sth = $dbh->Query($query)|| print "$Mysql::db_errstr";
print "<table celpadding=2 cellcpacing=0 border=0 width=100%><tr><td colspan=2></tr>";
if (!$args{'Code'}) { $i=0; }
else
{
$i=1;
%arr = $sth->FetchHash;
}
for (;$i<$sth->NumRows;$i++)
{
%arr = $sth->FetchHash;
if ($arr{'Type'})
{
print "<tr><td width=20><img src=\"/images/folder.gif\"></td><td><b><a href=\"javascript:Bookmarks(\'$arr{'Code'}\')\" title=\"$arr{'Description'}\">$arr{'Title'}</a></b> (<a href=\"javascript:DeleteBookmark(\'$arr{'Code'}\')\" class=small>Șteregere</a>)</td></tr>";
}
else
{
print "<tr><td width=20></td><td><a href=\"$arr{'Path'}\" title=\"$arr{'Description'}\">$arr{'Title'}</a> (<a href=\"javascript:DeleteBookmark(\'$arr{'Code'}\')\" class=small>Stergerea</a>)</td></tr>";
}
}
if ($sth->NumRows < 2) { print "<tr><td>\ \;\ \;Date nu sint çàêëàäêè.</td></tr>"; }
print "</table>";
}
elsif ($line =~ /<input type=hidden name=Session>/)
{
print "<input type=hidden name=Session value=\"$args{'Session'}\">\n";
}
elsif ($line =~ /<<path>>/)
{
print "\ \;<b><a href=\"javascript:Bookmarks(\'\')\">Êîðíåâàÿ ïàïêà</a> ";
$code = $args{'Code'};
for ($i=1;$i<=length($args{'Code'})/2;$i++)
{
$code = substr($args{'Code'},0,$i*2);
$query = "SELECT * FROM Bookmarks WHERE Code = \"$code\" AND Login=$login";
$sth = $dbh->Query($query)|| print "$Mysql::db_errstr";
%arr = $sth->FetchHash;
print "| <a href=\"javascript:Bookmarks(\'$arr{'Code'}\')\">$arr{'Title'}</a> ";
}
print "</b>";
}
elsif ($line =~ /<<codeinput>>/)
{
print "<input type=hidden name=Code value=\"$args{'Code'}\">\n";
}
else { print $line; }
}
}
#+++++++++++++++++++++++++++++++++++++++++++++++++++++
sub AddBookmark
{
$query = "SELECT ID From Bookmarks WHERE Code LIKE \"$args{'Code'}\%\" AND Login=$login";
$sth = $dbh->Query($query)|| print "$Mysql::db_errstr";
$nc = $sth->NumRows;
if (length($nc) == 1) { $nc = $args{'Code'} . "0" . $nc; }
else { $nc = $args{'Code'} . $nc; }
if ($args{'Path'})
{
$query = "INSERT INTO Bookmarks (Login,Type,Code,Path,Title,Description) VALUES ($login,0,\"$nc\",\"$args{'Path'}\",\"$args{'Title'}\",\"$args{'Description'}\")";
$sth = $dbh->Query($query)|| print "$Mysql::db_errstr";
}
&Bookmarks;
}
#+++++++++++++++++++++++++++++++++++++++++++++++++++++
sub AddFolder
{
$query = "SELECT ID From Bookmarks WHERE Code LIKE \"$args{'Code'}\%\" AND Login=$login";
$sth = $dbh->Query($query)|| print "$Mysql::db_errstr";
$nc = $sth->NumRows;
if (length($nc) == 1) { $nc = $args{'Code'} . "0" . $nc; }
else { $nc = $args{'Code'} . $nc; }
if ($args{'Title'})
{
$query = "INSERT INTO Bookmarks (Login,Type,Code,Title,Description) VALUES ($login,1,\"$nc\",\"$args{'Title'}\",\"$args{'Description'}\")";
$sth = $dbh->Query($query)|| print "$Mysql::db_errstr";
}
&Bookmarks;
}
#+++++++++++++++++++++++++++++++++++++++++++++++++++++
sub DeleteBookmark
{
$query = "DELETE FROM Bookmarks WHERE Code LIKE \"$args{'BookmarkID'}\%\" AND Login=$login";
$sth = $dbh->Query($query)|| print "$Mysql::db_errstr";
&Bookmarks;
}
#+++++++++++++++++++++++++++++++++++++++++++++++++++++
sub AddTask
{
if ($args{'Description'})
{
($year,$month,$day) = split ("-",$args{'Date'});
$month_length = &Date_DaysInMonth($month,$year);
if ($day > $month_length) { $args{'Date'} = "$year-$month-$month_length"; }
if (!$args{'SendEmail'}) { $args{'Email'} = ""; }
if (!$args{'SendSMS'}) { $args{'SMS'} = ""; }
if (!$args{'SendPager'}) { $args{'Pager'} = ""; }
if ($args{'Transliterate'}) { $args{'Message'} = &Transliterate($args{'Message'}); }
$query = "INSERT INTO Tasks (Login,Date, Time, Category, Description, RemTime, Email, SMS, Operator, Pager, Message)
VALUES ($login,\"$args{'Date'}\", \"$args{'Time'}\", \"$args{'Category'}\", \"$args{'Description'}\", \"$args{'RemTime'}\", \"$args{'Email'}\", \"$args{'SMS'}\", \"$args{'Operator'}\", \"$args{'Pager'}\", \"$args{'Message'}\")";
$sth = $dbh->Query($query) || print "$Mysql::db_errstr";
&GoToDate($args{'Date'});
}
else { &GoToDate; }
}
#+++++++++++++++++++++++++++++++++++++++++++++++++++++
sub AddDate
{
if ($args{'Description'})
{
$month_length = &Date_DaysInMonth($args{'Month'},2000);
if ($args{'Day'} > $month_length) { $args{'Day'} = $month_length; }
$query = "INSERT INTO Dates (Login,Day,Month,Year,Category,Description)
VALUES ($login,\"$args{'Day'}\",\"$args{'Month'}\",\"$args{'Year'}\",\"$args{'Category'}\",\"$args{'Description'}\")";
$sth = $dbh->Query($query) || print "$Mysql::db_errstr";
if ($args{'Party'})
{
$args{'Formname'} = 'party';
&ShowForm;
}
else { &GoToDate($args{'Date'}); }
}
else { &GoToDate; }
}
#+++++++++++++++++++++++++++++ +++++++++++++++++++++++++++
sub UpdateTask
{
$query = "DELETE FROM Tasks WHERE ID=$args{'ID'} AND Login=$login";
$sth = $dbh->Query($query);
&AddTask;
}
# ++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++
sub DeleteTask
{
$query = "DELETE FROM Tasks WHERE ID=$args{'TaskID'} AND Login=$login";
$sth = $dbh->Query($query);
&GoToDate($args{'Date'});
}
Anexa 3
Codul sursă al programului service.pl
#!/usr/bin/perl
use Socket;
use Mysql;
print "Content-type: text/html\n\n";
$dbh = Mysql->Connect($host,$database,$user,$password);
$tm = time – 1800;
$query = "DELETE FROM Sessions WHERE Time < $tm";
$sth = $dbh->Query($query);
($sec,$min,$hour,$day,$month,$year,$week_day,$yday,$isdst) = localtime(time);
$year += 1900;
$month++;
if ($min < 10) { $min="00"; }
elsif ($min >=10 && $min <20) { $min="10"; }
elsif ($min >=20 && $min <30) { $min="20"; }
elsif ($min >=30 && $min <40) { $min="30"; }
elsif ($min >=40 && $min <50) { $min="40"; }
elsif ($min >=50) { $min="50"; }
$query = "SELECT RemTime, Email, Operator, Pager, SMS, Message FROM Tasks WHERE RemTime=\"$year-$month-$day $hour:$min:00\"";
$sth = $dbh->Query($query);
$ec="0";$sc="0";$cp="0";
for ($i=0;$i<$sth->NumRows;$i++)
{
%arr = $sth->FetchHash;
if ($arr{'Email'}) { &SendEmail('asistent.hit.md',$arr{'Email'},'Measjul de avertizare',$arr{'Message'}); $ec++;}
if ($arr{'SMS'}) { &SendSMS($arr{'SMS'},$arr{'Message'}); $sc++;}
if ($arr{'Pager'}) { &SendPager($arr{'Operator'},$arr{'Pager'},$arr{'Message'}); $cp++;}
}
($sec,$min,$hour,$day,$month,$year,$week_day,$yday,$isdst) = localtime(time);
$year += 1900;
$month++;
$query = "SELECT * FROM Sessions";
$sth = $dbh->Query($query);
$ses = $sth->NumRows;
print "[$year/$month/$day $hour:$min:$sec] $ses sessions active. $ec email messages, $sc SMS messages, $cp pager messages was sent";
sub SendEmail
{
local ($from,$to,$subject,$message) = @_;
$host="dnt.md";
$port="25";
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
$iaddr = inet_aton($host);
$paddr = sockaddr_in($port, $iaddr);
connect(SOCK, $paddr);
$data=<SOCK>;
send (SOCK,"helo titan\n", 0);
$data=<SOCK>;
send (SOCK,"mail from: <>\n", 0);
$data=<SOCK>;
send (SOCK,"rcpt to: $to\n", 0);
$data=<SOCK>;
send (SOCK,"data\n", 0);
$data=<SOCK>;
send (SOCK,"from: $from\n", 0);
send (SOCK,"Subject: $subject\n", 0);
send (SOCK,"To: $to\n", 0);
send (SOCK,"Content-type: text/plain\n", 0);
send (SOCK,"\n", 0);
send (SOCK,"$message\n", 0);
send (SOCK,".\n", 0);
$data=<SOCK>;
send (SOCK,"quit\n", 0);
$data=<SOCK>;
close(SOCK);
}
sub SendPager
{
local($operator,$pager,$message) = @_;
if ($operator == 1)
{
&SendEmail("","540540\@pagers.md",$pager,"secretary.hit.md reminder \n$message");
}
Anexa 4
Bloc schema programului secretary.pl
Anexa 5
Interacțiunea programului cu SGBD
Anexa 6
Interacțiune client-server la executarea programului CGI
Anexa 7
Interfața AEP
Anexa 8
Bloc schema programului service.pl
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Elaborarea Unui Asistent Electronic Public (ID: 161071)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
