This shows you the differences between two versions of the page.
so:teme:tema-5 [2021/05/20 12:00] ionut.mihalache1506 [Suport, întrebări și clarificări] |
so:teme:tema-5 [2023/01/15 23:45] (current) ionut.mihalache1506 |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Tema 5 Server web asincron ====== | + | ====== Server web asincron ====== |
<note important> | <note important> | ||
- | * Dată publicare: **04.05.2021** | + | * <html><b>Deadline hard</b></html>: **17.01.2023, ora 23:59** |
- | * <html><b><span style="color:red;">Deadline hard</span></b></html>: **17.05.2021, ora 23:55** | + | |
</note> | </note> | ||
===== Obiectivele temei ===== | ===== Obiectivele temei ===== | ||
Line 10: | Line 9: | ||
*Aprofundarea noțiunilor legate de lucrul cu sockeți. | *Aprofundarea noțiunilor legate de lucrul cu sockeți. | ||
*Deprinderi de implementare și proiectare a aplicațiilor care folosesc operații asincrone și alte operații I/O avansate. | *Deprinderi de implementare și proiectare a aplicațiilor care folosesc operații asincrone și alte operații I/O avansate. | ||
- | *Aprofundarea utilizării API-ului pentru operații I/O avansate la nivelul sistemelor de operare Linux și Windows. | + | *Aprofundarea utilizării API-ului pentru operații I/O avansate la nivelul sistemelui de operare Linux. |
===== Enunț ===== | ===== Enunț ===== | ||
Line 20: | Line 19: | ||
*multiplexarea operațiilor I/O. | *multiplexarea operațiilor I/O. | ||
- | Pentru implementare se va folosi API-ul de operații I/O avansate specific sistemelor de operare Linux și Windows: | + | Pentru implementare se va folosi API-ul de operații I/O avansate specific sistemelui de operare Linux: |
- | *[[http://www.kernel.org/doc/man-pages/online/pages/man2/sendfile.2.html | sendfile]]/[[http://msdn.microsoft.com/en-us/library/ms740565(VS.85).aspx | TransmitFile]] | + | *[[http://www.kernel.org/doc/man-pages/online/pages/man2/sendfile.2.html | sendfile]] |
- | *[[http://www.kernel.org/doc/man-pages/online/pages/man2/io_setup.2.html | io_setup & friends]]/[[http://msdn.microsoft.com/en-us/library/aa365683(v=VS.85).aspx | Overlapped I/O]] | + | *[[http://www.kernel.org/doc/man-pages/online/pages/man2/io_setup.2.html | io_setup & friends]] |
- | *[[http://man7.org/linux/man-pages/man7/epoll.7.html | epoll]]/[[http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx | Completion Ports]]. | + | *[[http://man7.org/linux/man-pages/man7/epoll.7.html | epoll]] |
- | Serverul web va utiliza API-ul modern de multiplexare pentru a aștepta conexiuni din partea clienților: [[http://man7.org/linux/man-pages/man7/epoll.7.html | epoll]] (Linux) și [[http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx | Completion Ports]] pe Windows. Pe conexiunile realizate se vor recepționa cereri din partea clienților și apoi se vor distribui răspunsurile către aceștia. | + | Serverul web va utiliza API-ul modern de multiplexare pentru a aștepta conexiuni din partea clienților: [[http://man7.org/linux/man-pages/man7/epoll.7.html | epoll]] (Linux). Pe conexiunile realizate se vor recepționa cereri din partea clienților și apoi se vor distribui răspunsurile către aceștia. |
Clienții și serverul vor comunica folosind protocolul HTTP. Pentru parsarea cererilor HTTP din partea clienților recomandăm folosirea [[http://github.com/joyent/http-parser | acestui parser HTTP]], disponibil și în cadrul [[http://elf.cs.pub.ro/so/res/teme/tema5-util/ | directorului de resurse ale temei]]. Va trebui să folosiți un callback pentru obținerea căii către resursa locală solicitată de client. Tot în directorul de resurse, găsiți un exemplu simplificat de folosire a parser-ului. | Clienții și serverul vor comunica folosind protocolul HTTP. Pentru parsarea cererilor HTTP din partea clienților recomandăm folosirea [[http://github.com/joyent/http-parser | acestui parser HTTP]], disponibil și în cadrul [[http://elf.cs.pub.ro/so/res/teme/tema5-util/ | directorului de resurse ale temei]]. Va trebui să folosiți un callback pentru obținerea căii către resursa locală solicitată de client. Tot în directorul de resurse, găsiți un exemplu simplificat de folosire a parser-ului. | ||
Line 31: | Line 30: | ||
Serverul implementează o **funcționalitate limitată** a protocolului HTTP, aceea de a **transmite fișiere clienților**. Serverul va furniza fișiere din directorul ''AWS_DOCUMENT_ROOT'', definit în cadrul antetului temei. Fișiere se găsesc doar în subdirectoarele ''AWS_DOCUMENT_ROOT/static/'', respectiv ''AWS_DOCUMENT_ROOT/dynamic/'', iar //request path//-uri corespunzătoare vor fi, de exemplu, ''AWS_DOCUMENT_ROOT/static/test.dat'', respectiv ''AWS_DOCUMENT_ROOT/dynamic/test.dat''. Prelucrarea fișierelor va fi următoarea: | Serverul implementează o **funcționalitate limitată** a protocolului HTTP, aceea de a **transmite fișiere clienților**. Serverul va furniza fișiere din directorul ''AWS_DOCUMENT_ROOT'', definit în cadrul antetului temei. Fișiere se găsesc doar în subdirectoarele ''AWS_DOCUMENT_ROOT/static/'', respectiv ''AWS_DOCUMENT_ROOT/dynamic/'', iar //request path//-uri corespunzătoare vor fi, de exemplu, ''AWS_DOCUMENT_ROOT/static/test.dat'', respectiv ''AWS_DOCUMENT_ROOT/dynamic/test.dat''. Prelucrarea fișierelor va fi următoarea: | ||
*Fișierele din directorul ''AWS_DOCUMENT_ROOT/static/'' sunt fișiere statice care vor fi transmise clienților folosind API de zero-copying ([[http://www.kernel.org/doc/man-pages/online/pages/man2/sendfile.2.html | sendfile]]/[[http://msdn.microsoft.com/en-us/library/ms740565(VS.85).aspx | TransmitFile]]). | *Fișierele din directorul ''AWS_DOCUMENT_ROOT/static/'' sunt fișiere statice care vor fi transmise clienților folosind API de zero-copying ([[http://www.kernel.org/doc/man-pages/online/pages/man2/sendfile.2.html | sendfile]]/[[http://msdn.microsoft.com/en-us/library/ms740565(VS.85).aspx | TransmitFile]]). | ||
- | *Fișierele din directorul ''AWS_DOCUMENT_ROOT/dynamic/'' sunt fișiere pentru care se presupune că este necesară o fază de post-procesare din partea serverului. Aceste fișiere vor fi citite de pe disc folosind API asincron și apoi vor fi transmise către clienți. Transmiterea va folosi sockeți non-blocanți (Linux) și Overlapped I/O pe sockeți (Windows). | + | *Fișierele din directorul ''AWS_DOCUMENT_ROOT/dynamic/'' sunt fișiere pentru care se presupune că este necesară o fază de post-procesare din partea serverului. Aceste fișiere vor fi citite de pe disc folosind API asincron și apoi vor fi transmise către clienți. Transmiterea va folosi sockeți non-blocanți (Linux). |
*Pentru //request path//-uri nevalide se va transmite un mesaj [[http://en.wikipedia.org/wiki/HTTP_404 | HTTP 404]]. | *Pentru //request path//-uri nevalide se va transmite un mesaj [[http://en.wikipedia.org/wiki/HTTP_404 | HTTP 404]]. | ||
După transmiterea unui fișier, conform protocolului HTTP, conexiunea este închisă. | După transmiterea unui fișier, conform protocolului HTTP, conexiunea este închisă. | ||
Line 73: | Line 72: | ||
*Exemple de utilizare găsiți în [[#testare | teste]]. | *Exemple de utilizare găsiți în [[#testare | teste]]. | ||
- | + | ===== Precizări ===== | |
- | ===== Precizări pentru Windows ===== | + | |
- | + | ||
- | *Operațiile pe sockeți și fișiere ([[http://msdn.microsoft.com/en-us/library/aa365467(v=vs.85).aspx | ReadFile]], [[http://msdn.microsoft.com/en-us/library/ms742203(v=vs.85).aspx | WSASend]], [[http://msdn.microsoft.com/en-us/library/ms742203(v=vs.85).aspx | TransmitFile]]) vor fi operații asincrone realizate folosind [[http://msdn.microsoft.com/en-us/library/aa365683(v=VS.85).aspx | Overlapped I/O]]. | + | |
- | *Așteptarea încheierii operațiilor asincrone (atât pe fișiere cât și pe sockeți) se va realiza unificat, folosind [[http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx | I/O Completion Ports]]. | + | |
- | *Pentru implementare, recomandăm să porniți de la [[http://elf.cs.pub.ro/so/res/teme/tema5-util/win/samples/iocp_echo_server.c | exemplul de echo server]] pus la dispoziție. | + | |
- | *API-ul I/O Completion Ports este apelat prin intermediul wrapper-elor din cadrul header-ului [[http://elf.cs.pub.ro/so/res/teme/tema5-util/win/w_iocp.h | w_iocp.h]]. | + | |
- | *Sockeți creați folosind apelul [[http://msdn.microsoft.com/en-us/library/ms740506(v=vs.85).aspx | socket]] sunt sockeți ce pot fi folosiți pentru [[http://msdn.microsoft.com/en-us/library/aa365683(v=vs.85).aspx | operații asincrone]]. | + | |
- | *Pentru operații asincrone de comunicare pe sockeți folosiți funcțiile [[http://msdn.microsoft.com/en-us/library/ms742203(v=vs.85).aspx | WSASend]]. respectiv [[http://msdn.microsoft.com/en-us/library/ms741688(v=vs.85).aspx | WSARecv]]. | + | |
- | *Structura [[http://msdn.microsoft.com/en-us/library/ms741665(v=vs.85).aspx | WSAOVERLAPPED]] conține informațiile necesare pentru operațiile asincrone pe sockeți. Este echivalentă structurii [[http://msdn.microsoft.com/en-us/library/ms684342(v=vs.85).aspx | OVERLAPPED]]. | + | |
- | *Pentru adăugarea socket-ului listener în I/O Completion Port, va trebui să folosiți apelul [[http://msdn.microsoft.com/en-us/library/ms737524(v=vs.85).aspx | AcceptEx]], așa cum se observă și în [[http://elf.cs.pub.ro/so/res/teme/tema5-util/win/samples/iocp_echo_server.c | exemplul de echo server]]. | + | |
- | *[[http://msdn.microsoft.com/en-us/library/ms737524(v=vs.85).aspx | AcceptEx]] permite notificarea unei acțiuni în momentul în care aceasta are loc, împreună cu binding-ul socket-ului. | + | |
- | *Pentru operații asincrone cu sistemul de fișiere, folosiți funcțiile [[http://msdn.microsoft.com/en-us/library/aa365467(VS.85).aspx | ReadFile]] și [[http://msdn.microsoft.com/en-us/library/aa365747(v=VS.85).aspx | WriteFile]] cu argumentele de Overlapped I/O activate. | + | |
- | *Pentru obținerea de informații despre o operație asincronă încheiată (prin intermediul structurii [[http://msdn.microsoft.com/en-us/library/ms684342(v=vs.85).aspx | OVERLAPPED]]), folosiți [[http://msdn.microsoft.com/en-us/library/ms683209(v=vs.85).aspx | GetOverlappedResult]] (fișiere), respectiv [[http://msdn.microsoft.com/en-us/library/ms741582(v=vs.85).aspx | WSAGetOverlappedResult]] (sockeți). | + | |
- | *Transmiterea de fișiere statice se realizează folosind [[http://msdn.microsoft.com/en-us/library/ms740565(v=vs.85).aspx | TransmitFile]]. | + | |
- | *Tema se va rezolva folosind doar funcții Win32. Se pot folosi de asemenea și funcțiile de formatare ''printf'', ''scanf'', funcțiile de alocare de memorie ''malloc'', ''free'' și funcțiile de manipulare a șirurilor de caractere (''strcat'', ''strcmp'' etc.). | + | |
- | *Pentru partea de I/O și procese se vor folosi doar funcții Win32. De exemplu, funcțiile ''open'', ''read'', ''write'', ''close'' nu trebuie folosite; în locul acestora folosiți ''CreateFile'', ''ReadFile'', ''WriteFile'', ''CloseHandle''. | + | |
- | ===== Precizări pentru Linux ===== | + | |
*Atât citirea cât și scrierea peste sockeți se realizează doar la notificarea dată de API-ul specific sistemului de operare, folosind [[http://man7.org/linux/man-pages/man7/epoll.7.html | epoll]]. | *Atât citirea cât și scrierea peste sockeți se realizează doar la notificarea dată de API-ul specific sistemului de operare, folosind [[http://man7.org/linux/man-pages/man7/epoll.7.html | epoll]]. | ||
Line 111: | Line 93: | ||
*Corectarea temelor se va realiza automat cu ajutorul unor suite de teste publice: | *Corectarea temelor se va realiza automat cu ajutorul unor suite de teste publice: | ||
- | *teste Linux -- [[http://elf.cs.pub.ro/so/res/teme/tema5-checker-lin.zip | tema5-checker-lin.zip]] | + | *teste -- [[http://elf.cs.pub.ro/so/res/teme/tema5-checker-lin.zip | tema5-checker-lin.zip]] |
- | *teste Windows -- [[http://elf.cs.pub.ro/so/res/teme/tema5-checker-win.zip | tema5-checker-win]] | + | |
*Indicații despre utilizarea suitei de teste se găsesc în fișierul ''README'' din cadrul arhivei. | *Indicații despre utilizarea suitei de teste se găsesc în fișierul ''README'' din cadrul arhivei. | ||
- | *Pentru testare, pe Windows, se folosește o versiune a utilitarului ''netcat''; puteți descărca arhiva completă (inclusiv executabilul necesar) [[http://joncraton.org/media/files/nc111nt.zip | de aici]] (parola este ''nc''). | ||
*Pentru evaluare și corectare tema va fi uploadată folosind [[https://elf.cs.pub.ro/vmchecker/ui | interfața vmchecker]]. | *Pentru evaluare și corectare tema va fi uploadată folosind [[https://elf.cs.pub.ro/vmchecker/ui | interfața vmchecker]]. | ||
- | *În urma compilării temei trebuie să rezulte un executabil denumit ''aws'' (Linux), respectiv ''aws.exe'' (Windows). | + | *În urma compilării temei trebuie să rezulte un executabil denumit ''aws'' (Linux). |
- | *Pe Windows, va trebui ca, în urma compilării, să rezulte și fișierul obiect ''aws.obj'' (pentru verificările de simboluri folosind ''nm''). | + | |
*Suita de teste conține un set de teste. Trecerea unui test conduce la obținerea punctajului aferent acestuia. | *Suita de teste conține un set de teste. Trecerea unui test conduce la obținerea punctajului aferent acestuia. | ||
*În urma rulării testelor, se va acorda, în mod automat, un punctaj total. Punctajul total maxim este de 90 de puncte, pentru o temă care trece toate testele. La acest punctaj se adaugă 10 puncte care reprezintă aprecierea temei de către asistentul care o corectează. | *În urma rulării testelor, se va acorda, în mod automat, un punctaj total. Punctajul total maxim este de 90 de puncte, pentru o temă care trece toate testele. La acest punctaj se adaugă 10 puncte care reprezintă aprecierea temei de către asistentul care o corectează. | ||
Line 123: | Line 102: | ||
*Pot exista penalizări în caz de întârzieri sau pentru neajunsuri de implementare sau de stil. | *Pot exista penalizări în caz de întârzieri sau pentru neajunsuri de implementare sau de stil. | ||
*Pe lângă penalizările precizate în cadrul [[http://ocw.cs.pub.ro/courses/so/teme/general#lista_depunctari | listei de depunctări]], se vor avea în vedere următoarele elemente: | *Pe lângă penalizările precizate în cadrul [[http://ocw.cs.pub.ro/courses/so/teme/general#lista_depunctari | listei de depunctări]], se vor avea în vedere următoarele elemente: | ||
- | * <color red> **-2p** Linux și Windows -- fișierele statice nu sunt transmise prin mecanismul de zero-copy </color> | + | * <color red> **-2p** Linux -- fișierele statice nu sunt transmise prin mecanismul de zero-copy </color> |
- | * <color red> **-0.5p** Linux și Windows -- alocare statică a unui vector de conexiuni </color> | + | * <color red> **-0.5p** Linux -- alocare statică a unui vector de conexiuni </color> |
* <color red> **-4p** Linux -- nu se folosesc doar ''send'' și ''recv'' pentru operațiile cu sockeți </color> | * <color red> **-4p** Linux -- nu se folosesc doar ''send'' și ''recv'' pentru operațiile cu sockeți </color> | ||
* <color red> **-2p** Linux -- folosirea de operații blocante pe sockeți în locul operațiilor non-blocante </color> | * <color red> **-2p** Linux -- folosirea de operații blocante pe sockeți în locul operațiilor non-blocante </color> | ||
* <color red> **-1p** Linux -- recv/send/sendfile sunt apelate într-o buclă și nu pe baza evenimentelor semnalizate de epoll </color> | * <color red> **-1p** Linux -- recv/send/sendfile sunt apelate într-o buclă și nu pe baza evenimentelor semnalizate de epoll </color> | ||
* <color red> **-2p** Linux -- operațiile I/O asincrone pe fișiere nu sunt așteptate "integrat" folosind ''eventfd'' și ''epoll'' </color> | * <color red> **-2p** Linux -- operațiile I/O asincrone pe fișiere nu sunt așteptate "integrat" folosind ''eventfd'' și ''epoll'' </color> | ||
- | * <color red> **-2p** Windows -- așteptarea încheierii operațiilor asincrone (atât pe fișiere cât și pe sockeți) nu este realizată unificat, folosind I/O Completion Ports </color> | + | * <color red> **-1p** Linux -- alte implementări nevalide la nivelul sistemului asincron de comunicație </color> |
- | * <color red> **-1p** Linux și Windows -- alte implementări nevalide la nivelul sistemului asincron de comunicație </color> | + | * <color red> O temă care **nu** folosește operații I/O asincrone pe fișiere: ''io_*'' (din ''libaio'') pe Linux va pierde punctajul pentru testele cu fișiere dinamice (testele 26-35) </color> |
- | * <color red> O temă care **nu** folosește operații I/O asincrone pe fișiere: ''io_*'' (din ''libaio'') pe Linux, respectiv Overlapped I/O pe Windows va pierde punctajul pentru testele cu fișiere dinamice (testele 26-35) </color> | + | |
***Testul 0** din cadrul checker-ului temei verifică automat coding style-ul surselor voastre. Ca referință este folosit [[https://www.kernel.org/doc/Documentation/CodingStyle | stilul de coding din kernelul Linux]]. Acest test nu oferă sau scade puncte, dar poate fi folosit orientativ de către echipa de corectare pentru a penaliza problemele grave de coding style. Important este să vă definiți un stil și să-l folosiți consecvent. Pentru mai multe informații despre un cod de calitate citiți [[http://ocw.cs.pub.ro/courses/so/laboratoare/resurse/c_tips | pagina de recomandări]]. | ***Testul 0** din cadrul checker-ului temei verifică automat coding style-ul surselor voastre. Ca referință este folosit [[https://www.kernel.org/doc/Documentation/CodingStyle | stilul de coding din kernelul Linux]]. Acest test nu oferă sau scade puncte, dar poate fi folosit orientativ de către echipa de corectare pentru a penaliza problemele grave de coding style. Important este să vă definiți un stil și să-l folosiți consecvent. Pentru mai multe informații despre un cod de calitate citiți [[http://ocw.cs.pub.ro/courses/so/laboratoare/resurse/c_tips | pagina de recomandări]]. | ||
===== Resurse de suport ===== | ===== Resurse de suport ===== | ||
*Cursuri | *Cursuri | ||
- | *[[http://ocw.cs.pub.ro/courses/so/cursuri/curs-10 | Curs 10 - Dispozitive de intrare/ieșire]] | + | *[[http://ocw.cs.pub.ro/courses/so/cursuri/curs-10 | Curs 10 - Dispozitive de intrare/ieșire (Old but gold)]] |
- | *[[http://ocw.cs.pub.ro/courses/so/cursuri/curs-11 | Curs 11 - Networking în sistemul de operare]] | + | *[[http://ocw.cs.pub.ro/courses/so/cursuri/curs-11 | Curs 11 - Networking în sistemul de operare (Old but gold)]] |
*Laboratoare | *Laboratoare | ||
- | *[[http://ocw.cs.pub.ro/courses/so/laboratoare/laborator-10 | Laborator 10 - Operații I/O avansate -- Windows]] | + | *[[http://ocw.cs.pub.ro/courses/so/laboratoare/laborator-11 | Laborator 11 - Operații I/O avansate -- Linux (Old but gold)]] |
- | *[[http://ocw.cs.pub.ro/courses/so/laboratoare/laborator-11 | Laborator 11 - Operații I/O avansate -- Linux]] | + | |
*[[http://github.com/joyent/http-parser | Parser-ul HTTP]] recomandat pentru parsarea cererilor. | *[[http://github.com/joyent/http-parser | Parser-ul HTTP]] recomandat pentru parsarea cererilor. | ||
*[[http://www.jmarshall.com/easy/http/ | Tutorial HTTP]] | *[[http://www.jmarshall.com/easy/http/ | Tutorial HTTP]] | ||
- | *[[http://elf.cs.pub.ro/so/res/teme/tema5-util.zip | Resurse tema 5]] | + | *[[https://github.com/systems-cs-pub-ro/so/tree/2022-2023/teme/assignments/3-aws | Resurse tema 3]] |
*Sample-uri pentru lucru cu sockeți | *Sample-uri pentru lucru cu sockeți | ||
*[[http://elf.cs.pub.ro/so/res/teme/tema5-util/lin/samples/ | Sample-uri Linux]] | *[[http://elf.cs.pub.ro/so/res/teme/tema5-util/lin/samples/ | Sample-uri Linux]] | ||
- | *[[http://elf.cs.pub.ro/so/res/teme/tema5-util/win/samples/ | Sample-uri Windows]] | ||
*Teste | *Teste | ||
- | *[[http://elf.cs.pub.ro/so/res/teme/tema5-checker-lin.zip | Teste Linux]] | + | *[[https://github.com/systems-cs-pub-ro/so/tree/2022-2023/teme/assignments/3-aws/checker-lin | Teste Linux]] |
- | *[[http://elf.cs.pub.ro/so/res/teme/tema5-checker-win.zip | Teste Windows]] | + | |
*[[https://elf.cs.pub.ro/vmchecker/ui | Interfața de upload vmchecker]] | *[[https://elf.cs.pub.ro/vmchecker/ui | Interfața de upload vmchecker]] | ||
- | *[[http://news.gmane.org/gmane.education.region.romania.operating-systems | Lista de discuții a cursului]] | ||
<note important> | <note important> | ||
- | Resursele temei se găsesc în repo-ul [[https://github.com/systems-cs-pub-ro/so/tree/master/assignments/5-aws|temei]] de pe GitHub. Repo-ul conține și un script Bash care vă ajută să vă creați un repository privat pe instanța de [[https://gitlab.cs.pub.ro|GitLab]] a facultății. Urmăriți indicațiile din README și de pe [[:so:teme:folosire-gitlab| pagina de Wiki dedicată pentru git]]. | + | Resursele temei se găsesc în repo-ul [[https://github.com/systems-cs-pub-ro/so/tree/2022-2023/teme/assignments/3-aws|temei]] de pe GitHub. |
- | + | ||
- | În plus, responsabilii de teme se pot uita mai rapid pe [[https://gitlab.cs.pub.ro|GitLab]] la temele voastre în cazul în care aveți probleme/bug-uri. Este mai ușor să primiți suport în rezolvarea problemelor implementării voastre dacă le oferiți responsabililor de teme acces la codul sursă pe [[https://gitlab.cs.pub.ro|GitLab]]. | + | |
- | + | ||
- | **Dacă ați folosit [[https://gitlab.cs.pub.ro|GitLab]] pentru realizarea temei, indicați în README link-ul către repository. Asigurați-vă că responsabilii de teme au drepturi de citire asupra repo-ului vostru**. | + | |
</note> | </note> | ||
===== FAQ ===== | ===== FAQ ===== | ||
Line 167: | Line 137: | ||
===== Suport, întrebări și clarificări ===== | ===== Suport, întrebări și clarificări ===== | ||
- | Pentru întrebări sau nelămuriri legate de temă folosiți [[https://curs.upb.ro/mod/forum/view.php?id=259918|forumul temei]]. Recomandăm să căutați eventuale întrebări și în arhiva [[:so:info:lista-discutii|listei de discuții]], poate veți găsi ceea ce căutați până veți primi un răspuns din partea noastră. | + | Pentru întrebări sau nelămuriri legate de temă folosiți [[https://curs.upb.ro/2022/mod/forum/view.php?id=76309|forumul temei]]. |
<note important> | <note important> | ||
- | Orice intrebare pe forum **trebuie** să conțină o descriere cât mai clară a eventualei probleme. Întrebări de forma: "Nu merge X. De ce?" fără o descriere mai amănunțită vor primi un răspuns mai greu. | + | Orice intrebare pe forum **trebuie** să conțină o descriere cât mai clară a eventualei probleme. Întrebări de forma: "Nu merge X. De ce?" fără o descriere mai amănunțită vor primi un răspuns mai greu. Înainte să postați o întrebare pe forum citiți și celelalte întrebări(dacă există) pentru a vedea dacă întrebarea voastră a fost deja adresată sub o altă formă(în cazul în care răspunsul din partea echipei vine mai greu este mai rapid să căutați voi deja printre întrebările existente). |
**ATENȚIE** să nu postați imagini cu părți din soluția voastră pe forumul pus la dispoziție sau orice alt canal public de comunicație. Dacă veți face acest lucru, vă asumați răspunderea dacă veți primi copiat pe temă. | **ATENȚIE** să nu postați imagini cu părți din soluția voastră pe forumul pus la dispoziție sau orice alt canal public de comunicație. Dacă veți face acest lucru, vă asumați răspunderea dacă veți primi copiat pe temă. | ||
</note> | </note> | ||
- | |||
- | ~~NOCACHE~~ | ||