Sunteți pe pagina 1din 35

Cuprins

Introducere............................................................................................................2
1. Studiul bazei de practică.....................................................................................3

2. Asigurarea informațională și analiza produselor existente.............................4

3. Asigurarea tehnică și caracteristica ei...............................................................5

4. Esența organizațional-economică a problemei.................................................6

5. Realizarea aplicației web în baza problemei propuse......................................7

5.1. Obiectivele și cerințele aplicației web...............................................................................7


Obiectivele...............................................................................................................................7
Cerințe......................................................................................................................................7

5.2. Tehnologii și instrumente utilizate pentru realizarea aplicației web.............................7

Python......................................................................................................................................7

JavaScript.................................................................................................................................8

PHP..........................................................................................................................................8

HyperText Markup Language..................................................................................................8

Cascading Style Sheets............................................................................................................9

Django......................................................................................................................................9

Application Programming Interface........................................................................................9

Representational state transfer.................................................................................................9

RSS........................................................................................................................................10

Elasticsearch..........................................................................................................................10

React......................................................................................................................................10

AngularJS..............................................................................................................................11

NPM.......................................................................................................................................11

PIP..........................................................................................................................................11

GIT.........................................................................................................................................11

Laravel...................................................................................................................................12
Sass (stylesheet language).....................................................................................................12

5.3. Arhitectura aplicației........................................................................................................13

5.3.1 Module și interacțiunea dintre ele.................................................................................13

5.3.2 Structura logică (schema bloc).....................................................................................13

5.3.3 Structura fizică..............................................................................................................13

5.3.4 Pagina de start (schema bloc).......................................................................................14

5.3.5 Navigarea, modul de organizare a navigării.................................................................14

5.3.6 Forme de colectare a datelor.........................................................................................15

5.3.7 Structura bazei de date..................................................................................................16

5.3.8 Stilurile scss..................................................................................................................16

5.4. Administrarea aplicație....................................................................................................19

5.5. Ghid de utilizare a site-ului..............................................................................................22

5.5.1 Autentificare.................................................................................................................22

5.5.2 Căutare, filtrare de noutăți............................................................................................22

5.5.3 Adăugare feeduri..........................................................................................................22

5.5.4 Modificare feeduri........................................................................................................23

6. Găzduire web.....................................................................................................24

Concluzie................................................................................................................25

Bibliografie.............................................................................................................26

Anexe......................................................................................................................27

RSS Parser.............................................................................................................................27

Google Search........................................................................................................................32

Transfer news.........................................................................................................................33

1
Introducere
Stagiul de practica este un moment esențial în formarea studentului, atunci când pregătirea
teoretica a studenților este finalizata. Stagiul de practica vizează consolidarea competentelor
profesionale dobândite pe parcursul studiilor si îmbinarea lor cu abilitați practice formate prin
activitatea concreta desfășurata la o unitate economica. Prin rolul sau de a facilita procesul de
inserție pe piața muncii a absolvenților ciclului de licența si prin creșterea relevantei rezultatelor
învățării teoretice din perspectiva aplicării acesteia la locul de munca, stagiul de practica este un
pas important atât pentru student, cât si pentru firme si universitate.
Pentru student, este o ocazie de la trece de la partea teoretica la cea practic-aplicativa. Stagiul de
practica reprezintă o oportunitate oferita studenților de a se pregăti pentru intrarea pe piață
muncii, prin familiarizarea lor cu viața economica reala, prin participarea lor efectiva la
activitatea economica dintr-o firma sau instituție, prin crearea unui sistem de comunicare si
relaționare eficient între aceștia si viitorii potențiali angajatori. Dincolo de dimensiunea tehnica a
punerii în aplicare a cunoștințelor dobândite, apare si ocazia de a învață perspectiva dimensiunii
sociale si umane a muncii într-o organizație.
Pentru firme, este uneori o cale de a descoperi formarea. Aceasta ocazie oferă, de asemenea,
posibilitatea de a identifica la fata locului studenții în calitate de candidați pentru locurile de
munca ce vor fi disponibile în viitor si, nu în cele din urma, reprezintă posibilitatea de a duce la
bun sfârșit cerințele de la locul de munca sub presiunile si stresul vieții cotidiene.
Formarea profesionala are doua mari componente: 1. Înțelegerea și acumularea cunoștințelor
teoretice pe care se bazează acțiunea profesionala; 2. Dezvoltarea abilitații de practicare a
profesiei respective și de aplicare a cunoștințelor teoretice. Cele doua componente presupun în
mod obligatoriu legarea studiului teoretic cu disponibilitatea pentru aplicarea cunoștințelor in
practica.
Practica este antrenata in aplicarea practica a cunoștințelor profesionale. O componenta de prima
importanță în pregătirea absolvenților de calificare înaltă, s-a dovedit a fi pregătirea practica a
studenților ,care se realizează pe parcursul practicii instructive , practicii tehnologice și celei de
absolvire , asigurând conexiunea instruirii teoretice cu activitatea de producție și inginereasca.
Obiectivul fundamental al acestei activități este ca, prin implicarea directa în activitatea acesteia
sa capete deprinderile și abilitabile necesare în practica profesiei. Practica reprezintă un pas
foarte important în pregătirea ca specialist. Chiar daca pascal nu o sa îmi trebuiască în activitatea
profesionala, el rămâne primul limbaj în care am învățat sa implementez algoritmi care se
folosesc pe larg de programatori. Desigur ca pentru început mi-am reamintit cum sa implementez
procedurile și funcțiile pentru a-mi simplifica munca.

