Arhitecturi Moderne DE Site Uri Pentru Program European Erasmus
FUNDAȚIA PENTRU CULTURĂ ȘI ÎNVĂȚĂMÂNT “IOAN SLAVICI” TIMIȘOARA
UNIVERSITATEA “IOAN SLAVICI” TIMIȘOARA
FACULTATEA DE INGINERIE
DOMENIUL CALCULATOARE ȘI TEHNOLOGIA INFORMAȚIEI
FORMA DE ÎNVĂȚĂMÂNT – ZI
LUCRARE DE LICENȚĂ
CONDUCĂTOR ȘTIINȚIFIC
prof. univ. dr . Titus Slavici
ABSOLVENT
Nicević Mirsad
– 2016 –
FUNDAȚIA PENTRU CULTURĂ ȘI ÎNVĂȚĂMÂNT “IOAN SLAVICI” TIMIȘOARA
UNIVERSITATEA “IOAN SLAVICI” TIMIȘOARA
FACULTATEA DE INGINERIE
DOMENIUL CALCULATOARE ȘI TEHNOLOGIA INFORMAȚIEI
FORMA DE ÎNVĂȚĂMÂNT – ZI
ARHITECTURI MODERNE DE SITE-URI PENTRU PROGRAM EUROPEAN ERASMUS
CONDUCĂTOR ȘTIINȚIFIC
prof. univ. dr . Titus Slavici
ABSOLVENT
Nicević Mirsad
2016
UNIVERSITATEA DIN ORADEA
FACULTATEA de Inginerie Electrică Și Tehnologia Informației
DEPARTAMENTUL Calculatoare Și tehnologia informației
TEMA _________________
Lucrare de Finalizare a studiilor a studentului________________________
1). Tema lucrării de finalizare a studiilor: __________________________________________________________________________________________________________________________________________________________________________________________________________
2). Termenul pentru predarea lucrării ______________________________________________
3). Elemente inițiale pentru elaborarea lucrării de finalizare a studiilor __________________________________________________________________________________________________________________________________________________________________________________
4). Conținutul lucrării de finalizare a studiilor: _______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
5). Material grafic: ________________________________________________________________________________________________________________________________________________________________________________________________________________________________
6). Locul de documentare pentru elaborarea lucrării:
__________________________________________________________________________________________________________________________________________________________
7). Data emiterii temei _____________________________________________________________
Coordonatori Științifici
Prof. Univ. Dr. Titus Slavici
REFERAT
PRIVIND LUCRAREA DE LICENȚĂ
A
ABSOLVENTULUI / ABSOLVENTEI : ……………………………………….
DOMENIUL Calculatoare Și tehnologia informației
SPECIALIZAREA Tehnologia Informației
PROMOȚIA 2016
Titlul lucrării ………………………………………………………………………..
…..…………………………………………………………………………………………………
Structura lucrării …………………………………………………………………….
…………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………………………………………………………………………………………………
Aprecieri asupra conținutului lucrării de LICENȚĂ (finalizare a studiilor), mod de abordare, complexitate, actualitate, deficiențe
………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
Aprecieri asupra lucrării (se va menționa: numărul titlurilor bibliografice consultate, frecvența notelor de subsol, calitatea și diversitatea surselor consultate; modul în care absolventul a prelucrat informațiile din surse teoretice)
…………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
(se va menționa: opțional locul de documentare și modul în care absolventul a realizat cercetarea menționându-se contribuția autorului)
……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
Concluzii (coordonatorul lucrării trebuie să aprecieze valoarea lucrării întocmite, relevanța studiului întreprins, competențele absolventului, rigurozitatea pe parcursul elaborării lucrării, consecvența și seriozitatea de care a dat dovadă absolventul pe parcurs)
……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
Redactarea lucrării respectă …………………………………………………. cerințele academice de redactare (părți, capitole, subcapitole, note de subsol și bibliografie).
Consider că lucrarea îndeplinește / nu îndeplinește condițiile pentru susținere în sesiunea de Examen de LICENȚĂ (finalizare a studiilor) din IULIE 2016 și propun acordarea notei ………………
Oradea,
Data Conducător Științific
Prof. univ. Dr. Titus Slavici
Cuprins
Introducere [1][2][3][4][5]
INTERNÉT s. n. Rețea internațională de calculatoare, formată prin interconectarea rețelelor locale și globale, destinată să faciliteze schimbul de date și informații în diverse domenii. – Abr. din engl. Inter[national] Net[work]. (conform cu Dicționarul Explicativ al limbii Române, ediția 2009).
Punctul de pornire în dezvoltarea Internetului a fost rivalitatea între cele două mari puteri ale secolului al XX-lea: Statele Unite ale Americii și Uniunea Sovietică. În 1957, URSS (Uniunea Republicilor Sovietice Socialiste) lansează în spațiul cosmic primul satelit artificial al Pământului denumit Sputnik. Acest fapt a declanșat o îngrijorare deosebită în Statele Unite ale Americii, astfel președintele Eisenhower înființează o agenție specială subordonată Pentagonului: Advanced Research Projects Agency (www.darpa.mil). Această agenție a Ministerului de Apărare (Department of Defense, prescurtat DOD) este condusă de oameni de știință, are o birocrație redusă, și are ca misiune: „Menținerea superiorității tehnologice a armatei Statelor Unite și prevenirea surprizei tehnologice în domeniul securității naționale prin sponsorizarea celor mai noi și revoluționare descoperiri științifice și prin investirea de fonduri teoretic nelimitate pentru realizarea unei legături între cercetarea științifică și implementarea tehnologică militară a acesteia.”
În 1959 John McCarthy, profesor la Universitatea Stanford, al cărui nume va fi asociat cu inteligența artificială, găsește soluția de a conecta mai multe terminale la un singur calculator central: time-sharing (partajarea timpului). Aceasta este o modalitate de lucru în care mai multe aplicații (programe de calculator) solicită acces concurențial la o resursă (fizică sau logică), prin care fiecărei aplicații i se alocă un anumit timp pentru folosirea resursei solicitate. Apărând apoi primele calculatoare în marile universități se pune problema interconectării acestora. Cercetătorul Lawrence Roberts susține o soluție de interconectare prin comutare de pachete (packet switching) în modelul numit "client-server". Astfel, pentru a transmite informația, aceasta este mărunțită în porțiuni mici, denumite pachete. Ca și la poșta clasică, fiecare pachet conține informații referitore la destinatar, astfel încât el să poată fi corect dirijat pe rețea. La destinație întreaga informație este reasamblată. Deși această metodă întâmpină rezistență din partea specialiștilor, în 1969 începe să funcționeze rețeaua "ARPANET" între 4 noduri: University of California din Los Angeles (UCLA), University of California din Santa Ana, University of Utah și Stanford Research Institute (SRI). Toate acestea au fost codificate într-un protocol care reglementa transmisia de date. În forma sa finală, acesta era TCP/IP (Transmission Control Protocol / Internet Protocol), creat de Vint Cerf și Robert Kahn în 1970 și care este și acum baza Internetului. TCP/IP face posibil ca modele diferite de calculatoare, de exemplu cele compatibile cu IBM sau și Mac's, folosind sisteme diferite de operare, cum ar fi UNIX, Windows, MacOS etc. să se "înțeleagă" unele cu altele. În acest fel, Internetul urma să devină cu adevărat independent de platforma harware utilizată. Prima conexiune ARPANET a fost realizată în 29 octombrie 1969, ora 22:30 între University of California din Los Angeles și Institutul de Cercetare Stanford
Ca program al Ministerului Apărării al SUA, ARPANET s-a dezvoltat uluitor de repede, la el conectându-se din ce în ce mai multe calculatoare. În 1979 ARPA decide să separe rețeaua în două, una pentru lumea comercială și universitară, și una militară. Cele două rețele puteau comunica în continuare, construindu-se practic o inter-rețea (internet) denumită inițial DARPA Internet și consacrată ulterior sub denumirea Internet. Numeroși cercetători din domeniul academic și militar si-au concentrat eforturile în scopul dezvoltării unor programe de comunicare în rețea. Astfel în 1980 o serie de programe de comunicare (bazate pe protocoale binedefinite), care sunt utilizate și astăzi, erau deja finalizate. În 1983, TCP/IP devine unicul protocol oficial al Internetului, și ca urmare, tot mai multe calculatoare din întreaga lume au fost conectate la ARPANET. Creșterea numărului de calculatoare conectate la Internet a devenit exponențială, astfel încât în 1990 Internetul cuprindea 3.000 de rețele și 300.000 de calculatoare. În 1992 era deja conectat calculatorul cu numărul 1.000.000. Apoi mărimea Internetului s-a dublat cam la fiecare an.
Dezvoltarea rapidă a Internetului s-a datorat faptului că accesul la documentația protocoalelor obligatorii a fost și este liber și gratuit. Marea schimbare a început în 1989, când Tim Berners Lee de la Centrul European pentru Fizica Nucleară din Geneva (CERN) a pus bazele dezvoltării primului prototip al World Wide Web (WWW sau web).
O altă schimbare radicală s-a produs când, în 1993, National Center for Supercomputing Applications (NCSA) din SUA a pus la dispoziție browserul "Mosaic", care era bazat pe o interfață grafică (Windows). Enorma creștere a webului a început aproape dintr-o dată: în iunie 1993 erau înregistrate 130 servere web, iar în 1994 erau deja peste 11.500 de servere.
Aplicațiile Internetului sunt numeroase: în primul rând afișarea de informații mai mult sau mai puțin statice cu formă de text, imagini și sunete (așa-numitele pagini web), apoi poșta electronică e-mail, transferul de fișiere de date și informații, chat, video și video on demand, telefonie și telefonie cu imagine prin Internet, televiziune prin Internet, e-commerce, sondări de opinie, mediu pentru răspândirea știrilor, mediu pentru toate genurile de grafică și muzică, deschiderea unei sesiuni de lucru de la distanță, grupuri de discuții pe teme prestabilite, jocuri interactive prin rețea, operații bancare (Internet banking) și multe, multe altele. Printre ele, World Wide Web, prescurtat WWW, deseori numit numai "web", este la loc de vârf, deoarece este o aplicație multimedială și integrativă, cu o interfață de utilizator (Graphic User Interface, GUI) foarte atrăgătoare din punct de vedere grafic, practică și simplu de folosit. WWW a fost inventat de către Tim Berners-Lee în anul 1993.
Aspecte sociale
Gradul de răspândire a Internetului pe glob este uriaș: la 31 decembrie 2014 aveau acces la Internet circa 3,08 miliarde de locuitori ai globului pământesc, cam 42,4% din populația totală a populației, o creștere cu 753% față de anul 2000.
Ținând cont de aceste lucruri, este de înțeles de ce prezența pe internet a orice se dorește a fi mediatizat este imperios necesară.
Având deosebita plăcere de a-i fi student domnului profesor universitar Titus Slavici, m-am bucurat că îl pot asista atunci când acesta ne-a solicitat ajutorul pentru Asociația Ioan Slavici, în crearea unei platforme electronice pentru un proiect Erasmus. Am format o echipă cu încă 2 colegi, respectiv Alsandi Alexandru și Budeanu Florian, împreună cu care am încercat să livrăm o soluție de calitate.
Am creat un site de prezentare și o platformă interactivă de informare despre proiect și crearea unei comunități a publicului țintă al proiectului (funcționalitate de înregistrare pe baza de parolă), înregistrarea unor workshop-uri (proiecte, discipline), înregistrarea cursanților la anumite workshop-uri, înregistrarea și actualizarea cv-urilor, posibilitatea candidării directe la posturile declarate disponibile de către firmele participante la proiect. Acestea pot fi accesate la adresa www.youthlabormarket.ro . De asemenea, am creat și o pagină de Facebook pentru a proiect, accesibila la adresa https://www.facebook.com/YouthLaborMarket din dorința de a fi mai aproape de publicul țintă al proiectului.
Capitolul I
Prezentarea proiectului
"Metode conforme cu directivele europene pentru includerea tineretului pe piața forței de muncă: transferul de know-how în statele non-UE" este un proiect care se va ocupa de incluziunea socială a tinerilor în problematica pieței muncii, care este de o importanță maximă în ziua de azi.
Context și justificarea proiectului: statelor membre ale UE, dar nu numai, țările non-UE, de asemenea s-au confruntat în ultimii ani cu o creștere uriașă și rapidă a ratei șomajului în rândul tinerilor însoțită de o tranziție dificilă a tinerilor de la școală la muncă. Tinerii, ca grup, au plătit cel mai mare preț în timpul crizei globale, fiind deosebit de dezavantajați în comparație cu adulții, atunci când vine vorba de perspectivele lor de a fi absorbiți de piața forței de muncă. Proiectul își propune să discute și să faciliteze integrarea pe piața muncii a tinerilor din România, Italia, Serbia și Republica Moldova.
Puncte-cheie: asigurarea de schimburi de bune practici și transfer de know-how pentru a facilita integrarea tineretului pe piața forței de muncă în conformitate cu legislația UE pentru statele non-UE; creșterea gradului de conștientizare publică în România, Italia, Serbia și Republica Moldova pentru problemele UE.
Grupurile țintă ale proiectului sunt: tineri absolvenți din România, Italia, Serbia și Moldova factorii de decizie și implementatori politicilor, serviciile publice de ocupare a locurilor de muncă, parteneri sociali, ONG-uri, societatea civilă, personal academic, angajatori, universități, organisme profesionale și asociațiile de afaceri.
I.1 Obiectivele proiectului
Obiectivul principal al proiectului este de a crește șansele de angajare ale studenților și posibilitățile de intrare pe piața forței de muncă după absolvire.
Obiectivele specifice sunt:
Obiectivul 1. stimularea dezbaterii între diferitele părți interesate cu privire la metodele inovative de tranziție a tinerilor pe piața forței de muncă, în special cu privire la abordarea inovatoare a „Simulate Enterprise” care vine în conformitate cu obiectivul programului „Jean Monnet” – promovarea inovației în predare și cercetare (de exemplu intersectorială și / sau studiile multidisciplinare, educație deschisă, rețea cu alte instituții).
Obiectivul 2. diseminarea rezultatelor proiectului și promovarea metodelor de tranziție de la școală la viața activă și
Obiectivul 4. diseminarea conceptului de "Simulate Enterprise" ca un instrument inovativ pentru pregătirea studenților în acumularea abilităților practice pentru carierele lor profesionale viitoare vine în conformitate cu obiectivul programului „Jean Monnet” – încurajarea implicării tinerilor academicieni în procesul de predare și de cercetare pe teme europene prin activități.
Obiectivul 3. îmbunătățirea oportunitățile de carieră de afaceri prin accesul la piața națională și internațională a muncii potențialilor angajatori și
Obiectivul 5. îmbunătățirea dialogului între lumea academică și factorii de decizie vine în conformitate cu obiectivul programului „Jean Monnet” – încurajarea dialogului între lumea academică și a factoriilor de decizie, în special pentru a consolida guvernanța politicilor
I.2 Relevanța proiectului
Relevanța proiectului rămâne, de asemenea, în conceptul inovativ de transfer de bune practici și de know-how în ceea ce privește adaptarea unor noi instrumente inovatoare (întreprinderea simulată, consiliere în carieră) pentru trecerea tinerilor la nevoile grupului țintă, respectiv la nevoile persoanelor aparținând grupurilor vulnerabile. Aceasta propune un mecanism de integrare socială și profesională prin care se întâlnesc la jumătatea drumului angajatorii și persoanele cu posibilități financiare reduse, îndrumând și monitorizând procesul de asimilare al unei persoane în mediul profesional, adaptarea treptată a acesteia la cerințele locurilor de muncă și de conduită ale echipei în care ea lucrează.
În contextul în care nu există date statistice, în domeniul de inserție a tinerilor pe piața forței de muncă, doar la nivel național și regional, și nu local, s-a efectuat o analiza de necesitate pe un grup de 300 de studenți, 100 de angajatori, 100 de personal didactic, care a constat în completarea unui chestionar cu 15 de întrebări. Ca urmare, a fost făcut un raport pe studenți și angajatori. Din toți studenții chestionați, 33,5% au afirmat că nu pot găsi un loc de muncă după absolvire, 42,6% au afirmat că nu au primit un loc de muncă din cauza lipsei lor de experiență în muncă, 11% lucrează în alt domeniu față de cel pe care l-au absolvit (locuri de muncă prost plătite), 10% au considerat că facultatea nu i-a ajutat să găsească un loc de muncă, 5% au confirmat că doresc să părăsească țara în scopul de a obține un loc de muncă bine plătit în străinătate și 6% au afirmat că s-au angajat în timpul studiilor. În plus, dintre toți angajatorii chestionați 37% au considerat că tinerii absolvenți nu au experiența necesară pentru angajare, pe 10% îi vor angaja ca personal necalificat, 42,8% au apreciat că absolvenții nu au abilități practice conforme cerințele lor.
Ultimul capitol al analizei arată că 75,8% personalul academic a subliniat necesitatea de a armoniza programele lor cu ale altor universități europene în vederea facilitării inserției, 8% considerând că elevii răspund la cerințele angajatorului.
Ca urmare, este evident că studenții au nevoie de servicii care să îi facă independenți prin dezvoltarea personală și profesională, dobândirea de competențe și abilități care îndeplinesc cerințele de pe piața forței de muncă și asigurarea unei integrări durabile pe piața muncii. Angajatorii trebuie să fie mai flexibili, pentru a facilita introducerea de tineri pe piața muncii.
I.3 Activitățile proiectului
În scopul de a facilita tranziția tineretului către piața muncii proiectului propune următoarele activități:
Activitatea de management: prin elaborarea planurilor de lucru (anul 1, anul 2 si anul 3), întâlniri cu personalul care se ocupa de implementare, monitorizarea proiectului, procedurile de achiziții publice;
Activitatea de conștientizare cu privire la măsurile inovatoare de facilitare a integrării pe piața muncii a tinerilor: conferința de lansare al proiectului, lansarea și actualizarea site-ul proiectului, crearea și actualizarea unei e-platforme interactivă, crearea și actualizarea unei pagini de Facebook a proiectului, campanii de informare, conferința de închidere a proiectului;
Crearea unei rețele și schimbul de bune practici privind măsuri inovatoare pentru a facilita tranziția tinerilor de la educație la piața forței de muncă și mediu de întreprindere / de afaceri:
Atelier 1: Măsuri inovatoare pentru a facilita integrarea pe piața muncii a tinerilor- accent pe situația din România și analiza transferabilității pentru alte țări europene și vizită de studiu asupra întreprinderilor simulate într-o universitate românească cu profil economic;
Atelier 2: "Cum sa obții un loc de muncă mai rapid – CV-ul cheia succesului"
Atelier 3: "Schimburi de bune practici în schimbarea mentalității angajatorului față de lipsa de experiență a tinerilor absolvenți"
Atelier 4: "Importanța adaptării programei la nevoile angajatorilor"
Atelier 5: Măsuri inovatoare pentru a facilita integrarea pe piața muncii a tinerilor- accent pe situația din Italia și analiza transferabilității pentru alte țări europene
Atelier 6: Măsuri inovatoare pentru a facilita integrarea pe piața muncii a tinerilor- accent pe situația din Serbia
Atelier 7: Măsuri inovatoare pentru a facilita integrarea pe piața muncii a tinerilor- accent pe situația din Moldova.
Studiu privind impactul măsurilor inovatoare privind integrarea tinerilor și a mobilității pe piața forței de muncă la nivel european: elaborarea studiului și finalizarea, diseminarea studiului. Acesta va combina perspectivele demografice și economice în stabilirea unor serii de recomandări cu privire la modul de proiectare și implementare a primelor programe de tranziție în așa fel încât să se evite alegerea greșită a aptitudinilor și să se promoveze utilizarea eficientă a resurselor umane. Studiul va avea un număr de identificare și rezultatele vor fi diseminate nu doar la nivel regional, național, dar și la nivel european, în Italia, Serbia și Republica Moldova.
I.4 Concluziile proiectului
Valoarea adăugată a proiectului este dată de includerea de noi entități propuse de Europa: parcuri științifice și industriale, start-up și spin-off companii din domeniul academic. Astfel va fi facilitată conversia rezultatelor cercetării științifice în produse viabile pe piață. Punctul forte constă în competențele personalului academic implicat în proiect, care va asigura efectul multiplicator al proiectului. Calitatea studiului realizat va avea un impact mare asupra diferitelor părți interesate, cu un rol de inserție pe piața muncii.
CAPITOLUL II
Dezvoltarea și tehnologiile folosite la SITE-UL / E-PLATFORMA http://www.youthlabormarket.ro/ [6][7]
II.1 Descrierea. Cerințe și specificații [8][9][10][11]
După cum spuneam și la începutul acestei lucrări, s-a dorit a se realiza o platformă electronică pentru a crește șansele de angajare ale studenților și posibilitățile de intrare pe piața forței de muncă după absolvire, împreună cu un site de informare.
Urmărind aceste linii directoare, am stabilit primele specificații pe care să le urmăm în dezvoltarea proiectului.
Aveam nevoie de un site dinamic, unde pe prima pagină să fie prezentate cele mai recente informații, precum și cele mai recente locuri de muncă anunțate disponibile de către companiile parte din proiect, pentru a încuraja tinerii să se înscrie și să consulte materialele disponibile. Am ales ca procesul de înscriere să fie relativ facil, solicitând tinerilor doar introducerea unei adrese de e-mail și alegere unei parole pentru accesul în platformă. Dat fiind publicul țintă, o cerință intrinsecă pentru proiect a fost ca acesta să fie disponibil în totalitate și dispozitivelor mobile (telefon, tabletă). Am realizat un site în tehnologia ”responsive web design”, tehnologie care presupune crearea de pagini web care să furnizeze o vizualizare și interacțiune optimă – citire și navigare ușoară, cu un minim de operații, indiferent de platforma de pe care este accesat. Această cerință se suprapune peste trendul global de utilizare a internetului, care este în scădere de pe desktop și în creștere de pe dispozitivele mobile. Traficul mobil de internet a cunoscut o adevărată explozie în ultima perioadă: din iunie 2014 și până în mai 2015 traficul mobil a crescut la 32,79% din traficul internet la nivel global, în timp ce traficul de pe desktop a scăzut în aceeași perioadă de la 66.86% la 61.43% din traficul global de internet.
Pentru că eram mai mulți oameni implicați în acest proiect, în afara echipei condusă de mine, am ales să folosim modelul prototip pentru dezvoltarea de software, după cum am fost învățați în facultate, pentru a putea controla proiectul și a-l dezvolta relativ ușor.
În interiorul echipei, pentru a nu ne suprapune și pentru a ne folosi potențialul la maxim, am ales să divizăm proiectul în mai multe părți, pe care le-am alocat fiecăruia după specific. Eu am ales să mă ocup de partea tehnică, respectiv serverul pe care se face găzduirea proiectului, de prezentarea proiectului in social-media, respectiv pe Facebook, YouTube, Google+, dezvoltarea întregii structuri a proiectului, creat în tehnologia MVC (model-view-controller) folosind Ruby on Rails, crearea unor pagini folosind tehnologii HTML5, precum și integrarea părților dezvoltate de ceilalți colegi. Alsandi Alexandru s-a ocupat de dezvoltare bazelor de date din proiect folosind tehnologii SQLite și de dezvoltarea unor pagini, folosind de asemenea HTML5. Budeanu Florian a fost responsabil cu tehnologiile JavaScript și cu elementele CSS3 elaborării proiectului.
II.2 Detaliile tehnice. [12]
Hardware:
Pentru a oferi stabilitate și accesabilitate, am ales să găzduim platforma pe un server colocat într-un datacenter. Am ales această soluție pentru că datacenter-ul oferă un mediu controlat din punctul de vedere al condițiilor de mediu, precum și multiple conexiuni de internet de la majoritarea furnizorilor de servicii de internet naționali și internaționali, astfel că timpii de răspuns ai aplicației sunt foarte mici.
Ca hardware am ales să folosim un server HP rack-mountable, ce are un procesor Intel Xeon quad-core, cu 8 Gb memorie disponibilă și două hard-disk-uri în tehnologie SAS, de 146 Gb fiecare, instalate în RAID1.
Software:
Din punct de vedere al software-ul instalat, am ales să instalăm o soluție de virtualizare VMware ESXi, în care am instalat un server linux, utilizând distribuția Ubuntu Server LTS 15.04. Pentru partea de webserver am instalat Apache HTTP Server 2.4.12, împreună cu Phusion Passenger ca server de aplicație pentru Ruby on Rails. Platforma a fost dezvoltată folosind HTML5, Ruby on Rails, SQLite, Node.js
II.2.1 Hypervizorul OpenVZ:
OpenVZ este o soluție de virtualizare de tip container pentru Linux.
OpenVZ crează multiple containere izolate și securizate pe un singur echipament fizic și se asigură că aplicațiile rulate funcționează în parametri normali și nu crează conflicte.
Fiecare container rulează și executa aplicații identic ca și un server fizic, poate fi restartat având accesul deplin (root) asupra sistemului de operare.
Serverele virtuale OpenVZ se potrivesc perfect pentru companiile și utilizatorii cu trafic moderat, pentru cei ce vor să împartă aplicațiile și consumul de resurse pe multiple servere.
In timp ce Vmware si Xen, care sunt tehnologii de virtualizare si ofera virtualizare completa si poate rula mai multe sisteme de operare si versiuni de Kernel diferite, OpenVZ foloseste un singur patch de kernel Linux si poate rula numai pe Linux. Toate aceste containere OpenVZ impartasesc aceasi arhitectura si versiune kernel. Acesta poate fi un dezavantaj in cazul in care oaspetii solicita versiuni de kernel diferite, altele decat cele de pe host. Totusi, este foarte eficient si foarte rapid.
Kernel-ul OpenVZ este un kernel de tip Linux, modificat pentru a adauga suport pentru containerele OpenVZ. Kernel-ul modificat ofera virtualizare, management de resurse, izolare.
Fiecare container este o entitate separata, iar fiecare are propriile fisiere, grupuri si utilizatori, procese, retea, dispozitive si obiecte IPC.
Managementul de resurse al OpenVZ consta in patru componente, si anume: Cote de disc cu doua niveluri, planificator CPU, planificator I/O, si user Beancounters. Aceste resurse pot fi schimbate in timpul rularii, eliminand necesitatea repornirii.
Fiecare container are propria cota de disc, masurata in blocuri de disc si inoduri. In container, exista posibilitatea sa folosim unelte standare pentru a seta cotele de disc UNIX per grup si per utilizator.
Planificatorul CPU este o implementare pe doua niveluri. Pe primul nivel, planificatorul decide care container ofera timp CPU-lui, iar pe cel de al doilea, planificatorul standard Linux decide care proces sa ruleze in acel container, utilizand procesele prioritare al standardului Linux.
Se pot seta valori diferite pentru fiecare container in parte, iar timpul real al unitatii centrale de procesare va fi distribuita proportional la aceste valori. OpenVZ ofera posibilitati precum:
setari stricte al limitei procesorului, cum ar fi 10 la suta din timpul total al CPU (–cpulimit);
limitarea nucleelor procesorului disponibile containerului (–cpus);
unirea unui container la un set specific de procesoare (–cpumask).
Similar planificatorului CPU, planificatorul I/O este de asemenea pe doua niveluri. Fiecarui container ii este atribuita o prioritate I/O, iar acest planificator distribuie latimea de banda valabila, in functie de prioritati.
Ultimul component, si anume User Beancounters, este un set de contoare per container, cu scopul de a preveni vreun container de a acapara resursele sistemului. In kernel-urile curente ale OpenVZ, exista doi parametrii primari, si anume ram si swap, si altele optionale.
OpenVZ restricitoneaza accesul containerelor la dispozitive fizice reale. Singurul care poate permite accesul containerelor la dispozitive reale, precum porturi USB, dispozitive PCI sau placi fizice de retea, este administratorul.
II.2.2 Sistemul de operare – CentOS:
CentOS este un sistem de operare de tip GNU/Linux, gratuit, produsa de Red Hat, scopul acestuia fiind de a oferi o distributie gratuita pentru afaceri. Acesta este o distributie populara GNU/Linux pentru servere web, detinand astfel o cota de aproape 30 de procente dintre serverele web existente pana in prezent. CentOS provine de la Community Enterprise Operating System.
Produsul Red Hat Enterprise Linux este disponibil numai printr-un serviciu platit, oferind astfel accest la actualizari de soft si suport tehnic. Este compus din pachete soft sub licenta cu sursa deschisa, sau sub licenta libera, codul sursa fiind de asemenea publicat de Red Hat.
Dezvoltatorii folosesc codul sursa Red Hat pentru a crea un produs final apropiat de Red Hat Enterprise Linux, iar marcile si logo-urile sunt modificate, deoarece Red Hat nu permite redistribuirea acestora.
II.2.3 Webserverul Apache HTTP Server
Autor Robert McCool
Dezvoltator Apache Software Foundation
Lansare initiala 1995
Ultima lansare 2.4.12 / 29 ianuarie 2015
Scris in C/C++ si XML
Sisteme de operare Windows, OS X, Linux, Unix, FreeBSD, Solaris, NetWare, OS/2, TPF, OpenVMS si eComStation
Licenta Licenta Apache 2.0
Website httpd.apache.org
Conform rubricii de FAQ de pe site-ul proiectului Apache, numele Apache a fost ales din respect pentru tribul nativ american Apache și pentru competențele sale superioare în război și strategie. Numele a fost mult timp considerat a fi un joc de cuvinte pentru un “A Patchy Server” (deoarece a fost un set de patch-uri de software).
Apache suportă o varietate de caracteristici, multe implementate ca module compilate care extind funcționalitatea de bază. Acestea pot varia de la suport pentu limbajul de programare server-side pana la sisteme de autentificare. Unele interfețe comune suporta Perl, Python, Tcl, și PHP. Modulele populare de autentificare includ mod_access, mod_auth, mod_digest și mod_auth_digest, succesorul mod_digest. Alte caracteristici includ Secure Sockets Layer și Transport Layer Security suport (mod_ssl), un modul de proxy (mod_proxy), un ReWriter URL (mod_rewrite), fișierele jurnal personalizat (mod_log_config), și de sprijin de filtrare (mod_include și mod_ext_filter).
Metodele de comprimare populare pe Apache includ modulul de extensie extern, mod_gzip, implementat pentru a ajuta la reducerea dimensiunilor paginilor web furnizate prin HTTP. ModSecurity este un motor deschis detectare si prevenire a intruziunilor sursă pentru aplicații Web. Logurile Apache pot fi analizate prin intermediul unui browser web, folosind scripturi gratuite, cum ar fi AWStats / W3Perl sau Visitors.
Virtual hosting permite instalarea Apache pentru a deservi mai multe site-uri web diferite. De exemplu, o unitate cu o instalare Apache ar putea deservi simultan www.examplu.ro, www.examplu.com.ro, test52. server-test.examplu.edu.ro etc.
Apache are mesaje de eroare configurabile, baze de date de autentificare bazate pe DBMS și negocierea conținutului. De asemenea, este susținută de mai multe interfețe grafice (GUI).
Susține autentificare prin parolă și autentificare cu certificat digital. Deoarece codul sursă este disponibil gratuit, oricine poate adapta serverul pentru nevoi specifice, și există o bibliotecă publică mare de add-on-uri pentru Apache.
În loc de a pune în aplicare o singură arhitectură, Apache oferă o varietate de module MultiProcessing (MPMS), care ii permit Apache sa ruleze in mod process-based, hybrid (process si thread) sau event-hybrid pentru a se potrivi mai bine cerințelor fiecărei infrastructuri. Aceasta implică faptul că alegerea corectă a MPM și configurația corectă este importantă.
Proiectul Apache HTTP Server este un efort de dezvoltare de software de colaborare care vizează crearea unui cod sursă de calitate comercială, cu o implementare robustă, bogat în caracteristici și disponibile în mod liber pentru un server HTTP (Web). Proiectul este gestionat în comun de către un grup de voluntari situate în întreaga lume, folosind Internetul și Web pentru a comunica, planifica și de a dezvolta serverul și documentația aferentă. Acest proiect face parte din Apache Software Foundation. În plus, sute de utilizatori au contribuit cu idei, cod și documentație de proiect.
II.2.4 Platforma de dezvoltare web RUBY ON RAILS [21]
Ruby on Rails, sau pur și simplu Rails, este o platformă de dezvoltare web scrisă în limbajul de programare Ruby, sub licență MIT.
De fapt, acesta este rațiunea din spatele Ruby on Rails: pentru a face creația de site-uri mai ușoară. Istoricul Ruby on Rails încă este scurt, dar o mulțime de lucruri s-au întâmplat de la lansarea acestuia.
Rails este un framework model-view-controller (MVC), oferind structuri implicite pentru o bază de date, un web service și pentru pagini web. Încurajează și facilitează utilizarea standardelor web, cum ar fi JSON sau XML pentru transferul de date, și HTML, CSS și JavaScript pentru afișare și interfața pentru utilizator. În plus față de MVC, Rails pune accentul pe utilizarea altor bine-cunoscute modele si paradigme de inginerie software de, inclusiv convenții peste configurație (convention over configuration – CoC), nu te repeta (don’t repeat yourself – DRY), precum și modelul de înregistrare activă (active record pattern).
"Convention over Configuration" înseamnă ca un dezvoltator trebuie doar să specifice aspectele neconvenționale ale aplicatiei. De exemplu, dacă există o clasă “Vanzari” în model, tabelul corespunzător din baza de date este numit “Vânzări” implicit. Numai în cazul în care exista o abatere de la această convenție, precum numirea tabelului "Produse vândute" dezvoltatorul are nevoie sa scrie un cod cu privire la acest nume. În general, convențiile din Ruby on Rails duc la mai puțin cod și mai puțin repetiție.
"Don't repeat yourself" înseamnă că informațiile se află într-un singur loc, fără ambiguități. De exemplu, folosind modulul ActiveRecord de Rails, dezvoltatorul nu are nevoie să specifice numele coloanelor de baze de date în definițiile de clasă. În schimb, Ruby on Rails poate prelua aceste informații din baza de date pe baza numelui de clasă.
"Fat models, skinny controllers" înseamnă că cea mai mare parte a aplicației logice ar trebui să fie plasata în cadrul modelului lăsând controllerul cât mai simplu.
Deoarece Ruby on Rails are nevoie de un server web pentru a rula, primele versiuni au folosit în general serverul de web Mongrel. Desigur, acesta poate rula pe alte servere web de la Apache la Nginx. Pe Nginx, ar putea rula fie ca modul, cum ar fi Passenger, sau prin CGI, Fast CGI sau mod_ruby.
Ruby on Rails a devenit foarte popular după ce Apple a decis să il livreze la pachet cu sistemul lor de operare Mac OS X, Leopard, în octombrie 2007. Deși la începutul sistemele erau livrate împreună cu Ruby on Rails versiunea 1.2, mai târziu au trecut la versiunea 2.0, atunci când aceasta a fost lansata în decembrie 2007. Versiunea 2 și versiunile ulterioare ale Ruby on Rails au oferit atât HTML și XML ca formate de ieșire.
Rails 4.2 a fost lansat pe 19 decembrie 2014 introducand Active Job, asynchronous email, Adequate Record, Web Console si foreign keys.
II.2.5 Serverul de aplicație Phusion Passenger
Dezvoltator Phusion
Ultima lansare 5.0.10 / 11 iunie 2015
Scris în C++ și Ruby
Licența Licența MIT
Website www.phusionpassenger.com
Phusion Passenger (cunoscut informal în rândul comunității Ruby sub numele de mod_rails și mod_rack) este un server gratuit de web și de aplicație (application server) cu suport pentru Ruby on Rails, Python și Node.js . Acesta este conceput pentru a se integra în serverul Apache HTTP sau serverul de web Nginx, dar are, de asemenea, un mod pentru rularea standalone fără un server web extern. Phusion Passenger acceptă sistemele de operare Unix-like și este disponibil ca un gem package sau ca pachete native Linux.
Proiectat inițial pentru aplicații web construite pe framework-ul Ruby on Rails, mai târziu a fost extins pentru a sprijini Ruby framework-urile web arbitrare prin interfața Rack Interface. În versiunile ulterioare s-a adaugat de asemenea suport pentru Python prin intermediul interfeței WSGI, precum și suport pentru Node.js. În 2012, Phusion a anuntat Phusion Passenger Enterprise, o varianta comercială, care nu mai era gratuită, prezentată ca având "o gamă largă de caracteristici premium" . Phusion a afirmat că varianta open source va continua să fie dezvoltată și menținută în parallel cu varianta Enterprise.
Phusion pasager este "configurare preferată de implementare", pentru aplicațiile Ruby on Rails și a fost recomandat de către Ruby on Rails autorilor. În combinație cu Ruby 2.0, sau cu Ruby Enterprise Edition (acum întrerupt), Phusion Passenger susține că este capabilă să reducă consumul de memorie al Rails cu 33%, precum și creșterea performanței acestuia.
II.2.6 HTML5 [14][15]
HyperText MarkUp Language
Dezvoltator World Wide Web Consortium și WHATWG
Lansare inițială 28 octombrie 2014
Cea mai recentă lansare HTML 5
HTML 5.1 (draft de lucru)
HTML = HyperText Markup Language, într-o traducere ad-litteram, Limbaj de marcare, este un limbaj standard utilizat pentru crearea paginilor web ce pot fi afișate într-un browser. Scopul HTML este mai degrabă de a prezenta informațiile – paragrafe, fonturi, tabele, etc – decât de a descrie semantica documentului.
Specificațiile HTML sunt dezvoltate de World Wide Web Consortium W3C.
HTML5 este o tehnologie de bază a internetului, utilizată pentru structurarea și prezentarea de conținut pentru World Wide Web. Din octombrie 2014, acesta este a cincea revizuire finală și completă a standardului HTML al World Wide Web Consortium (W3C). Versiunea anterioară, HTML 4, a fost standardizat în 1997.
Obiectivele sale de bază au fost să îmbunătățească limbajul, cu suport pentru cele mai recente elemente multimedia în timp ce se menține ușor de citit de oameni și în mod constant înțeles de către browsere. HTML5 este gândit să reunească nu numai HTML 4, ci și XHTML 1 și DOM Level 2 HTML.
În continuarea predecesorii săi imediați HTML 4.01 si XHTML 1.1, HTML5 este un răspuns la faptul că HTML și XHTML, folosite în comun pe World Wide Web, sunt un amestec de caracteristici introduse de specificații diferite, pe lângă cele introduse de produsele software cum ar fi browserele. De asemenea, este o încercare de a defini un singur limbaj de marcare care pot fi scrise în HTML sau XHTML. Acesta include modele detaliate de prelucrare pentru a încuraja implementări mai interoperabile; extinde, îmbunătățește și raționalizează marcajul disponibil pentru documente și introduce markup și API (application programming interface) pentru aplicații web complexe. Din aceleași motive, HTML5 este, de asemenea, un potențial candidat pentru aplicațiile mobile cross-platform. Multe caracteristici ale HTML5 au fost construite cu considerentul de a fi capabil să ruleze pe dispozitive low-powered cum ar fi smartphone-urile și tabletele.
În particular, HTML5 adaugă multe caracteristici noi în sintaxă. Acestea includ noile elemente <videoclip>, <audio> și <canvas> , precum și integrarea conținutului Scalable Vector Graphics (SVG) (înlocuind tag-ul generic <object>), precum și MathML pentru formule matematice. Aceste caracteristici sunt concepute să facă mai ușoară includerea și manipularea elementelor multimedia și conținutului grafic pe web, fără a fi nevoie să recurgă la plugin-uri și API-uri. Alte elemente noi de structură , cum ar fi, <section> <principal>, <Article>, <header>, <footer>, <aside>, <nav> și <figure> sunt concepute pentru a îmbogăți conținutul semantic al documentelor. Au fost introduse noi atribute, unele elemente și atributele au fost eliminate și unele elemente, cum ar fi <a>, <cite> și <menu> s-au schimbat, redefinit sau s-au standardizat. API-uri și Document Object Model (DOM) sunt lăsate pe planul secund, dar sunt părți fundamentale ale specificațiilor HTML5. HTML5 definește în detaliu procesarea necesară pentru documente invalide, astfel încât erorile de sintaxă vor fi tratate în mod uniform de toate browserele conforme și alți utilizatori.
HTML5 introduce elemente și atribute ce reflectă consumul tipic pe site-urile moderne. Unele dintre ele sunt înlocuitori semantice pentru utilizări comune ale blocului generic (<div>) și inline (<span>) elemente, de exemplu, <nav> (bloc de navigare pe site), <footer> (de obicei, referindu-se la partea de jos a paginii web sau la ultimele linii de cod HTML), sau <audio> si <video> în loc de <object>. Unele elemente depreciate din HTML 4.01 au fost abandonat, inclusiv elemente pur prezentare, cum ar fi <font> și <center>, ale cărei efecte au fost mult timp înlocuite cu mai capabilul CSS. De asemenea, există un accent pe importanța DOM (Document Object Model) scripting (de exemplu, JavaScript) în comportamentul Web.
Sintaxa HTML5 nu se mai bazează pe SGML în ciuda asemănării sale. Acesta a fost, totuși, proiectat pentru a fi compatibil cu prelucrarea comună de versiunile mai vechi ale HTML. Vine cu o nouă linie introductivă care arată ca o declarație tip de document SGML, <! DOCTYPE html>, care declanșează modul de redare care respectă standardele. Din 5 ianuarie 2009, HTML5 include, de asemenea Web Forms 2.0, o specificație separată a WHATWG (Web Hypertext Application Technology Working Group).
În plus față de markup specific, HTML5 specifică scripting-uri API, care pot fi utilizate cu JavaScript. Interfețele existente DOM (document object model) sunt extinse și caracteristicile de facto documentate. Există, de asemenea, noi API-uri, cum ar fi:
Elemental canvas (pânză de desen) pentru modul direct de desenare 2D
Timed media playback
Offline Web Applications
Document editing
Drag-and-drop
Cross-document messaging
Browser history management
Tipul MIME și protocol handler registration
Microdata
Web Storage, un framework de stocare în perechi, un element cheie care furnizeaza un comportament similar cu cookies dar cu o capacitate de stocare extinsă si un API îmbunătățit.
Nu toate tehnologiile de mai sus sunt incluse în specificațiile W3C HTML5, chiar dacă acestea sunt în specificațiile HTML WHATWG. Unele tehnologii conexe, care nu fac parte din nici HTML5 W3C sau WHATWG HTML, sunt după cum urmează. W3C publică specificațiile pentru aceste separat:
Geolocalizarea
The Indexed API Database, o stocare indexată ierarhic a valorilor cheie (fosta WebSimpleDB).
HTML5 File API, se ocupă de încărcările și manipularile de fișiere.
Directories and System, un API destinat sa satisfaca cazuri de utilizare client-side-storage nu foarte bine deservite de baze de date.
File Writer, un API pentru scriere în fișiere din aplicații web.
Web Audio API, un JavaScript API de nivel înalt pentru prelucrarea și sintetizarea sunetului în aplicațiile web.
ClassList API
HTML5 nu poate oferi animație în pagini web. Funcționalități suplimentare JavaScript sau CSS3 sunt necesare pentru animarea elementelor HTML. Animația este de asemenea posibilă, folosind JavaScript și HTML 4 și în elementele SVG prin SMIL, deși suportul acestuia din urmă în browser rămâne incertă începând cu 2011.
II.2.7 Baza de date MySQL
Limba Engleza
MySQL este un sistem de gestiune a bazelor de date relationale, produsa de MySQL AB si distribuit sub Licenta Publica Generala GNU. Este de asemenea o componenta importanta al LAMP, care inseamna Linux, Apache, MySQL, PHP, si este cel mai popular la ora actuala.
Este des folosit cu limbajul de programare PHP, dar cu mySQL se pot realiza aplicatii in orice limbaj. Exista scheme API ce permite scrierea aplicatiilor in limbaje de programare pentru accesarea bazelor de date mySQL, dupa cum urmeaza: C, C++, Java, PHP, Python, C# si multe altele, iar fiecare dintre acestea foloseste un tip specific API.
MySQL este o componenta integrata LAMP sau WAMP, care inseamna Linux/Windows-Apache-MySQL-PHP/Perl/Python. Este mai usor de invatat si folosit decat alte aplicatii de gestiune a bazelor de date, punem spre exemplu comanda de iesire: „exit” sau „quit”.
Pentru administrarea bazelor de date MySQL, se poate folosi fie modulul linie de comanda, sau descarcarea unei interfete grafice de pe internet al MySQL Administrator si MySQL Query Browser. Se poate de asemenea descarca aplicatia gratuita phpMyAdmin, scrisa in PHP, care este un alt instrument al bazelor de date. MySQL poate fi rulat pe platforme precum: Mac OS X, Linux, Solaris, Windows etc.
MySQL a fost creata de o companie suedeza, fondata de David Axmark, Allan Larsson si Michael Widenius. Prima versiune MySQL a aparut in 23 Mai 1995, si initial a fost creata pentru uz personal bazat pe limbajul de nivel scazut ISAM, in care creatorii l-au considerat inflexibil si prea lent. Ulterior au creat o noua interfata SQL, pastrand acelasi API ca si mSQL. Astfel, pastrand acelasi API cu sistemul mSQL, multi dezvolatori au putut folosi MySQL in loc de mSQL.
II.2.8 Mediul de rulare (runtime environment) JavaScript – aplicația Node.js [15]
Node.js este un mediu de rulare open source, cross-platform pentru aplicații server-side și de networking. Aplicațiile Node.js sunt scrise în JavaScript, și pot fi rulate în runtime environment-ul Node.js pe OS X, Microsoft Windows, Linux, FreeBSD, NonStop, IBM AIX, IBM System z și IBM i. Dezvoltarea sa este găzduită și susținută de Fundația Node.js, un proiect de colaborare (Collaborative Project ) la Linux Foundation.
Node.js oferă o arhitectură event-driven și API I/O non-blocking care optimizează performanțele și scalabilitate unei aplicații. Aceste tehnologii sunt folosite de obicei pentru aplicații web în timp real.
Node.js foloseste motorul Google V8 JavaScript pentru a executa cod și un procent mare de module de bază sunt scrise în JavaScript. Node.js conține o bibliotecă built-in care permite aplicațiilor să acționeze ca un server Web fără software suplimentare cum ar fi Apache Server HTTP sau Microsoft Internet Information Services.
Node.js câștigă teren în adoptarea ca o platformă server-side și este utilizat de IBM, Microsoft, Yahoo!, Walmart, Groupon, SAP, LinkedIn, PayPal, și GoDaddy.
II.2.9 Standardul de formatare HTML – CSS3[18][19]
Cascading Style Sheets (CSS) este un standard folosit pentru a descrie aspectul și formatarea unui document HTML. Deși cele mai multe ori folosit pentru a schimba stilul de pagini web si interfete scrise în HTML și XHTML, poate fi aplicat la orice tip de document XML, inclusiv XML simplu, SVG și XUL. Împreună cu HTML și JavaScript, CSS este o tehnologie fundamentală folosită de cele mai multe site-uri web pentru a crea pagini web atractive vizual, interfețe de utilizator pentru aplicații web și interfețe de utilizator pentru multe aplicații mobile.
CSS este gândit în primul rând pentru a permite separarea conținutului documentului de prezentare de documente, inclusiv elemente cum ar fi aspectul, culorile și fonturile. Această separare poate îmbunătăți accesibilitatea conținutului, oferă mai multă flexibilitate și control în specificarea caracteristicilor de prezentare, permite mai multor pagini HTML să împartă aceeași formatare prin specificarea unui CSS relevant într-un fișier .css separat și să reducă complexitatea și repetiția în conținutul structural, cum ar fi tabelele nesemnificative semantic, care au fost folosite pe scară largă pentru formatarea paginilor înainte ca un suport consistent de redare CSS să fi fost disponibil în toate browserele importante. CSS face posibilă separarea instrucțiunilor de prezentare de conținutul HTML într-un fișier sau o secțiune stil separată a fișierului HTML. Pentru fiecare element HTML potrivit, se oferă o listă de instrucțiuni de formatare. De exemplu, o regulă CSS ar putea preciza că "toate elemente heading 1 ar trebui să fie bold", lăsând cod curat HTML care specifica "acest text este heading 1" fără formatare cod, cum ar fi marcajul <bold> de indicare a modului în care aceste texte ar trebui să fie afișate.
Această separare de formatare și conținut face posibilă prezentarea aceleași pagină în stiluri diferite pentru diferite metode de redare, cum ar fi pe ecran, în print, prin voce (când e citit de un browser sau de un screen-reader) și pe dispozitive tactile bazate pe Braille. Acesta poate fi de asemenea utilizat pentru a afișa pagina web diferit, în funcție de dimensiunea ecranului dispozitivului pe care este vizualizat. Deși autorul unei pagini web conectează un fișier CSS cu fișierul HTML, cititorii pot specifica o foaie de stil diferit, cum ar fi un fișier CSS stocat pe computerul lor, pentru a trece peste cel specificat de autor. În cazul în care autorul sau cititorul nu a lega documentul la o foaie de stil, stilul implicit al browser-ul va fi aplicat. Un alt avantaj al CSS este că modificările estetice aduse proiectului grafic unui document (sau sute de documente) pot fi aplicate rapid și ușor, prin editarea câteva rânduri într-un singur fișier, mai degrabă decât printr-un proces laborios (și, prin urmare, costisitoare) de crawling peste fiecare linie de cod din fișier pentru schimbarea marcării.
Specificațiile CSS descrie un sistem de priorități pentru a determina ce stil se aplică dacă mai mult de o singură regulă se potrivește unui anumit element. In acest așa-numita cascadă, priorități (sau greutăți) sunt calculate și atribuite regulilor, astfel încât rezultatele sunt previzibile.
Specificațiile CSS sunt întreținute de către World Wide Web Consortium (W3C). Tipul media internet (tip MIME) text / css este înregistrată pentru utilizarea cu CSS de RFC 2318 (martie 1998). W3C operează un serviciu gratuit de validare CSS pentru documentelor CSS.
II.3 Metoda de dezvoltare / colaborare în echipă a proiectului [20]
Dat fiind faptul că în acest proiect am fost implicați trei oameni, care dezvoltam platforma pe măsură ce primeam noi informații și pe măsură ce dezvoltam diferite segmente, am ales să folosim un model de dezvoltare de software, după cum am fost învățați în facultate. Am considerat că modelul Prototip este cel mai potrivit nevoilor noastre și l-am aplicat pe toată perioada procesului de dezvoltare.
Schema modelului prototip
Scopul modelului Prototip este de a contracara primele două limitări ale modelului Waterfall. În loc de a stabili definitiv cerințele înainte de a putea începe cu proiectarea și implementarea, este lansat un prototip pentru a înțelege cerințele și pentru a ajuta echipa să colaboreze mai bine. Acesta este dezvoltat pe baza cerințelor cunoscute în prezent. Dezvoltarea prototipului conține fazele de proiectare, implementare și testare, dar acestea nu sunt foarte riguroase sau formale.
Prin intermediul prototipului, clientul înțelege mai bine modul in care lucrează produsul, întrucât interacționează cu acesta pe parcursul întregului ciclu de dezvoltare.
Acest model este preferat în cadrul sistemelor mari și complicate, pentru care este dificilă înțelegerea cerințelor de la început. În astfel de situații, accesul clientului la prototip furnizează un aport substanțial în înțelegerea și definirea specificațiilor.
Avantajele acestui tip de model sunt:
– Utilizatorii sunt implicați direct în dezvoltare
– Întâmpină tendința utilizatorilor de a-și modifica cerințele, pe parcursul ciclului de implementare
– Întrucât este lansat un model funcțional al sistemului, utilizatorii pot înțelege mai bine modul de funcționare
– Erorile pot fi detectate mult mai devreme
– Feedback-ul utilizatorului este mult mai rapid, fapt ce duce la obținerea de soluții mai bune
– Timpul și costurile reduse
Printre dezavantaje, merită menționate:
– Acest model poate crește complexitatea sistemului, sau acesta se poate extinde dincolo de limitele stabilite inițial
– Analiza insuficientă sau inadecvată a proiectului ca un întreg
– Programatorii pot deveni atașați de un prototip în a cărui dezvoltare au investit mult timp și vor tinde să transforme prototipul într-un produs final chiar și atunci când arhitectura de bază nu este cea potrivită
– Consumul excesiv de timp utilizat pentru implementarea unui prototip.
Modelul Prototip trebuie folosit atunci când sistemul dorit trebuie să aibă foarte multă interacțiune cu utilizatorii finali.
În mod obișnuit, sisteme online, interfețe web au o cantitate foarte mare de interacțiune cu utilizatorii finali, fiind cele mai potrivite pentru modelul Prototip. S-ar putea să dureze un timp mai mare până ce un sistem să fie construit, care să permită ușurința în utilizare și să necesite minim de formare pentru utilizatorul final.
Prototipurile asigură că utilizatorii finali lucrează constant cu sistemul și oferă un feed-back, care este încorporat în prototip pentru a rezulta un sistem utilizabil. Ele sunt excelente pentru proiectarea unor sisteme bune pentru interfață om – calculator.
CAPITOLUL III
Ruby on Rails
III.1 Noțiuni introductive [21][22]
Ruby este bazat pe modelul Model-View-Controller, care împarte aplicația în trei părți:
Models – sunt obiectele de lucru care descriu structura și comportamentul problemei pe care aplicația încearcă să o rezolve. Acestea sunt de obicei susținute de un cadru Object-Relational-Mapping care conecteaza obiectele la o bază de date în fundal
Views – sunt șabloane care transmit date către utilizator și toate logica din jurul aspectelor de prezentare ale aplicației.
Controller – se află în centrul a tot, procesează cererile de la clienți, inițiază schimbările în modele și declanșarea redarea șabloanelor.
III.2 Structuri de date în Ruby [21][22]
III.2.1 Instrumente pentru datele individuale
VARIABILE (VARIABLES)
Ruby și multe alte limbaje au mai multe tipuri de variabile. Voi trece peste câteva pentru a fi concis.
LOCAL (LOCAL)
Aceasta este o variabilă care poate fi utilizat numai într-o parte finită a programului, cum ar fi o metodă sau funcție. După ce s-a ieșit din acea parte a programului, aceste variabile sunt distruse. De fapt, spun aveți un program care are trei metode; ai putea avea aceeași variabilă – spun, num1 – care este folosit în trei moduri diferite în fiecare dintre aceste metode și care stochează trei valori diferite.
GLOBAL (GLOBAL)
Aceasta este o variabilă care poate fi utilizată pe parcursul întregului program. Folosirea variabilele globale are o parte bună și partea rea. Partea buna este ca putem citi valoarea unei variabile globale prin orice funcție sau metodă în cadrul programului. Partea proastă este că putem, de asemenea, scrie într-o variabilă globală prin orice metodă sau funcție în cadrul programului.
Dacă modificăm valoarea, uitând că o altă metodă sau funcție depinde de valoarea precedentă ar putea strica într-adevăr lucrurile. Ca o regulă, atunci, stăm departe de variabile globale, dacă nu suntem siguri că știm unde vor fi folosite și modul în care schimbările ar afecta restul programului.
CONSTANTE (CONSTANTS)
Acestea sunt variabile globale "sacre". Valorile acestor variabile ar trebui să rămână constante pentru toată durata execuției. Să spunem că se dorește specificarea unei constante matematice, cum ar fi pi care ar putea folosită cu ușurință de-a lungul programului: PI = 3.14. Constante trebuie să înceapă cu o majusculă, de cele mai multe ori sunt scrise doar cu majuscule, dar nu este obligatoriu. Deși valorile constante ar trebui să fie constante pe tot parcursul întregului program, ele pot fi modificate. Ruby nu interzice modificarea valorii, dar atunci când se întâmplă, oferă un avertisment pentru că nu-i place.
CLASĂ (CLASS)
Acestea sunt variabile al căror scop este limitat la clasa în care acestea sunt definite. Variabile de clasă sunt definite prin@@la începutul numelui variabilei.
INSTANȚĂ (INSTANCE)
Acestea sunt variabile a căror domeniu de aplicare este limitat la o instanță particulară a unei clase. Ele sunt definite cu @ la începutul numelui variabilei.
OBIECTE (OBJECTS)
Totul este un obiect în Ruby. ”TRUE” și ”FALSE” sunt obiecte, literele sunt obiectele, clasele sunt obiecte. Poți apela o metodă pe un număr, literal
>> 7.next
=> 8
Operatorii în Ruby nu sunt altceva decât metode:
>> 6 * 10
=> 60
>> 6.*(10)
=> 60
Ruby este extrem de flexibil și deschis. Aproape totul poate fi schimbat sau manipulat la rulare:
Poți adăuga sau elimina metode și variabile în și din obiecte.
Poți adăuga sau elimina metode și variabile în și din clase.
Poți cu adevărat să manipulezi orice clasa în acest mode, inclusiv clase cheie ca String și Integer
Exemplu:
>> "ha".repeat(5)
NoMethodError: undefined method `repeat' for "ha":String
>> class String # Deschide clasa String și adăugăm funcția
>> def repeat(i)
>> self * i
>> end
>> end
=> nil
>> "ha".repeat(5) # Reapelăm, pe un șir
=> "hahahahaha" # Și acesta este rezultatul!
Am definit funcția repeat în clasa cheie String și a fost imediat disponibilă pentru aplicarea pe un șir
Și pot să elimin definiția:
>> class String # Deschide clasa String și elimina funcția
>> undef_method: repeat
>> end
=> String
>> "ha".repeat(5) # Reapelăm, pe un șir
NoMethodError: undefined method `repeat' for "ha":String
Trebuie să remarcăm definirea ”repeat” în exemplul anterior, pentru mai multe aspecte interesante. Niciunde nu am folosit ”return”, deoarece în Ruby funcția întotdeauna returnează în mod implicit valoarea ultimei sale expresii.
BUCLA (LOOP)
În Ruby foarte rar se întâlnesc buclele de tip ”for” sau ”while”. În loc, în clasa Collections există proprii iteratori către care poți să transmiți blocuri de date și sunt executați pentru fiecare element din colecție:
a = "Hello "
[1, 2, 3, 4].each do |num|
puts a * num
end
# Outputs:
# Hello
# Hello Hello
# Hello Hello Hello
# Hello Hello Hello Hello
Aici avem un șir ce conține numere. Pe acel șir este apelată funcția ”each”, un iterator care citește un bloc de instrucțiuni și îl apelează pentru fiecare element din șir. Blocul începe cu ”do”, urmat de o listă a parametrilor săi, delimitați de | (pipe). Avem un parametrul numit ”num” care ia pe rând valoarea unui element al șirului la fiecare iterație. În blocul de comenzi tot ceea ce facem este să afișăm rezultatul operației a * num. Definiția ”*” în clasa Strings este de a repeta șirul.
SINTAXA
Ruby preferă să mențină sintaxa clară și prietenoasă, după cum se poate vedea și în exemplele de mai sus.
Blocurile sunt încadrate de ”do” și ”end”. Se pot folosi doar acolade dacă blocurile nu acoperă mai multe linii. Singura utilizarea semnificativă de caractere speciale se află la declararea variabilelor. Variabilele din Ruby sunt precedate de caractere speciale pentru a indica domeniul de aplicare. Variabilele începând cu o literă mică sunt variabile locale. Variabile începând cu o majusculă sunt constante. (Aceasta înseamnă că toate clasele sunt constante, de asemenea, din moment ce clasele încep cu litere mari.) Variabilele instanță încep cu un @. Variabilele de clasă, care sunt partajate între toate instanțele de clasă încep cu@@. În cele din urmă, toate variabile globale încep cu un $.
Foarte des se întâlnesc funcții care se termină în ”?” sau ”!”. Acestea nu sunt caractere speciale, ci este doar o convenție folosită în Ruby de a folosi semnul întrebării pentru metodele care interoghează un obiect pentru o condiție booleană, ca de exemplu Array#empty?, sau semnul exclamării pentru funcțiile care sunt distructibile:
>> a = [4, 0, 8, 1, 6] # Cream un șir și îl stocăm în a
=> [4, 0, 8, 1, 6]
>> a.sort # sort returnează un fel de șir nou, sortat
=> [0, 1, 4, 6, 8]
>> a
=> [4, 0, 8, 1, 6] # a este tot în ordinea originală
>> a.sort! # sort! sortează în schimb șirul inițial
=> [0, 1, 4, 6, 8]
>> a
=> [0, 1, 4, 6, 8] # a a fost schimbat
CONDIȚIONALELE (CONDITIONALS)
Condiționalele Ruby sunt foarte similare cu cele din alte limbaje de programare, cu doua excepții notabile. Prima, se poate pune condiția după expresia pe care o protejează pentru a face codul mai lizibil
execute_dangerous_operation() if user.is_authorized?
# este echivalentă cu
if user.is_authorized?
execute_dangerous_operation()
end
A doua, Ruby nu are doar ”if” ci si ”unless”. Acesta este o subtilitate sintactică pentru atunci când doriți să verificați absența unei condiții într-un mod mai ușor de citit:
unless user.is_admin?
user.delete
else
raise "Can't delete admins"
end
SIMBOLURI (SYMBOLS)
Uneori, se pot întălni nume începând cu: (două puncte). Acestea sunt o caracteristică foarte specială a Ruby numită simboluri. Simbolurile pot fi folosite pentru a marca stările într-o variabilă, într-un mod similar cum folosim ENUM în C. Ele sunt foarte asemănătoare cu ”Strings”, dar, de asemenea, foarte diferite. Valoarea simbolurilor este că ele nu prea ocupă spațiu în memorie și același simbol literal se rezolvă întotdeauna la exact același simbol:
>> "a".object_id # object_id returnează identificatorul intern Ruby pentru un obiect
=> 4588621
>> "a".object_id
=> 4586661 # un nou obiect în stivă
>> :a.object_id
=> 295289
>> :a.object_id
=> 295289 # referință la același obiect Symbol
Pot fi foarte des întâlnite ca parametrii la funcții, unde indică modul cum o funcție trebuie să opereze
User.find(:all) #găsește toți utilizatorii
User.find(:first) #găsește primul utilizator
Sau ca pointeri la funcții și variabile.
CLASE ȘI MODULELE
Ruby suportă doar o singură moștenire, însă pentru un plus de flexibilitate suportă o caracteristică numită Mixins. În Ruby, este posibil să se definească Module care conțin funcții și constante și să includă aceste module într-o clasă prin funcția ”include”. În acest fel, puteți extinde funcționalitatea unei clase foarte ușor.
Multe dintre clasele de bază Ruby, chiar folosesc acest mecanism. ”Array” și ”Hash”, de exemplu, includ modulul ”Enumerable” pentru a oferi o mulțime de metode convenabile pentru iterarea peste conținutul lor.
De multe ori, Modulele pun anumite cerințe pentru clase care le includ. Modulul ”Enumerable”, de exemplu, solicită claselor să ofere cel puțin o funcție și o implementare a”<=>”, de asemenea, în cazul în care caracteristicile de sortare vor fi utilizate.
Modulele servesc și alte scopuri. Cel mai important, ele pot fi folosite pentru a organiza codul în spații de nume. Deoarece clasele sunt constante (ceea ce înseamnă că nu se poate atribui o altă clasă la același nume), acestea pot fi stocate în module. Aceste module pot fi apoi imbricate pentru a forma spații de nume.
De reținut este că aceste reguli nu sunt deloc exhaustive. Unele cuvinte nu fi utilizat ca nume de variabile. Acestea sunt numite "cuvinte rezervate / reserved words", care sunt folosite de Ruby intern pentru a identifica diferite elemente ale limbajului.
ȘIRURI ÎN RUBY
Ce este un șir?
Un șir este o serie sau secvență de caractere – adică un "cuvânt" sau o secvență de cuvinte. S-ar putea spune o propoziție, dar un șir nu este doar o propoziție. De exemplu:
string1 = 'Z'
string2 = Acesta este un șir'
Două lucruri se întâmplă aici. Primul este că folosim variabile locale, iar al doilea lucru este că folosi, ghilimele simple pentru a defini conținutul variabilei. Chiar dacă string1 conține doar o literă, este încă un șir, pentru că este declarat în ghilimele simple. Ruby știe cum să trateze o variabilă din modul în care este declarat. Puteți folosi ghilimele, dar trebuie să fie în concordanță. Nu poate începe declarația șir cu ghilimelele duble și se încheie cu un ghilimele simple, ca aceasta: string1 = "Acesta este un șir’, dar puteți face acest lucru:. String1 = "Acesta este un șir", sau string2 = ‘aceasta este de asemenea un șir’. Ambele sunt valide, iar acesta este doar o chestiune de gust.
num1 = 8
Aceasta stabilește num1 la valoarea numerică 8. Deci, dacă am facem num1 + 1, rezultatul ar fi 9. Dar dacă am fi folosit ghilimele simple în jurul 9, ca aceasta …
num1 = ‘8’
Atunci ar spune că 8 este de fapt un șir de caractere, nu un număr. Deci, dacă am scrie num1 + 1, ar afișa o eroare. Interpretorul Ruby spune în principiu că ai dat un număr și un șir și că nu știe cum să le adune. Mergând un pas mai departe, dacă am fi făcut asta …
num1 = '8'
num2 = '1'
num1 + num2
Rezultatul ar fi
"81"
Pentru că Ruby ar lua cele două șiruri și le-ar concatena. Atunci când specificăm o valoare intre ghilimele (simple sau duble) îi spunem interpretorului Ruby să ia exact conținutul dintre ghilimele. Deci tratează ”8” ca pe oricare altă literă. Deci, din punctul de vedere al Ruby
num1 = '8'
este mai mult sau mai puțin același lucru cu
num2 = 'z'
De fapt, daca am face num1 + num2 rezultatul ar fi 8z. În concluzie, un șir este doar o combinație de litere, numere și caractere speciale.
III.2.2 Instrumente pentru colecții de date
Până acum, am discutat despre datele individuale, cum ar fi unul sau câteva elemente care pot fi stocate într-o variabilă locală, sau un singur obiect creat ca o instanță a unei clase. Dar ceea ce se întâmplă dacă vrem să lucrăm cu multe date – care este, o colecție, cum ar fi o serie de numere pe care avem nevoie să le punem în ordine crescătoare, sau o listă de nume sortate alfabetic. Cum gestionează Ruby asta? Ruby ne dă două instrumente: hash și tablouri.
TABLOURI (ARRAYS)
Un tablou tipic arată așa:
MENIU
Mai degrabă decât să avem șase variabile diferite pentru cele șase tipuri de alimente, avem doar un singur element de alimente care stochează fiecare aliment în propriul container sau element. Numerele de la dreapta diagramei de mai sus sunt "index" sau "chei" (adică adrese) ale fiecarui element ([0] = pui, [1] = orez, etc). De reținut că index-urile sunt întotdeauna întregi (numere întregi) și încep întotdeauna de la 0. Deci, primul element este întotdeauna [0], [1] este întotdeauna al doilea element, etc Deci, veți ști că gama de index-uri ale oricărei matrici este întotdeauna [0] până la (lungime – 1) ceea ce înseamnă că ultimul element este întotdeauna lungimea totala a tabloului minus 1, pentru că am început de la [0]. Pentru a crea tabloul de sus în Ruby, am face ceva de genul:
meniu = ['pui', 'orez', 'friptură', 'pește', porc, 'vită']
=> ['pui', 'orez', 'friptură', 'pește', porc, 'vită']
> meniu.count
=> 6
Trebuie remarcat că pentru fiecare element vom folosi ghilimele simple, deoarece stocăm siruri de caractere (string) în fiecare element. Clasa Array Ruby are unele metode pe care le putem folosi direct, cum ar fi ”count”, așa cum este utilizat mai sus. Pur și simplu cuantifică numărul total de elemente din matrice și întoarce acea valoare. Astfel, chiar dacă indicele merge până la 5, sunt 6 elemente, deoarece indicele a început la 0. Acum că am creat un tablou de alimente, putem accesa fiecare element prin apelarea numelui tabloului pe care l-am creat, urmată de numărul index.
> meniu[0]
=> "pui"
> meniu[1]
=> "orez"
> food[2]
=> "friptură"
> food[6]
=> nil
Motivul pentru care obținem ”nil” la meniu[6], este deoarece nu există nici un [6] – sau, mai degrabă, nimic nu este stocat în meniu[6], astfel încât Ruby pune în mod automat meniu[6], meniu[7], meniu[8] și așa mai departe pe ”nil”. Pentru a adăuga un alt aliment la această matrice, tot ceea ce trebui să facem este să punnem următorul element la orice valoare vrem, cum ar fi așa:
> meniu[6] = 'legume'
=> 'legume'
> meniu
=> ['pui', 'orez', 'friptură', 'pește', porc, 'vită', 'legume']
> meniu.count
=> 7
Există și o altă cale de a adăuga elemente la un tablou în Ruby. Putem utiliza operatorul append, ”<<”, care lipește practic ceva la sfârșitul tabloului. Diferența este că noi nu trebuie să specificm o poziție index atunci când se utilizează operatorul de adăugare, după cum fac în acest exemplu:
> meniu << 'supă'
=> ['pui', 'orez', 'friptură', 'pește', porc, 'vită', 'legume', supă']
> meniu << 42
=> ['pui', 'orez', 'friptură', 'pește', porc, 'vită', 'legume', supă', 42]
Tot ceea ce urmează dupa ”<<” este adăugat în tablou. Acest lucru este foarte practic pentru că putem adăuga variabile și alte obiecte unui tablou fără să ne îngrijorăm în legătură cu conținutul. De exemplu:
> sum = 10 + 23
=> 33
> meniu << sum
=> ['pui', 'orez', 'friptură', 'pește', porc, 'vită', 'legume', supă', 42, 33]
Am creat o variabilă locală numită ”sum” și pe urmă am pus valoarea variabilei la sfarșitul tabloului. Putem chiar sa adăugăm un tabloul la sfărșitul altui tablou
> name_and_age = ['Mihai', "Ion", 28]
=> ["Mihai", "Ion", 28]
> meniu
=> ['pui', 'orez', 'friptură', 'pește', porc, 'vită', 'legume', supă', 42, 33]
> meniu.count
=> 10
> meniu << name_and_age
=> ['pui', 'orez', 'friptură', 'pește', porc, 'vită', 'legume', supă', 42, 33, ["Mihai", "Ion", 28]]
> meniu.last
=> ["Mihai", "Ion", 28]
> meniu.count
=> 11
Chiar dacă ultimul element este o matrice cu trei elemente – Mihai, Ion, 28 – este socotit ca doar un element (de exemplu, un tablou) în interiorul tabloului meniu. Deci, contorul trece de la 10 (înainte de a se adaugă name_and_age) la 11. Dacă am dori să aflăm câte elemente sunt în interiorul ultimul element din tabloului meniu, am putea face ceva de genul asta:
> meniu.last.count
=> 3
Câteva alte metode interesante care Ruby ne permite să le utilizăm direct din cutie sunt ”first”, ”last”, ”length”, ”include?” (urmat de obiectul pe care dorim să îl verificăm), ”empty?”, ”eql?” și ”sort”.
> meniu
=> ['pui', 'orez', 'friptură', 'pește', porc, 'vită', 'legume']
> meniu.first
=> 'pui'
> meniu.last
=> 'legume'
> meniu.length
=> 7
> meniu.count
=> 7
> meniu.include?('pui')
=> true
> meniu.include?('filetmignon')
=> false
> meniu.empty?
=> false
> meniu[0]
=> 'pui'
> meniu[0].eql?( "pui")
=> true
> meniu[0].eql?( "vită")
=> false
> food.sort
=> ['friptură', 'legume', 'orez', 'pește', porc, 'pui', 'vită']
În paranteze imediat dupa ”eql?”, am pus șirul în ghilimele duble pentru că avem de a face cu un șir. De asemenea, ”sort” aranjează în ordine alfabetică șirurile de caractere și în ordine crescătoare numerele. Putem stoca orice în fiecare element, nu doar șiruri de caractere. Putem chiar să le amestecăm; unele elemente pot fi șiruri de caractere, altele pot fi numere. Dacă am dori o tablou de numere am face ceva de genul:
numere = [1, 2, 3, 4, 5, 6]
=> [1, 2, 3, 4, 5, 6]
Trebuie să ne amintim ce am spus mai devreme despre indexul începând mereu de la ”0”. Putem vedea aici de ce este atât de important. Pentru a face referire la numărul ”1” în acest tablou, indexul tabloului trebuie să fie [0] pentru că este primul element din tablou.
> numere[0]
=> 1
> numere[1]
=> 2
> numere[6]
=> nil
> numere.first
=> 1
> numere.last
=> 6
> numere.count
=> 6
> numere.length
=> 6
> numere.include?(3)
=> true
> numere.include?(10)
=> false
> numere.empty?
=> false
> numere[1]
=> 2
> numere[1].eql?(1)
=> false
> numere[1].eql?(2)
=> true
Pentru că prelucrăm numere, obiectele din paranteze nu ar trebui să fie închise în ghilimele. De fapt, dacă am folosit ghilimele, Ruby nu ar găsi obiectele deoarece ar căuta un șir și nu un număr. Trebuie să fim foarte atenți cu ghilimelele
> numere.include?("3")
=> false
> numere[1].eql?("2")
=> false
Iteratorii RUBY
Un iterator este un mecanism în Ruby care permite parcurgerea structurilor de date care stochează elemente multiple (cum ar fi un tablou) și examinarea fiecarui element. Una dintre metode cele mai frecvent utilizate este ”each”. ”each” este o metodă din clasa Array care vine cu Ruby. Să începem simplu. Să presupunem că vrem să imprimăm o listă cu toate elementele stocate în tabloul meniu. Cum am face acest lucru?
> meniu
=> ['pui', 'orez', 'friptură', 'pește', porc, 'vită', 'legume']
meniu.each do |x|
puts x
end
pui
orez
friptură
pește
porc
vită
legume
Câteva lucruri trebuie să remarcăm de aici:
– Putem apela ”each” doar pe o colecție de date.
– Ca să apelăm ”each”, trebuie să o apelăm pe un bloc. Un bloc este o porțiune separată a codului. Practic, îi spunem să aplice codul conținut în bloc pe fiecare obiect pe care îl prelucrează.
BLOCURI (BLOCK)
Există 2 modalități de a utiliza blocul. Prima este similară cu exemplul următor:
do |variable| #some code end
Trebuie reținut că va trebui să utilizăm un bloc cu un iterator. Putem defini un bloc în afara unui iterator, dar pentru a executa blocul, va trebui să-l utilizăm în combinație cu un iterator. De aceea am am apelat do| x | după meniu.each mai devreme. Putem utiliza una sau mai multe variabile în bloc. Aceste variabile sunt locale în bloc, astfel încât acestea vor fi distruse după terminarea execuției. Astfel, dacă am avea două blocuri, putem utiliza variabila x în ambele și nu l-ar afecta pe celălalt. In exemplul de mai sus cu privire la meniu, am solicitat ca pentru fiecare element din produsele din tabloul meniu, să se imprime pe ecran. Un alt mod de a folosi un bloc este pe o linie, ca aceasta:
meniu.each { |x| puts x }
În acest caz, acolada deschisa înlocuiește ”do” și acolada inchisă înlocuiește ”end”. Dacă operația este doar o linie, atunci așa este mai convenabil, deși recitind astfel de cod în viitor este uneori mai greu; așa, poate fi mai confortabil să folosim ”do” și ”end”. Motivul pentru care blocurile folosesc variabile este pentru că elementele colecției de fapt nu sunt modificate – decăt dacă am ales explicit să facă acest lucru. Practic, ceea ce se întâmplă este că pentru fiecare trecere prin matrice, o copie a noului element este stocat în x, iar atunci x este folosit în bloc.
HASH
Un hash este un alt tip de colecție. Este o colecție de perechi de "key-values". O pereche key-value este o combinație a numelui unui container (de exemplu, cheia) și conținutul recipientului (adică valoarea).
a => "Mihai"
În perechea key-value de mai sus, key este ”a”, iar value este ”Mihai”. Un hash, atunci, este de fapt o listă a acestor perechi key-value, separate prin virgulă. Un hash arată astfel:
a =>"Mihai", b => "Cristina", c => "Alexandru", d=> "Maria"
Hash și tablourile au unele diferențe cheie, dar și unele lucruri de reținut: cheile nu sunt chei integer. Ele pot fi caractere, numere întregi, siruri de caractere, etc. – practic, orice tip de obiect Ruby. Cheile nu sunt ordonate. Deci, nu se poate spune că a este "primul" sau că "vine înainte" lui b în exemplul de mai sus, pentru că Ruby nu se uita la ordinea cheiilor din hash-uri. Chiar dacă cheile nu sunt ordonate, dacă am iterat prin hash (pe care o voi exemplifica în curâbd), Ruby le-ar parcuce prin ordinea în care au fost adăugate la hash. În exemplul nostru, dacă am fost imprima fiecare valoare, Ruby ar imprima ”Mihai”, ”Cristina”, etc. Dar a nu se confunda acest lucru cu modul în care indecșii tabloului sunt ordonați.
Există mai multe moduri de a inițializa (sau a crea initial) un hash, dar cele mai populare moduri arata ceva de genul următor. Pentru a crea un hash gol (de exemplu, un hash fără valori):
> zi = Hash.new
=> {}
Pentru a crea un hash cu valori specifice:
> nume = Hash["a" => "Mihai", "b" => "Cristina", "c" => "Alexandru", "d" => "Maria"]
=> {"a"=>"Mihai", b => "Cristina", c => "Alexandru", d=> "Maria"}
> nume2 = {"a" => "Mihai", "b" => "Cristina"}
=> {"a" => "Mihai", "b" =>"Cristina"}
Observăm că pentru a crea un hash, nu trebuie să utilizați Hash, cuvinte cheie sau paranteze pătrate ([]). Le putem folosi, dacă dorim, sau putem folosi doar ”= {}”. Pentru keys și values, de asemenea, nu este nevoie pentru sa punem cheile în ghilimele. Avem nevoie să facem acest lucru numai în cazul în care dorim să utilizăm șiruri ca și cheie. Ruby necesită, de asemenea o ”=>” (pronunțat "racheta"), pentru a atribui valoarea de pe partea dreaptă a rachetei la cheia de pe stânga. Daca aș fi încercat să faci nume2 fără ghilimele în jurul cheilor, probabil aș fi primit o astfel de eroare:
> nume2 = { a => "Mihai", b => "Cristina"}
=> #<NameError: undefined local variable or method `a' for main:Object>
Pentru a accesa valorile în hash, trebuie să specificăm numele hash, împreună cu cheia pentru valoarea pe care încercăm să o accesăm.
> nume
=> {"a"=>"Mihai", "b"=>"Cristina", "c"=>"Alexandru", "d"=>"Maria"}
> nume["a"]
=> "Mihai"
> nume["c"]
=> "Alexandru"
> nume[a]
=> #<NameError: undefined local variable or method `a' for main:Object>
SIMBOLURI
Un simbol este un tip de obiect care seamănă cu un șir de caractere, dar nu este unul. Diferența majoră între un simbol și un șir este ca un simbol începe întotdeauna cu două puncte (cum ar fi :nume). Simboluri lucreză bine cu hash-uri pentru că le putem folosi ca și chei în loc de șiruri de caractere.
> f_nume
=> {:a =>"Mihai", :b =>"Cristina", :c =>"Alexandru", :d =>"Maria", :e =>"Cristian"}
> f_nume[:a]
=> "Mihai"
Simbolurile fac utilizarea hash-uri mult mai simpla decât folosind șiruri de caractere ca chei. Putem desigur, utiliza hash-uri și pentru altceva în Ruby. Funcția lor principală este de a stoca valori.
III.3 Exemple de folosire a Ruby on Rails în cadrul platformei electronice
III.3.1 Controller-ul CV-uri
Controller-ul CV-uri reprezintă codul care se ocupă de business-logic pentru CV-urilor.
class CvsController < ApplicationController
#aici definim controller-ul, care este child pentru ApplicationController
before_action :set_cv, only: [:show, :edit, :update, :destroy]
#definesc funcțiile ce pot fi aplicate pe controller-ul CV
before_filter :authenticate_student!
##se face verificare autentificării pe site, înaintea încarcarii paginii
respond_to :html
#spun codului să răspundă apelurilor din HTML doar cu cod HTML
def index
#definesc funcția unde se afisează toate CV-urile
@cvs = Cv.all
respond_with(@cvs)
end
def show
# definesc funcția care generează cv-ul în format PDF
@cv = Cv.find(params[:id])
respond_to do |format|
format.html
format.pdf do
pdf = CvPdf.new(@cv)
send_data pdf.render, filename: "#{@cv.nume} resumee #{Date.today.strftime("%d.%m.%Y")}.pdf",
type: "application/pdf",
disposition: "inline"
end
end
end
def new
# definesc funcția care se ocupă de instanțierea de cv nou
@cv = Cv.new
respond_with(@cv)
end
def edit
end
def create
#definesc funcția care se ocupă de salvarea cv-ului introdus
@cv = Cv.new(cv_params)
@cv.save
redirect_to cvs_path
end
def update
#definesc funcția care se ocupă de actualizarea cv-ului editat
@cv.update(cv_params)
redirect_to cvs_path
end
def destroy
#funcția care se ocupă de distrugerea cv-ului introdus
@cv.destroy
respond_with(@cv)
end
private
#o secțiune la care codul html nu are acces; pentru fiecare dintre instanțele de mai sus, se caută cv-ul după parametrul "id"
def set_cv
@cv = Cv.find(params[:id])
end
def cv_params
#definirea parametrilor care pot fi salvați în baza de date
params.require(:cv).permit(:computer,:jobrelated,:manager,:comm,:mothert,:applied,:sex,:national,:nume,:img, :data_nastere, :adresa, :email, :telefon, :permis, :salariu, :l_engleza, :l_franceza, :alta_l, :student,:experiences_attributes=>[:id,:company, :job_title, :period, :description, :cv_id],:educations_attributes=>[:id,:school, :period, :description, :cv_id])
end
end
III.3.2 Cod HTML cu Embedded Ruby
Formularul de creeare al CV-ului
#Se folosește biblioteca Rails "simple_form" pentru a introduce datele
<%= simple_form_for @cv, :html => { :class => 'form-panel' } do |f| %>
#Definirea afișării
<div class="panel panel-default">
<div class="panel-body">
<%=f.label :add_a_picture_for_your_resumee%>
<%= f.file_field :img%>
#Adăugarea pozei de cv
<%= f.input :nume ,label: "Complete name",:input_html=>{size: 39,:class=> "form-control"}%>
<%= f.input :data_nastere ,label: "Date of birth",:input_html=>{size: 39,:class=> "form-control"}%>
<%= f.input :sex ,label: "Gender",:collection=>["MALE","FEMALE"],:input_html=>{:class=> "form-control"}%>
<%= f.input :national ,label: "Nationality",:input_html=>{size: 39,:class=> "form-control"}%>
<%= f.input :adresa ,label: "Contact adress",:input_html=>{size: 39,:class=> "form-control"}%>
<%= f.input :email ,label: "Email adress",:input_html=>{size: 39,:class=> "form-control"}%>
<%= f.input :telefon ,label: "Contact number",:input_html=>{size: 39,:class=> "form-control"}%>
<%= f.input :applied,label: "JOBS APPLIED FOR PREFFERRD JOB STUDIES APPLIED FOR",as: :text,:input_html=>{cols: 39,rows:5,:class=> "form-control"}%>
<%= f.input :salariu ,label: "Expected pay in euros",:input_html=>{size: 39,:class=> "form-control"}%>
<%= f.input :permis ,label: "Do you have a driving license",:collection=>["YES","NO"],:input_html=>{:class=> "form-control"}%>
<%= f.input :mothert ,label: "Mother tongue",:input_html=>{size: 39,:class=> "form-control"}%>
<%= f.input :l_engleza ,label: "Do you speak english",:input_html=>{size: 39,:class=> "form-control"}%>
<%= f.input :l_franceza ,label: "Do you speak french",:input_html=>{size: 39,:class=> "form-control"}%>
<%= f.input :alta_l ,label: "Other spoken languages (please specify)",:input_html=>{size: 39,:class=> "form-control"}%>
<%= f.input :comm ,label: "Communication skills",as: :text,:input_html=>{cols: 39,rows:3,:class=> "form-control"}%>
<%= f.input :manager ,label: "Organisational / managerial skills",as: :text,:input_html=>{cols: 39,rows:3,:class=> "form-control"}%>
<%= f.input :jobrelated ,label: "Job-related skills",as: :text,:input_html=>{cols: 39,rows:3,:class=> "form-control"}%>
<%= f.input :computer ,label: "Computer skills",as: :text,:input_html=>{cols: 39,rows:3,:class=> "form-control"}%>
<%= f.input :other ,label: "Other skills",as: :text,:input_html=>{cols: 39,rows:3,:class=> "form-control"}%>
#introducerea datelor din cv
<%= f.input :student ,as: :hidden,:input_html=>{:value=> current_student.email}%>
salvarea cv-ului cu indexul adresa de email de inregistrare
<h3 class="thin text-center">Work experience</h3>
<%= f.fields_for :experiences do |builder| %>
<%= render "experience_fields", f: builder%>
<%end%>
<%= link_to_add_fields "Add work experience", f, :experiences%>
<br /><br />
#alocarea dinamica a spațiului alocat pentru experiența de muncă din cv; este legată de subrutina Experience_fields
<h3 class="thin text-center">Education</h3>
<%= f.fields_for :educations do |builder| %>
<%= render "education_fields", f: builder%>
<%end%>
<%= link_to_add_fields "Add education", f, :educations%>
<br /><br />
#alocarea dinamică a spațiului alocat pentru studiile din cv; este legat de subrutina Education_fields
<%= f.button :submit, "Save your resumee",:class => 'btn-primary' %>
#definirea butonului de salvare
<% end %>
</div>
</div>
#Education_fields: este o subrutină aflată într-un fișier separat, care se ocupă de afișarea câmpurilor de introducere a datelor de educație
<fieldset>
<div class="panel panel-default">
<div class="panel-body">
<%= f.input :school, label: 'School name',:input_html=>{size: 39,:class=> "form-control"} %>
<%= f.input :period, label: 'Period of education',:input_html=>{size: 39,:class=> "form-control"} %>
<%= f.input :description, label: 'Please describe your education',as: :text ,:input_html=>{:class=> "form-control"}%>
</div>
</div>
</fieldset>
#Experience_fields: este o subrutină aflată într-un fișier separat, care se ocupă de afișarea câmpurilor de introducere a datelor de experiență în câmpul muncii
<fieldset>
<div class="panel panel-default">
<div class="panel-body">
<%= f.input :school, label: 'School name',:input_html=>{size: 39,:class=> "form-control"} %>
<%= f.input :period, label: 'Period of education',:input_html=>{size: 39,:class=> "form-control"} %>
<%= f.input :description, label: 'Please describe your education',as: :text ,:input_html=>{:class=> "form-control"}%>
</div>
</div>
</fieldset>
#Modul de afișare al cv-ului și business-logic-ul dacă cv-ul este completat sau nu
<ol class="breadcrumb">
<li><% if student_signed_in? %>
User <strong><%= current_student.email %></strong>.
<%= link_to 'Edit profile', edit_student_registration_path %> |
<%= link_to "Logout", destroy_student_session_path, method: :delete %>
<% end %></li>
#afișarea utilizatorului conectat și legăturilor catre logout și modificarea profilului
</ol>
<div class="row">
<%@cv = Cv.where(student: current_student.email).first%>
#inițializăm o constantă cu primul cv găsit având cheia egală cu adresa de mail a utilizatorului
<%if @cv%>
<h1>Your resumee</h1>
<article class="col-md-3">
<p id="notice"><%= notice %></p>
<h2>Basic information</h2>
<p>
<strong>Resumee picture</strong>
<%= image_tag(@cv.img.url,size: "50×50") %>
</p>
<p>
<strong>Full Name:</strong>
<%= @cv.nume %>
</p>
<p>
<strong>Date of birth:</strong>
<%= @cv.data_nastere %>
</p>
<p>
<strong>Gender:</strong>
<%= @cv.sex %>
</p>
<p>
<strong>Nationality:</strong>
<%= @cv.national %>
</p>
<p>
<strong>Contact Adress:</strong>
<%= @cv.adresa %>
</p>
<p>
<strong>Email adress:</strong>
<%= @cv.email %>
</p>
<p>
<strong>Contact number:</strong>
<%= @cv.telefon %>
</p>
<p>
<strong>Driving license:</strong>
<%= @cv.permis %>
</p>
<p>
<strong>JOBS APPLIED FOR PREFFERRD JOB STUDIES APPLIED FOR:</strong>
<%= @cv.applied %>
</p>
<p>
<strong>Expected pay in euros:</strong>
<%= @cv.salariu %>
</p>
<p>
<strong>Spoken languages</strong>
</p>
<p>
<strong>Mother tongue:</strong>
<%= @cv.mothert %>
</p>
<p>
<strong>English:</strong>
<%= @cv.l_engleza %>
</p>
<p>
<strong>French:</strong>
<%= @cv.l_franceza %>
</p>
<p>
<strong>Other languages:</strong>
<%= @cv.alta_l %>
</p>
<p>
<strong>Communication skills:</strong>
<%= @cv.comm %>
</p>
<p>
<strong>Organisational / managerial skills:</strong>
<%= @cv.manager %>
</p>
<p>
<strong>Job related skills:</strong>
<%= @cv.jobrelated %>
</p>
<p>
<strong>Computer skills:</strong>
<%= @cv.computer %>
</p>
<p>
<strong>Other skills:</strong>
<%= @cv.other %>
</p>
</article>
<article class="col-md-4">
<p>
<h2>Work Experience</h2>
</p>
<[anonimizat] do |exp|%>
<p>
<strong>Company</strong>
<%= exp.company%>
</p>
<p>
<strong>Job title</strong>
<%= exp.job_title%>
</p>
<p>
<strong>Period of employment</strong>
<%= exp.period%>
</p>
<p>
<strong>Job description</strong>
<%= exp.description%>
</p>
<%end%>
</article>
<article class="col-md-4 ">
<p>
<h2>Education</h2>
</p>
<[anonimizat] do |edu|%>
<p>
<strong>School name</strong>
<%= edu.school%>
</p>
<p>
<strong>Period</strong>
<%= edu.period%>
</p>
<p>
<strong>Education description</strong>
<%= edu.description%>
</p>
<%end%>
</article>
<article class="col-md-12 ">
<%= link_to 'Edit your resumee', edit_cv_path(@cv),:class=>"btn btn-action" %> | <%= link_to 'See your resumee in PDF format', cv_path(@cv, format:"pdf"),:class=>"btn btn-action" %>
</article>
#dacă constanta are o valoare diferită de ”nil” afișăm cv-ul găsit
<%else%>
<article class="col-md-8 maincontent">
<header class="page-header">
<h1 class="page-title">You must complete your resumee</h1>
</header>
<%= link_to 'Complete your resumee', new_cv_path ,:class=>"btn btn-action" %>
</article>
<%end%>
#În caz contrar rugăm utilizatorul să își completeze datele în CV
CAPITOLUL IV
uTILIZAREA SITE-UL / E-PLATFORMA http://www.youthlabormarket.ro/
IV.1 Design [23]
Interfața site-ului este foarte atractivă și modernă (imaginea 4.1). Sunt folosite puține culori pentru a îi oferi un caracter sobru, profesionist dar și plăcut. Layout-ul este bine structurat și toate paginile urmează același design pentru a urmări mai ușor informațiile postate și a oferi consecventă. S-a dorit punerea accentului pe conținut fără să existe elemente care să distragă atenția, dar și crearea unui design degajat.
Imaginea 4.1 Pagina principală a site-ului
IV.2 Structură
Site-ul prezintă 3 zone: antet, conținut și subsol. În antet (imaginea 4.2) se găsesc sigla proiectului și o bara de meniu orizontală care cuprinde următoarele butoane: HOME, PROJECT EVENTS, PROJECT RESULTS, PROJECT NEWSPAPER, CONTACT și CONNECT. Numărul redus de meniuri oferă confort în navigarea site-ului.
Imaginea 4.2 Antetul paginii
În subsolul site-ului (imaginea 4.3) regasim trei coloane fixe care oferă informații despre contact, trimitere către pagina de facebook și motto-urile proiectului.
Imaginea 4.3 Subsolul paginii
Pagina de facebook a proiectului, care poate fi accesată direct apăsând simbolul Facebook (imaginea 4.4), se găsește la adresa https://www.facebook.com/YouthLaborMarket (imaginile 4.5 si 4.6) unde se postează poze de la evenimente, noutăți ale proiectului, anunțuri despre viitoare ateliere și conferințe și alte informații utile persoanelor interesate. De asemenea, există posibilitatea de a o promova altor persoane interesate și de a fi informat în timp real de noutățile postate aici.
Imaginea 4.4 Accesare pagina de facebook
Imaginea 4.5 Pagina de facebook a proiectului
Imaginea 4.6 Pagina de facebook a proiectului
În partea de jos a subsolului site-ului se află o bară cu legături rapide către pagina Home, pagina de contact și pagina de logare și aspecte legate de copyright (imaginea 4.7).
Imaginea 4.7 Subsolul paginii
Structura site-ului urmarește punctele cheie ale proiectului după cum urmează:
Project Events, results și newspaper vor contine detalii concrete despre proiect, evenimente, poze, anunțuri, noutăți etc și vor fi completate pe măsură ce proiectul se derulează.
Contact
Conținutul paginii „Contact” este organizat pe două coloane: în stânga se află un formular, iar în dreapta, datele de contact (imaginea 4.8).
Imaginea 4.8 Conținutul paginii de contact
IV.3 Mod de utilizare
În zona de CONNECT există două module de utilizare unul pentru administrator și unul pentru utilizatori.
IV.3.1 Modulul public (destinat utilizatorilor)
Pe prima pagină (imaginea 4.9) există posibilitatea de a introduce un utilizator existent și parola aferentă contului acestuia, de a crea un utilizator nou și de a reseta parola în cazul uitării acesteia prin confirmarea primită prin intermediul adresei de email (imaginea 4.10).
Imaginea 4.9 Conținut pagină login
Imaginea 4.10 Conținut pagină resetare parolă
Zona de creare a unui utilizator nou (imaginea 4.10) este foarte ușor de folosit prin simplitatea informațiilor inițiale necesare realizării unui cont nou și anume adresa de email (care ulterior va fi folosită pentru resetarea parolei), parola dorită și confirmarea acesteia.
Imaginea 4.11 Conținut pagina creare user nou
După logarea userului pe pagina Connect acesta va putea să-și introducă datele profesionale într-un CV intuitiv. Așa cum se observă în imaginea 4.12 în partea superioară a paginii de conținut a apărut o bara de meniu care cuprinde adresa de email cu care utilizatorul s-a logat, posibilitatea de a edita profilul și de a ieși din cont.
Imaginea 4.12 Pagina Connect după logarea utilizatorului
De asemenea, dacă ne întoarcem pe pagina “Home” a site-ului (imaginea 4.13) vom observa că în pagina de conținut au apărut informațiile recent completate pe site pentru a ajuta utilizatorul de a fi informat rapid despre noutățile aparute.
Imaginea 4.13 Zona de noutăți
În partea de connect zona de introducere date CV (imaginea 4.14) este structurată pe trei domenii: informațiile de bază ale utilizatorului, experiența profesională și educație după cum urmează:
Basic information: cuprinde detalii personale despre utilizator cum ar fi numele, data nașterii, sexul, naționalitatea, adresa de contact, adresa de email, număr de telefon, dacă are sau nu permis de conducere, limbi străine, dar și așteptări de la viitoarele locuri de muncă prin câmpurile “joburi de care este interesat”, “salariu dorit” și abilități deținute ca abilități organizaționale, de management, de comunicare, de utilizare al computerului etc.
Imaginea 4.14 Conținut pagină de adăugare CV
Work experience: cuprinde detalii despre experiența profesională a candidatului acesta având posibilitatea de a adăuga mai multe locuri de muncă anterioare prin apăsarea butonului “add work experience”. În acest moment se deschid mai multe câmpuri unde se pot completa detalii despre compania la care utilizatorul a lucrat, poziția pe care a fost angajat, perioada în care a fost angajat și descrierea jobului respectiv (imaginea 4.15).
Imaginea 4.15 Conținutul zonei experientă profesională
Education: aceasta zonă este structurată la fel ca zona pentru experiența profesională și permite candidatului să completeze tot istoricul educației sale prin simpla apăsare a butonului “Add education”. În acest moment se deschid mai multe câmpuri unde se pot completa detalii despre numele școlii terminate, perioada și descrierea acesteia (imaginea 4.16).
Imaginea 4.16 Conținutul zonei educație
După logare observăm modificarea meniului din antetul paginii (imaginea 4.17) cu informații relevante pentru această secțiune și anume: HOME, AVAILABLE JOBS, YOUR RESUMEE, CONTACT, CONNECT.
Imaginea 4.17 Bara meniu din zona Connect
Available jobs: cuprinde lista joburilor disponibile (imaginea 4.18) și oferă posibilitatea de a vizualiza datele de contact ale angajatorului și de a candida pentru postul respectiv.
Imaginea 4.18 Cuprins pagină de joburi disponibile
Your resumee: cuprinde datele completate în CV de către candidat existând posibilitatea de a-l modifica și actualiza oricând este necesar. De asemenea, există posibilitatea salvării CV-ului în format PDF prin simpla apăsare a butonului “See your resumee în PDF format”.
După completarea CV-ului acesta va apare pe pagina principală a contului utilizatorului imediat după logare și va putea fi oricând editat sau actualizat (imaginea 4.19).
Imaginea 4.19 Vizualizare CV după completarea acestuia
IV.3.2 Modulul administrativ (destinat administratorului)
După logarea cu un user de administrator utilizatorul are posibilitatea de a adăuga articole în zonele Project Events, results și newspaper și de a adăuga sau șterge joburi disponibile în pagina Available jobs.
Adăugarea de articole noi (imaginea 4.20) se face printr-un formular unde se completează informațiile care vor apare în zonele dedicate de pe site. De asemenea, aici se pot urca pe site și diverse imagini de la evenimente. Articolul va apare pe site în momentul apăsării butonului “Create Articole” din partea inferioară a formularului.
Imaginea 4.20 Adăugare articol nou
Alegerea paginii pe care se va publica articolul (imaginea 4.21) se face dintr-un meniu drop-down unde există predefinite zonele site-ului așa cum au fost ele definite în meniu.
Imaginea 4.21 Drop down pentru alegerea categoriei pe care o vom completa
Modificarea joburilor postate, adăugarea și ștergerea lor se face tot de către userul de administrator din pagina “Available jobs” prin apăsarea butoanelor “Vezi”, “Modifică” și “Șterge” (imaginea 4.22).
Imaginea 4.22 Modificare pagină de joburi disponibile
Concluzii
De ce Rails si nu altceva? Există mii de limbi diferite și moduri în care ar putea construi un site web. Unele sunt mai populare decât altele, iar unele necesită instrumente sau tehnologii specifice. Unele costa destul de mult să licențieze, în timp ce altele sunt gratuite.
Am ales Rails pentru că am considerat că mă face mai eficient. Mă ajută să dezvolt mai rapid lucruri, iar munca în echipă este mai ușoară. De asemenea, a introdus serie de idei și moduri de lucru care te ajută pe tot parcursul creării unui site, de la concepere la dezvoltare și depanare.
1. Rails se potrivește foarte bine dezvoltării de site-uri
Popularitatea sa are o mulțime de a face cu faptul că Rails este deosebit de bine adaptat pentru a construi site-uri web. Poți face un prototip de lucru al unei idei destul de repede, iar apoi poți dezvolta de la asta. Acesta adresează o mulțime de problemele de care te poți lovi într-un proiect web mai mare. Schimbări bruște în domeniul de aplicare, idei noi / mai bune, modificări ale funcționalității și design, tuturor le face față cu brio. Este dotat cu o mulțime de facilități care te ajută să creezi interfețe care sunt plăcut de utilizat. Îți generează satisfacția de a face ceva frumos. Te încurajează să dezvolți software conform cu modelul Agile, care este un lucru bun.
2. Model View Controler
Principiul Model View Controler (MVC) este o foarte mare parte din Rails. Într-un cuvânt, înseamnă că desparți datele și logica (Model), aspectul (View), și modul în care interacționează cu utilizatorul (Controller) în zone separate. Dacă ești familiarizat cu HTML, e ca folosirea CSS pentru a separa aspectul și conținutul. La început, s-ar putea să nu-ți pară foarte util să separi aspectul de conținutul, dar astfel îți oferă o foarte mare flexibilitate. Totul este în compartimente îngrijite frumos, astfel încât să te poți cu aspectul (View) fără să se strice alte chestii.
3. Active Record – Esperanto al bazelor de date
Unul dintre problemele în dezvoltare web este alegerea bazei de date. Poți începe dezvoltarea cu o bază de date mică. Mai târziu s-ar putea să vrei să faci upgrade, din orice motiv (mai multe date, trafic mai mare). Cine ar fi știut că schimbarea între cele două soluții înseamnă schimbări subtile, dar critice pentru cod? Active Record este ca o bază de date Esperanto. Poți scrie totul în Active Record și nu mai contează ce bază de date vrei sa folosești. Dar dacă dorești să scrii cod specific pentru baza de date, ești liber să o faci.
4. Ruby Gems
Ceea ce vine în pachetul inițial al Rail este destul de bun, dar există acest instrument numit Ruby Gems. Gems îți permite să descarci extensii care se adaugă la ceea ce poate face Rails. Poti sa descarci o bază de date, un instrument pentru testarea codul, sau ceva care sa îți adăuge grafice atractive pentru pagina ta.
5. Capistrano
Capistrano este un instrument care ajută la publicarea site-urilor. Pentru un site simplu, cu doar câteva pagini, acest lucru nu mai este de mult o problemă – se pot pur și simplu copia fișierele pe server. Dar de îndată ce site-ul devine un pic mai avansat, va trebui să se actualizeze mai multe lucruri deodată. Când se realizează actualizarea s-ar putea schimba multe din configurările actuale : ar putea însemna o coloană suplimentară la baza de date, ștergerea unor imagini și înlocuirea unor fișiere. Acest lucru poate fi o adevărată problemă dacă se realizează manual, deoarece predispune la erori. Capistrano automatizează acest proces. După ce Capistrano a testat și totul este OK el urcă automat versiunea testată pe serverul live.
În încheiere, consider că Ruby on Rails este o unealtă foarte utilă oricărui care face sau vrea să facă dezvoltare web. Oferă foarte multe facilități și îți ușurează munca într-atât încât după un timp de folosire te întrebi cum ai putut să lucrezi înainte de a-l descoperi.
Bibliografie
[1] https://ro.wikipedia.org/wiki/Internet
[2] http://www.internetworldstats.com/stats.htm
[3] GROSSECK , Gabriela, 2014, INTERNET – istoric, evoluție, perspective, Facultatea de Sociologie și Psihologie Universitatea de Vest din Timișoara
[4] ANGHEL, Traian , 2011, Tot ce trebuie sa stii despre Internet, Ed Polirom
[5] GRALLA Preston, Ilustr. TROLLER Michael, 2003, Cum functioneaza internetul, Ed ALL
[6] SCOTT, Mitchell, 2009, Cum sa creezi un site web, editura Teora
[7] SURCEL, T., 2005, Tehnologii Web si baze de date, Tribuna Economica, București
[8] http://gs.statcounter.com/#all-comparison-ww-monthly-201406-201505
[9] CIOCÂRLIE, H; 2013, Universul limbajelor de programare. Ed. A 2-a rev. – Timișoara: Orizonturi Universitare
[10] MANEA, C., 2013, IT Security, ECDL – Permisul European de Conducere a Computerului
[11] SIMION, I., 2007, Proiectarea paginilor Web, Editura Teora, București.
[12] MNERIE, A., MOLNAR, F., 2009, Indrumător de laborator Rețele, Sisteme intrareieșire, Achiziții de date,Calculatoare – echipamente Hard, Introducere în internet, Matematici discrete, Fundației ”Ioan Slavici”
[13] SOBELL, Mark, 2014, A Practical Guide to Ubuntu Linux®, Third Edition, Pearson Education INC, SUA
[14] KEITH, Jeremy, 2010, HTML5 for web designers, A Book Apart Publisher
[15] SCHIFREEN, Robert, 2009, How to create Web sites and applications with HTML, CSS, Javascript, PHP and MySQL, Oakworth Business Publishing Ltd, UK
[16] PREDA, G., 2014, Aplicatii cu baze de date, Editura Matrixrom
[17] VELICANU, M., 2009, Sisteme de baze de date evoluate, Editura ASE, București
[18] DUCKETT, Jon, 2011, HTML and CSS: Design and Build Websites Paperback , Wiley Publisher
[19] CEDERHOLM, Dan, 2015, CSS3 for web designers, second edition, A Book Apart Publisher
[20] SLAVICI, Titus, MOLNAR, F., BEBEȘELEA, A., MNERIE, A., KREPELKA, M., GROZA, I., KÜRTI, V., KÖRÖSI, A., MNERIE, G., DORNEANU, L. , 2010, Utilizarea și programarea calculatoarelor, Fundației ”Ioan Slavici”
[21] RUBY, Sam, THOMAS, Dave, HANSSON, David Heinemeier, 2011, Agile Web Development with Rails 3.2 (Pragmatic Programmers), Pragmatic Bookshelf; Fourth Edition edition
[22] HATYL, Hartl, 2014, The Ruby on Rails Tutorial, online book
[23] BEAIRD, Jason, 2011, Principii de web design atractiv, 3d media communications
DECLARAȚIE DE AUTENTICITATE
A
LUCRĂRII DE FINALIZARE A STUDIILOR
Titlul lucrării ________________________________________________________
___________________________________________________________________
___________________________________________________________________
Autorul lucrării _____________________________________________
Lucrarea de finalizare a studiilor este elaborată în vederea susȚinerii examenului de finalizare a studiilor organizat de către Facultatea _________________________________________ din cadrul UniversităȚii din Oradea, sesiunea_______________________ a anului universitar ______________.
Prin prezenta, subsemnatul (nume, prenume, CNP)_____________________
___________________________________________________________________
___________________________________________________________________,
declar pe proprie răspundere că această lucrare a fost scrisă de către mine, fără nici un ajutor neautorizat Și că nici o parte a lucrării nu conȚine aplicaȚii sau studii de caz publicate de alȚi autori.
Declar, de asemenea, că în lucrare nu există idei, tabele, grafice, hărȚi sau alte surse folosite fără respectarea legii române Și a convenȚiilor internaȚionale privind drepturile de autor.
Oradea,
Data Semnătura
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: Arhitecturi Moderne DE Site Uri Pentru Program European Erasmus (ID: 110119)
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.