2
1. Studiul bazei de practică
Enterprise Business Solutions (EBS) este o companie IT din Republica Moldova fondată în
2016. Compania se ocupă cu dezvoltare web și mobile (Android și IOS). EBS e o echipă de
dezvoltatori profesioniști în domeniul Mobile și Web cu experiență dovedită în ceea ce privește
calitate și încredere.
Indiferent ca este vorba despre un produs software sau o soluție unica, EBS poate oferi servicii
de dezvoltare software personalizate pentru a face ca proiectul să crească.
Indiferent dacă clientul e un start-up și încă trebuie să concepte ideea și trebuie dovedească
conceptul cu viziuni persuasive pentru investitorii săi sau pur și simplu să încerce să-și extindă
echipa pentru a satisface așteptările de competență, timp și buget, EBS este gata să ofere
asistența în fiecare etapă de la analiza de afaceri și prototipuri de dezvoltarea și implementarea
soluției clientului.
Compania dispune de resurse extrem de experimentate și calificate, precum și de dezvoltatori
certificați cu un fundal tehnic bogat. Ea oferă servicii personalizate de dezvoltare de software și
echipe dedicate pentru dezvoltarea de software. Ea oferă un proces complet de dezvoltare a
ciclului de viață al software-ului, inclusiv consultanță, design de arhitectură, implementare și
testare, suport post-lansare, precum și întreținerea continuă a proiectului.

3
2. Asigurarea informațională și analiza
produselor existente
DueDil este o platformă privată de informare a companiilor care permite companiilor să
găsească oportunități și să reducă riscurile. DueDil oferă date autoritare și un context bogat
pentru peste 40 de milioane de companii din 9 țări europene.
Are misiunea de a deveni cea mai mare sursă de informații privitoare la companii private, cu
scopul de a face ca informațiile despre companii private să fie cât mai bogate și mai accesibile ca
și companiile publice.
Spre deosebire de furnizorii tradiționali de informații, DueDil oferă o platformă unificată pentru
echipele dintr-o afacere care contextualiză și navighează relațiile dintre seturile de date.
Bazat la Londra și fondat în 2011, DueDil a ridicat aproape 30 de milioane de dolari de la
investitori respectați în SUA și Marea Britanie, printre care Oak Investment Partners, Passion
Capital și Notion Capital.
DueDil extrage date dintr-o gamă largă de surse și le digitizează, permițând utilizatorilor să caute
informații, să găsească noi clienți și să atenueze riscurile.
Rezultatele căutării companiei oferă informații care includ până la 20 de ani de date financiare,
ipoteci, investiții, steaguri roșii, litigii și structuri de proprietate asupra grupului.
Rezultatele căutării directorului prezintă profiluri directe individuale, inclusiv numele complet,
data nașterii, naționalitatea, pseudonimele cunoscute, termenele pentru direcțiile actuale și
anterioare, precum și profilurile media sociale.
Funcțiile DueDil includ o funcție de alertă care permite utilizatorilor să urmărească și să
primească actualizări despre companiile de interes, filtre de căutare detaliate ale companiilor și
directorilor, valori financiare, știri, grafice de grup, diagrame și integrarea cu rețelele sociale. În
martie 2017, DueDil a lansat cea de-a patra versiune a API-ului său pentru a permite companiilor
să integreze datele DueDil cu sistemele lor interne. Printr-un parteneriat cu CallCredit
Information Group, DueDil oferă un serviciu care permite utilizatorilor să efectueze în același
timp verificări de verificare asupra companiilor și a persoanelor conectate.

4
3. Asigurarea tehnică și caracteristica ei
Pe parcursul practicii am lucrat la un calculator de tip desktop model HP Compaq 8200 Elite
Ultra-Slim Desktop cu următoarele specificații:
● Procesor: Intel Core i5-2400S (2.50 GHz, 6MB cache, 4 cores);
● Cipset: Intel Q67 Express;
● Memorie: SATA Solid State Drive (SSD) de 248GB;
● Placa video: ATI Radeon HD 5450 (512MB);
● Porturi:
○ 10 USB 2.0;
○ 1 DisplayPort;
○ 1 VGA video;
○ 1 PS/2 keyboard;
○ 1 PS/2 mouse;
○ 1 RJ-45;
○ 1 microphone/headphone jack;
○ 1 line in;
○ 1 line out;
○ DVI output available via optional DisplayPort to DVI Adapter;
● Audio: Realtek ALC261 high definition audio codec (all ports are stereo);
● Interfață rețea: Integrated Intel 82579LM Gigabit Ethernet.
Pe parcursul practicii am utilizat următoarele aplicații: JetBrains PyCharm, JetBrains
PHPStorm, Visual Studio Code, Open Server Panel, KiTTY, Cmder și pgAdmin.
JetBrains PyCharm este un mediu integrat de dezvoltare (IDE) utilizat în programarea
calculatoarelor, în special pentru limba Python.
JetBrains PhpStorm este o platformă IDE pentru platforme comerciale, platformă construită pe
platforma IntelliJ IDEA a companiei JetBrains.
Visual Studio Code este un editor de cod sursă dezvoltat de Microsoft pentru Windows, Linux
și MacOS. Acesta include suport pentru depanare, control Git încorporat, evidențierea sintaxei,
finalizarea codului inteligent, fragmente și refactorizarea codului.
Open Server Panel este o platformă de server portabil și un mediu software conceput special
pentru dezvoltatorii web, ținând cont de recomandările și dorințele acestora.
KiTTY este cel mai bun client Telnet / SSH din lume. KiTTY este proiectat numai pentru
platforma Microsoft Windows.
Cmder este un pachet software creat dintr-o pură frustrare în ceea ce privește absența
emulatorilor console frumos pe Windows. Acesta se bazează pe un software uimitor și este
alcătuit dintr-o schemă de culori Monokai și un aspect personalizat, aspectul sexy de la început.
pgAdmin este cea mai populară și mai bogată platformă de administrare și dezvoltare Open
Source pentru PostgreSQL, cea mai avansată bază de date Open Source din lume.

5
4. Esența organizațional-economică a
problemei
Global Database este lider de piață în business intelligence, oferind informații despre companie
prin platforma noastră online și soluții integrate de flux de lucru. Indiferent dacă sunteți în
căutarea unor potențiali oameni de afaceri, informații financiare ale companiei, riscuri de credit
sau pentru a obține o perspectivă asupra tehnologiei pe care o utilizează, Global Database
furnizează o platformă unificată pentru a acoperi totul.
Astăzi, mai multe date devin disponibile ca niciodată. Cum colectăm, organizăm și analizăm
datele este ceea ce ne face diferit. Dăm date live dintr-o gamă largă de surse autoritare, o
combinăm și o prezentăm în mod clar.
Acesta este motivul pentru care soluțiile noastre sunt utilizate de mii de profesioniști în vânzări,
marketing și finanțe în companii de top, printre care Microsoft, Avaya, Cisco, KPMG, Maserati,
DHL, Dupont, Iveco, Caterpillar, Ipsos, Motorola Solutions, Experian și multe altele.
Scopul principal este de a face mai multe informații despre companii și directori mai accesibile și
mai accesibile. Din acest motiv, am decis în 2016 să punem la dispoziția publicului toate datele
noastre, ceea ce va aduce transparență completă modului în care se desfășoară afacerile globale.

6
5. Realizarea aplicației web în baza
problemei propuse
5.1. Obiectivele și cerințele aplicației web
Obiectivele
 să genereze noi oportunități de vânzare / să crească vânzările;
 să crească încrederea clienților;
 să consolideze identitatea mărcii firmei;
 să ajute la extinderea pe piețe externe;
 să ofere servicii cumpărătorilor 24/7.

Cerințe
 Aplicația trebuie să ofere acces utilizatorului la cele mai recente și populare noutăți
despre compania sa;
 Aplicația trebuie să fie capabilă sa găsească și să păstreze noutăți;
 Aplicația trebuie să filtreze noutățile;
 Aplicația trebuie să fie capabilă să depisteze duplicatele;
 Aplicația trebuie să fie capabilă să găsească noi surse de noutăți în dependență de cererile
clienților;
 Aplicația trebuie să fie capabilă să dezactiveze sursele care nu corespund cerințelor;
 Aplicația trebuie să fie capabilă să execute test, filtrare, căutare de noi noutăți autonom la
un anumit interval de timp;
 Aplicația trebuie să fie capabilă să transfere datele din baza de date în ElasticSearch.

5.2. Tehnologii și instrumente utilizate pentru realizarea


aplicației web
Python
Python este un limbaj de programare dinamic mulți-paradigmă, creat în 1989 de programatorul
olandez Guido van Rossum. Van Rossum este și în ziua de astăzi un lider al comunității de
dezvoltatori de software care lucrează la perfecționarea limbajul Python și implementarea de
bază a acestuia, CPython, scrisă în C. Python este un limbaj multifuncțional folosit de exemplu
de către companii ca Google sau Yahoo! pentru programarea aplicațiilor web, însă există și o
serie de aplicații științifice sau de divertisment programate parțial sau în întregime în Python.
Popularitatea în creștere, dar și puterea limbajului de programare Python au dus la adoptarea sa
ca limbaj principal de dezvoltare de către programatori specializați și chiar și la predarea
limbajului în unele medii universitare. Din aceleași motive, multe sisteme bazate pe Unix,
inclusiv Linux, BSD și Mac OS X includ din start interpretatorul CPython.

7
Python pune accentul pe curățenia și simplitatea codului, iar sintaxa sa le permite dezvoltatorilor
să exprime unele idei programatice într-o manieră mai clară și mai concisă decât în alte limbaje
de programare ca C. În ceea ce privește paradigma de programare, Python poate servi ca limbaj
pentru software de tipul object-oriented, dar permite și programarea imperativă, funcțională sau
procedurală. Sistemul de tipizare este dinamic iar administrarea memoriei decurge automat prin
intermediul unui serviciu „gunoier” (garbage collector). Alt avantaj al limbajului este existența
unei ample biblioteci standard de metode.
Implementarea de referință a Python este scrisă în C și poartă deci numele de CPython. Această
implementare este software liber și este administrată de fundația Python Software Foundation.

JavaScript
JavaScript (JS) este un limbaj de programare orientat obiect bazat pe conceptul prototipurilor.
Este folosit mai ales pentru introducerea unor funcționalități în paginile web, codul JavaScript
din aceste pagini fiind rulat de către browser. Limbajul este bine-cunoscut pentru folosirea sa în
construirea siturilor web, dar este folosit și pentru accesul la obiecte încastrate (embedded
objects) în alte aplicații. A fost dezvoltat inițial de către Brendan Eich de la Netscape
Communications Corporation sub numele de Mocha, apoi LiveScript, și denumit în final
JavaScript.
În ciuda numelui și a unor similarități în sintaxă, între JavaScript și limbajul Java nu există nicio
legătură. Ca și Java, JavaScript are o sintaxă apropiată de cea a limbajului C, dar are mai multe
în comun cu limbajul Self decât cu Java.
Până la începutul lui 2005, ultima versiune existentă a fost JavaScript 1.5, care corespunde cu
Ediția a 3-a a ECMA-262, ECMAScript, cu alte cuvinte, o ediție standardizată de JavaScript.
Versiunile de Mozilla începând cu 1.8 Beta 1 au avut suport pentru E4X, care este o extensie a
limbajului care are de a face cu XML, definit în standardul ECMA-357. Versiunea curentă de
Mozilla, 1.8.1 (pe care sunt construite Firefox și Thunderbird versiunile 2.0) suportă JavaScript
versiunea 1.7.

PHP
PHP este un limbaj de programare. Numele PHP provine din limba engleză și este un acronim
recursiv : Php: Hypertext Preprocessor. Folosit inițial pentru a produce pagini web dinamice, este
folosit pe scară largă în dezvoltarea paginilor și aplicațiilor web. Se folosește în principal
înglobat în codul HTML, dar începând de la versiunea 4.3.0 se poate folosi și în mod „linie de
comandă” (CLI), permițând crearea de aplicații independente. Este unul din cele mai importante
limbaje de programare web open-source și server-side, existând versiuni disponibile pentru
majoritatea web serverelor și pentru toate sistemele de operare. Conform statisticilor este instalat
pe 20 de milioane de site-uri web și pe 1 milion de servere web. Este disponibil sub Licența PHP
și Free Software Foundation îl consideră a fi un software liber.
Inițial, limbajul a fost dezvoltat de inventatorul său, Rasmus Lerdorf. Odată cu creșterea
numărului de utilizatori, dezvoltarea a fost preluată de o nouă entitate, numită The PHP Group
(Grupul PHP).

8
HyperText Markup Language
HyperText Markup Language (HTML) este un limbaj de marcare utilizat pentru crearea
paginilor web ce pot fi afișate într-un browser (sau navigator). Scopul HTML este mai degrabă
prezentarea informațiilor – paragrafe, fonturi, tabele ș.a.m.d. – decât descrierea semanticii
documentului.
Specificațiile HTML sunt dictate de World Wide Web Consortium (W3C).

Cascading Style Sheets


CSS (Cascading Style Sheets) este un standard pentru formatarea elementelor unui document
HTML. Stilurile se pot atașa elementelor HTML prin intermediul unor fișiere externe sau în
cadrul documentului, prin elementul <style> și/sau atributul style. CSS se poate utiliza și pentru
formatarea elementelor XHTML, XML și SVGL.

Django
Django (/ˈdʒæŋɡoʊ/ jang-goh) este un soft cadru pentru dezvoltarea aplicațiilor web (en. web
application framework) gratuit și cu sursă deschisă, scris în Python, care urmează modelul
arhitectural Model-View-Controller.
Scopul principal al acestui soft cadru pentru dezvoltarea aplicațiilor web este de a facilita crearea
de website-uri complexe, fundate pe baze de date. Django pune accent pe reutilizarea codului, pe
modularitate, dezvoltare rapidă a site-urilor web, ghidându-se după principiul "nu te repeta" (en.
Don't repeat yourself - DRY). Django este codat de la un capăt la altul în Python, chiar și
fișierele de configurare și modelele de date sunt implementate în acest limbaj de programare.
Django oferă și un panou administrativ, care, deși vine preinstalat, este opțional, prin intermediul
acestuia se pot crea, citi, actualiza și șterge cu ușurință informații din baza de date. Acest panou
de administrare este generat dinamic prin introspecție (prin analizarea tabelelor din baza de date)
și poate fi ușor configurat prin modelele administrative de date.

Câteva website-uri bine cunoscute care utilizează Django sunt Pinterest, Instagram, Mozilla, The
Washington Times, Disqus, Public Broadcasting Service și Bitbucket.

Application Programming Interface


Application Programming Interface (API) reprezintă un set de definiții de sub-programe,
protocoale si unelte pentru programarea de aplicații si software. Un API poate fi pentru un sistem
web, sistem de operare, sistem de baze de date, Hardware sau biblioteci software. De exemplu,
când este vorba despre interfața dintre programele de aplicație și sistemul de operare, acesta
stabilește în amănunt modul în care programele de aplicație pot accesa (apela) serviciile
sistemului de operare sub care rulează.

Representational state transfer


Transferul de stat reprezentativ (REST) este un stil arhitectural care definește un set de
constrângeri și proprietăți bazate pe HTTP. Serviciile Web care respectă stilul arhitectural REST
sau cele mai performante servicii web asigură interoperabilitatea între sistemele informatice de

9
pe Internet. Serviciile web compatibile cu REST permit sistemelor solicitante să acceseze și să
manipuleze reprezentările textuale ale resurselor web utilizând un set uniform și predefinit de
operațiuni fără stat. Alte tipuri de servicii web, cum ar fi serviciile web SOAP, expun propriile
seturi de operațiuni arbitrare.
"Resursele web" au fost definite pentru prima dată pe World Wide Web ca documente sau fișiere
identificate prin URL-urile lor. Cu toate acestea, astăzi au o definiție mult mai generică și
abstractă, care cuprinde orice lucru sau entitate care poate fi identificată, numită, adresată sau
manipulată, în orice mod, pe web. Într-un serviciu web RESTful, solicitările făcute către un URI
al unei resurse vor genera un răspuns care ar putea fi în format HTML, XML, JSON sau într-un
alt format. Răspunsul poate confirma că s-a făcut o modificare a resursei stocate, iar răspunsul
poate furniza legături hipertext la alte resurse sau colecții de resurse conexe. Atunci când se
utilizează HTTP, așa cum este cel mai frecvent, operațiile disponibile sunt GET, POST, PUT,
DELETE și alte metode predefinite CRUD HTTP.

RSS
RSS este o familie de formate de fluxuri web, realizate în format XML și folosite pentru Web
syndication. RSS este folosit (printre altele) pentru știri, weblog-uri și podcasting. Abreviația
este folosită pentru a face referință la următoarele standarde:
 Really Simple Syndication (RSS 2.0)
 Rich Site Summary (RSS 0.91, RSS 1.0)
 RDF Site Summary (RSS 0.9 și 1.0)
Web feed-urile oferă conținut web sau sumare de conținuturi web împreună cu legături către
conținutul complet al respectivei surse de informații și alte metadate. RSS oferă această
informație sub forma unui fișier XML numit feed RSS, webfeed, stream RSS sau canal RSS. În
plus, față de facilitarea partajării știrilor (termen american: "syndication") , feed-urile web permit
cititorilor fideli anumitor pagini să fie informați la actualizarea conținutului de pe aceste pagini
web, prin folosirea unui soft special numit aggregator.
În paginile web, feed-urile web (RSS sau Atom) sunt de obicei legate de cuvântul "subscribe"
("subscrie"), un pătrat portocaliu, , sau de literele sau .

Elasticsearch
Elasticsearch este un motor de căutare bazat pe Lucene. Acesta oferă un motor distribuit, cu
capabilități multiple, cu capabilități multiple, cu o interfață web HTTP și documente JSON fără
schemă. Elasticsearch este dezvoltat în Java și este lansat ca open source în termenii Licenței
Apache. Clienții oficiali sunt disponibili în Java,.NET (C #), PHP, Python, Apache Groovy,
Ruby și multe alte limbi. Conform clasamentului DB-Engines, Elasticsearch este cel mai
popular motor de căutare pentru întreprinderi, urmat de Apache Solr, bazat și pe Lucene.
Elasticsearch este dezvoltat alături de un motor de colectare a datelor și logare, numit Logstash,
și o platformă de analiză și vizualizare numită Kibana. Cele trei produse sunt concepute pentru a
fi utilizate ca o soluție integrată, denumită "Elastic Stack" (anterior "stiva ELK").

10
React
În calcul, React (cunoscut și ca React.js sau ReactJS) este o bibliotecă JavaScript pentru a
construi interfețe utilizator. Este menținută de Facebook și de o comunitate de dezvoltatori și
companii individuale.
React poate fi folosit ca bază în dezvoltarea aplicațiilor de o singură pagină sau a celor mobile.
Aplicațiile Complex React necesită, de obicei, utilizarea de biblioteci suplimentare pentru
managementul statului, rutare și interacțiune cu un API.

AngularJS
AngularJS (denumit în mod obișnuit "Angular.js" sau "AngularJS") este un framework de
aplicații web bazate pe open-source bazate pe JavaScript, menținut în principal de Google și de o
comunitate de indivizi și corporații pentru a aborda multe dintre provocările întâlnite în
dezvoltarea de aplicații cu o singură pagină. Componentele JavaScript completează Apache
Cordova, un cadru folosit pentru dezvoltarea aplicațiilor mobile pe mai multe platforme.
Obiectivul său este de a simplifica atât dezvoltarea și testarea unor astfel de aplicații, oferind un
cadru pentru arhitecturile de vizualizare a modelului vizual (MVC) și model-view-viewmodel
(MVVM), împreună cu componentele utilizate frecvent în aplicațiile Internet bogate. În 2014,
echipa inițială AngularJS a început să lucreze la platforma de aplicații Angular.
Cadrul AngularJS funcționează prin citirea în premieră a paginii HTML, care are în plus atribute
de tag personalizate. Angular interpretează aceste atribute drept directive pentru a lega părțile de
intrare sau de ieșire ale paginii unui model care este reprezentat de variabilele JavaScript
standard. Valorile acestor variabile JavaScript pot fi setate manual în cadrul codului sau sunt
recuperate din resurse statice sau dinamice JSON.

NPM
npm este un manager de pachete pentru limbajul de programare JavaScript. Acesta este
managerul implicit de pachete pentru mediul de runtime JavaScript Node.js. Se compune dintr-
un client de linie de comandă, numit și npm, și o bază de date online a pachetelor publice și
plătite pentru pachete private, numită registrul npm. Registrul este accesat prin intermediul
clientului, iar pachetele disponibile pot fi accesate și căutate prin intermediul site-ului npm.
Managerul de pachete și registrul sunt gestionate de npm, Inc.

PIP
pip este un sistem de gestionare a pachetelor utilizat pentru a instala și administra pachetele
software scrise în Python. Multe pachete pot fi găsite în sursa implicită pentru pachete și
dependențele acestora - Python Package Index (PyPI).
Python 2.7.9 și versiunile ulterioare (pe seria python2) și Python 3.4 și mai târziu includ pip
(pip3 pentru Python 3) în mod implicit.
Începând cu pip 10.0.0, python 2.6 nu mai este suportat. Utilizatorii care doresc să utilizeze pip
pe python 2.6 ar trebui să rămână pe versiunea 9.
pip este un acronim recursiv care poate rezista fie la "Pip instalează pachetele", fie la "Pip
instalează Python". Alternativ, pip se referă la "programul preferat de instalare".

11
GIT
Git este un sistem revision control care rulează pe majoritatea platformelor, inclusiv Linux,
POSIX, Windows și OS X. Ca și Mercurial, Git este un sistem distribuit și nu întreține o bază de
date comună. Este folosit în echipe de dezvoltare mari, în care membrii echipei acționează
oarecum independent și sunt răspândiți pe o arie geografică mare.
Git este dezvoltat și întreținut de Junio Hamano, fiind publicat sub licență GPL și este considerat
software liber.
Dintre proiectele majore care folosesc Git amintim Amarok, Android, Arch Linux, Btrfs, Debian,
DragonFly BSD, Eclipse, Fedora, FFmpeg , GIMP, GNOME, GTK+, Hurd, Linux kernel, Linux
Mint, openSUSE, Perl, phpBB, Qt, rsync, Ruby on Rails, Samba.

Laravel
Laravel este un framework web gratuit, open-source PHP, creat de Taylor Otwell și destinat
dezvoltării de aplicații web după modelul arhitectural model-view-controller (MVC) și bazat pe
Symfony. Unele dintre caracteristicile lui Laravel sunt un sistem modular de ambalare cu un
manager de dependență dedicat, modalități diferite de accesare a bazelor de date relaționale,
utilități care ajută la implementarea și întreținerea aplicațiilor și orientarea spre zahărul
sintactic : 2,5 -9
Codul sursă al lui Laravel este găzduit de GitHub și licențiat sub licența MIT.

Sass (stylesheet language)


Sass (foi de stil sinaptic minunat) este un limbaj de stil conceput inițial de Hampton Catlin și
dezvoltat de Natalie Weizenbaum. [2] [3] După versiunile sale inițiale, Weizenbaum și Chris
Eppstein au continuat să extindă Sass cu SassScript, un limbaj simplu de scripting folosit în
fișierele Sass.
Sass este un limbaj de scripting preprocesor care este interpretat sau compilat în foi de stil
cascadă (CSS). SassScript este limbajul de scripting în sine. Sass este alcătuită din două sintaxe.
Sintaxa originală, numită "sintaxa indentată", folosește o sintaxă similară cu cea a lui Haml [4].
Utilizează indentarea pentru a separa blocurile de coduri și caracterele noi pentru a separa
regulile. Sintaxa mai nouă, "SCSS" (Sassy CSS), folosește formatarea blocului ca cea a CSS.
Utilizează brațele pentru a denumi blocurile de cod și punct și virgulă pentru a separa liniile
dintr-un bloc. Sintaxa indentată și fișierele SCSS au în mod tradițional extensiile .sass și .scss.

12
5.3. Arhitectura aplicației
5.3.1 Module și interacțiunea dintre ele
Site-ul va include câteva module principale:
 Modul de autentificare
 Modul de adăugare a feed-urilor
 Modul de modificare a feed-urilor
 Modul de ștergere a feed-urilor
 Modul de căutare a feed-urilor
 Modul de afișare a ultimilor 15 noutăți care aparțin uni feed anumit
 Modul de căutare a noutăților
 Modul de filtrare a noutăților după data
Aceste module vor fi toate incluse in website fiecare fiind apelat după necesitate (doar atunci
când este necesar) ceea ce reduce din timpul de încărcare a site-ului și duce la ridicarea eficienței
site-lui.

5.3.2 Structura logică (schema bloc)

5.3.3 Structura fizică

13
5.3.4 Pagina de start (schema bloc)

5.3.5 Navigarea, modul de organizare a navigării

Navigarea pe site se efectuează prin metodă obișnuită în partea de sus a site-ului. Ea are funcția
să organizeze toate paginile principale din website. Ea a fost adaptată sub orice tip de dispozitiv.
De asemenea navigarea spre altă pagină nu necesită refresh la pagină.

14
5.3.6 Forme de colectare a datelor

Forna de adăugare sau cerere (post request) este creată dinamic poate fi folosită cât pentru
înregistrare atât și pentru logare.

Forna de modificare (put request) este creată dinamic poate fi folosită cât pentru resetarea parolei
sau modificare.

15
5.3.7 Structura bazei de date

5.3.8 Stilurile scss


/* -------------------- Sort and Info Menu -------------------- */
.sort_info_menu {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 20px;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;

h2 {
margin: 0;
font-weight: bold;
color: #4a5163;
}

select {
width: auto;
margin: 0;

option {
margin: 10px 0;
}

16
}
}
/* ------------------------------------------------------------ */

/* -------------------- News container -------------------- */


.news-container {
padding: 20px 20px;
border-radius: 3px;
display: flex;

&:nth-child(2n+0) {
background-color: #F1F6F8;
}

&:hover {
box-shadow: 0 5px 20px 0 rgba(38, 38, 38, 0.1);
border-radius: 3px;
transition: all 0.2s ease;
}

a.news-image {
align-self: center;

div {
min-width: 130px;
min-height: 130px;
margin-right: 10px;
background-size: cover;
background-position: center center;
border-radius: 3px;
}
}

div.news-content {
font-size: 13px;

a {
transition: color 0.2s ease-in-out;
}

a:hover {
color: lighten(#428bca, 15%);
}

17
h2.news-title {
margin-bottom: 0;
line-height: 1.5;
font-size: 17px;
color: #428bca;
font-weight: bold;
}

div.news-info {
margin-bottom: 5px;

& > * {
display: inline;
}

p {
color: #959595;
}
}

p.news-summary {
margin: 0;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
}
}
/* -------------------------------------------------------- */

18
5.4. Administrarea aplicație
Pentru administrarea aplicației a fost elaborat un dashboard Acest dashboard permite gestiunea
(crearea, modificarea, ștergerea) feed-urilor, keyword-urilor căutate, sait-urilor companiilor și a
noutăților.

Pagina feed-urilor. Pagina feed-urilor ne oferă posibilitatea de a adaugă, dezactiva, modifica sau
șterge feed-uri

Modificarea feed-urilor. Poate fi modificat lincul sau/și numele

19
Pagina keyword-urilor

Pagina sait-urilor companiilor

20
Pagina noutăților permite filtrarea după dată sau/și căutare după un cuvânt cheie. Căutarea și
filtrarea se efectuează cu ajutorul motorului de căutare ElasticSearch.

21
5.5. Ghid de utilizare a site-ului
5.5.1 Autentificare
Ca să acceseze Dashbordul utilizatorul trebuie să se autentifice.

5.5.2 Căutare, filtrare de noutăți

Pentru a căuta sau filtra noutăți utilizatorul trebuie să introducă cuvântul cheie dorit sau să
selecteze intervalul de date.

5.5.3 Adăugare feeduri


Pentru a adăuga un nou filtru utilizatorul trebuie sa introducă denumirea feed-ului (câmpul
name), linkul (câmpul url) și filtrele (grupa de câmpuri filters, filtrele sunt opționale). Câmpurile
name și url sunt obligatorii ele nu pot fi lăsate goale, câmpul url necesită un url valid.

22
5.5.4 Modificare feeduri

La apăsarea pe lincul sau numele feed-ului pe ecran va apărea un modal cu o formă. Câmpul este
obligatoriu și nu poate fi lăsat gol (dacă câmpul va fi lăsat gol la ecran va apărea o eroare).

23
6. Găzduire web
Pentru găzduire va fi folosit un server al companie. Pe server va fi instalat sistemul de operare
Ubuntu. Serverul va avea caracteristicele tehnice necesare pentru funcționarea corectă
proiectului. Din motive de securitate accesarea serverului va fi posibilă doar folosind VPN-ul
companiei. Pe server va fi instalat Python-ul cu toate dependențele (Django, Django Rest
Framework, s.a), ElasticSearch și alte aplicații necesare pentru funcționarea corectă a proiectului.
Serverul de asemenea va înregistra logourile pentru debug-ul aplicației in caz de eroare.

24
Concluzie
După trecerea acestor 8 săptămâni de practică am format noi competențe și deprinderi în
domeniul programării. Am aplicat pe deplin cunoștințele acumulate timp de 4 ani și chiar dacă
am întâlnit unele dificultăți, am apelat la literatură și la conspectele scrise la perechile anterioare
cu ajutorul cărora am resit să rezolv problemele apărute.
În perioada practicii am reușit să recapitulez tehnicile de programare și instrucțiunile de
programare. La fel pe parcursul practicii am însușit tehnologia de elaborare a programelor mari,
și divizarea lor în mai complexe și mai simple și reducerea lor la cele deja rezolvate.
Experiența acumulată de-a lungul unui astfel de stagiu este foarte importantă, mai ales că în
zilele noastre contează mai mult experiența decât nenumăratele diplome sau cursuri la care ai
participat. Cei mai mulți angajatori caută oameni cu experiență sau cel puțin dispuși să învețe și
să acumuleze cât mai multe informații într-un timp cât mai scurt. Tinerii participanți la un stagiu
de practică vor avea nenumărate avantaje: interacțiunea cu profesioniști în domeniu, posibilitatea
de a participa la training-uri și sesiuni de formare teoretică și practică, lucrul în cadrul unor
echipe competitive, precum și orientarea către rezultate. Companii importante oferă și propun
stagii de practică în diferite domenii precum: financiar, bancar, IT, resurse umane, administrativ,
contabilitate, vânzări sau juridic.
De cealaltă parte, prin aceste programe de stagii de practică, angajatorii au posibilitatea de a
atrage în cadrul companiei lor tineri valoroși, pe care îi pot forma, îndruma și ulterior angaja în
regim permanent. Selectarea unui student sau proaspăt absolvent într-un program de practică
presupune seriozitate, orientare către învățare și perfecționare, precum și deschiderea de a
dobândi abilități profesionale noi.
Eu consider că pentru un programator bun în primul rând este necesară instruirea practică,
deoarece doar prin practică putem analiza și aplica cunoștințele teoretice pe care le-am acumulat
și care de foarte multe ori nu sunt înțelese până la urmă.
În concluzie, consider că stagiul de practică realizat în ultimele 8 săptămâni în cadrul companiei
”Enterprise Business Solutions” reprezintă un pas important în dezvoltarea mea profesională și
mi-a permis, de asemenea să-mi creez o privire de ansamblu asupra acestui domeniu, a
diferențelor dintre ceea ce învățăm în timpul anilor de studiu și cu ce ne confruntăm de fapt la
ieșirea de pe băncile facultății.

25
Bibliografie
1. https://www.python.org/
2. https://www.djangoproject.com/
3. https://angularjs.org/
4. https://developer.mozilla.org/ru/docs/Web/JavaScript
5. Albers, Josef. The Interaction of Color, Yale University Press, 1971.
6. It explains the critical contextual relationships of color. How and why colors change their
appearance.
7. https://www.elastic.co/products/elasticsearch
8. https://sass-lang.com/
9. https://laravel.com/
10. https://stackoverflow.com/
11. https://web.ceiti.md/
12. Arnheim, Rudolph, Art and Visual Perception, University of California Press.
13. The most thorough and academic book about design principles.
14. Bouma, Pieter Johannes. Physical Aspects of Colour, 2nd Edition, Philips Technical
Library, Macmillan, London, 1971.
15. Clulow, Frederick W. Colour: Its Principles and Their Applications, Fountain Press,
London, 1972.
16. Coady, Geri. Color Accessibility Workflows, A Book Apart, 2017.
17. Delauney, Sonia. The New Art of Colour, Viking Press, 1978 (Reprint of 1926 Edition).
18. Evans, Ralph M. An Introduction to Color. John Wiley and Sons, New York, 1948.
19. Blanck, Peter. eQuality: The Struggle for Web Accessibility by Persons with Cognitive
Disabilities, Cambridge Disability Law and Policy Series, 2015.
20. Burgstahle, Sheryl. Universal Design in Higher Education: From Principles to Practice,
Harvard Education Press, 2008.
21. http://www.django-rest-framework.org/
22. https://www.w3schools.com/
23. Castro, Elizabeth and Hyslop . HTML5, and CSS, Eight Edition: (Visual QuickStart
Guide), Peachpit Press, 2013.
24. Devlin, Ian. HTML5 Multimedia: Develop and Design, Peachpit Press, 2011.
25. Felke-Morris. Basics of Web Design: HTML5 & CSS3, 2nd Edition, Addison-Wesley,
2013.
26. Felke-Morris, Web Development & Design Foundations with HTML5, 7th Edition,
Addison-Wesley, 2014.
27. https://reactjs.org/
28. Andrew, Rachel. The New CSS Layout , A Book Apart, 2017.
29. Bartlett, Kynn. Sams Teach Yourself Cascading Style Sheets in 24 Hours, Second
Edition, Sams, 2006.
30. Budd, Andy, et al. CSS Mastery: Advanced Web Standards Solutions,Friends of ED,
2006.

26
Anexe
RSS Parser
def parse_rss():
# noinspection PyUnresolvedReferences
for feed in Feed.objects.filter(active=True).order_by('-
priority'):
feed_data = feedparser.parse(feed.url).entries

if not feed_data:
feed.active = False
feed.save()
log_info('Feed {} with ID {} was
deactivated'.format(feed.url, feed.id))
continue

custom_filter = feed.custom_filter # get custom filter from


feed
summary_content_length =
custom_filter.get('summary_content_length', 400)

for data in feed_data:


if News.objects.filter(link=data.link).exists():
continue

news = News() # initialize new News object

current_feed_details = {'Feed id': feed.id, 'Feed url':


feed.url, 'News link': data.link}

try:
news.title = data.title # get title
news.link = data.link # get link
except Exception:
log_exception('Get link or title',
current_feed_details)
continue

if News.objects.filter(title=data.title).exists(): # check
if title exist
news.duplicate = True

27
current_date = datetime.datetime.now(tz=timezone.utc) +
datetime.timedelta(hours=3) # get UTC+3 date
emit_parse_article_task = False

# ------------------------------ Get date


------------------------------ #
try:
news.pub_date = parser.parse(data.published) # get
published date
except Exception:
news.pub_date = current_date # if date doesn't exist
use current date
#
------------------------------------------------------------
---------- #

if hasattr(data, 'tags'): # if feed have tag tags get


tags
try:
if hasattr(data.tags[0], 'term'):
news.tags = [tag.term for tag in data.tags]
except Exception:
log_exception('Tags insert', current_feed_details)

if hasattr(data, 'authors'): # if feed have tag authors


get authors
try:
if hasattr(data.authors[0], 'name'):
news.authors = [author.name for author in
data.authors]
except Exception:
log_exception('Authors insert',
current_feed_details)

# ------------------------------ Get image


------------------------------ #
for field in {'media_content', 'media_thumbnail', 'image',
'enclosures', 'enclosure',
'media_thumbnails'}:
try:
data_attribute = data[field]

try:
news.image =

28
get_image(data_attribute[0]['url'])
break
except Exception:
pass

try:
news.image = get_image(data_attribute[0])
break
except Exception:
pass

try:
news.image = get_image(data_attribute['url'])
break
except Exception:
pass

news.image = get_image(data_attribute)
break
except Exception:
pass

if not news.image: # if didn't found image, search image in


summary or content
for search_tag in ('summary', 'content'):
try:
if hasattr(data, search_tag):
images = BeautifulSoup(
data.summary if search_tag ==
'summary' else
data.content[0]['value'],
'html.parser'
).findAll('img')

image_url = images[0].get('src', None) if


images else None

news.image = get_image(image_url)
except Exception:
log_exception('Search for image in summary and
content',
current_feed_details)

29
#
----------------------------------------------------------------------
- #

# ------------------------------ Get summary and content


------------------------------ #
try:
summary_len = 0

if hasattr(data, 'summary'): # if feed have tag


summary
summary = remove_html_tags(data.summary) # get
summary from feed
summary_len = len(summary)

if summary_len > summary_content_length: # if summary


have valid length
news.content = summary # summary is content
else:
news.summary = summary # summary is valid

if hasattr(data, 'content'): # if feed have tag


content
content = remove_html_tags(data.content[0]
['value']) # get
content from feed
content_len = len(content)

if content_len > summary_content_length and


content_len > summary_len:
# if content have valid length and content is
bigger what summary #
news.content = content # content is valid
elif not news.summary: # if summary doesn't exist
news.summary = content # content is summary

if not news.content: # if content doesn't exist parse


content from feed link
emit_parse_article_task = True
else:
news.response_code = 200 # if content exist set
response code
200

30
if not news.summary and news.content:
# if summary doesn't exist get summary from
content first three
sentences #
content_split_pattern = re.compile('(?<=[.:;])\s',
re.IGNORECASE)
news.summary = '
'.join(content_split_pattern.split(news.content))[:3]

except Exception:
log_exception('Get summary/content',
current_feed_details)
# --------------------------------------------------------
---------------
-------------- #

news.feed = feed
feed.founded_date = current_date

news.title = html.unescape(news.title).encode('utf-8')
news.summary = html.unescape(news.summary or
'').encode('utf-8')
news.link = html.unescape(news.link).encode('utf-8')
news.authors = [re.sub('\s+', ' ',
html.unescape(author)).encode('utf-8')
for author in news.authors or []]
news.tags = [re.sub('\s+', ' ',
html.unescape(tag)).encode('utf-8') for
tag in news.tags or []]

for field in ('title', 'link', 'summary', 'content'):


pattern = re.compile(r'\s+|<[\s\S\w\W\d\D]*?>')
setattr(news, field, pattern.sub(' ', getattr(news,
field) or ''))

# ------------------------------ Save news in database


------------------
------------ #
try:
news.save()
feed.save()

if emit_parse_article_task:
parse_article.apply_async([news.link,

31
custom_filter])
except Exception:
log_exception('Save in parse_rss',
news.__dict__.update(current_feed_details))
#
-----------------------------------------------------------
------------
------------ #

Google Search
def google_search():
pass
keywords = Keyword.objects.filter(results_count__lt=6).order_by('-
search_count')

for keyword in keywords:

try:
# noinspection SpellCheckingInspection
url = 'https://newsapi.org/v2/everything?' +
urllib.parse.urlencode({
'q': keyword.name,
'language': 'en',
'pageSize': 100,
'sortBy': 'publishedAt',
'source': 'google-news',
'apiKey': 'd4e34ba695e3467e9bbbd131c3dd59d8'
})

# noinspection PyProtectedMember
with urlopen(Request(url),
context=ssl._create_unverified_context()) as response:
response = response.read()
except HTTPError as e:
# noinspection PyUnresolvedReferences
log_exception('Google search', {'Response code': e.code})
return

response = json.loads(response.decode('utf-8'))['articles']

for data in response:


if News.objects.filter(link=data['url']).exists():
continue

32
news = News()

news.title = data['title']
news.link = data['url']
news.summary = data['description']
news.pub_date = data['publishedAt']
news.authors = data['author']
news.image = data['urlToImage']

if News.objects.filter(title=data['title']).exists():
news.duplicate = True

# noinspection PyBroadException
try:
news.save()
parse_article.apply_async([news.link])
except Exception:
log_exception('Google news save', news.__dict__)

Transfer news
def transfer_news():
try:
new_id = es_app.session.search(index="global_news", body={
"sort": [{
"id": {
"order": "desc"
}
}],
"size": 1
})['hits']['hits'][0]['_source']['id']
except Exception:
es_app.session.indices.create(index=es_app.index, ignore=400)
print()
new_id = 0

news = News.objects.order_by('id').filter(id__gt=new_id)[:500]
while news:
news_array = []

for new in news:


new_id = new.id

33
log_info('{} - {}'.format(new_id, new.title))

news_array.append({
"_index": es_app.index,
"_type": es_app.doc_type,
"_id": new_id,
"_source": {
'id': new_id,
'title': new.title or None,
'summary': new.summary or None,
'link': new.link or None,
'pub_date': new.pub_date,
'tags': new.tags or None,
'authors': new.authors or None,
'image': new.image or None,
'content': '. '.join(filter(None, (new.content,
new.summary, new.title))) or None,
'add_date': new.add_date,
'response_code': new.response_code or None,
'feed_id': new.feed_id,
'company_name': new.feed.company.company_name if
hasattr(new.feed.company, 'company_name') else
None
}
})

es_app.insert_bulk(news_array)

news = News.objects.order_by('id').filter(id__gt=new_id)[:500]

34

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