Differences

This shows you the differences between two versions of the page.

Link to this comparison view

isrm:laboratoare:new:01a [2022/03/06 11:46]
mbarbulescu [Laborator 01: Scripting, plotting, tracing]
isrm:laboratoare:new:01a [2023/02/28 14:08] (current)
dragos.niculescu [Github classroom]
Line 35: Line 35:
 Odata intrati pe pagina web, putem trece la crearea unui notebook (butonul **New** -> **Python3**) Odata intrati pe pagina web, putem trece la crearea unui notebook (butonul **New** -> **Python3**)
  
-=====  Github classroom ===== 
  
-In cadrul laboratoarelor de ISRM, vom folosi Github classroom pentru a urca rezolvarile exercitiilor,​ pentru a primi feedback pe rezolvari/​interpretari si pentru a primi nota pe laborator.+=====  MS Teams assignments =====
  
-Inainte ​de a porni cu laboratorulurmati pasii mentionati [[https://​ocw.cs.pub.ro/​courses/​smd/​laboratoare/​00#​github_classroom_repository|aici]].+In cadrul laboratoarelor ​de ISRM, vom folosi MS Teams assignments pentru ​urca rezolvarile exercitiilorpentru a primi feedback pe rezolvari/interpretari si pentru a primi nota pe laborator.
  
-Workflow-ul cu git va fi similar cu cel de [[https://​ocw.cs.pub.ro/​courses/​smd/​laboratoare/​00#​versioning|aici]]. +Fisierele de interes care vor trebui urcate ​in MS Teams incepand cu al doilea ​laborator sunt urmatoarele:​
- +
-Fisierele de interes care vor trebui urcate ​intr-un pull request de Git incepand cu al treilea ​laborator sunt urmatoarele:​+
   * scripturi bash sau alte fisiere prin care automatizati rularea   * scripturi bash sau alte fisiere prin care automatizati rularea
   * fisierele de output in care salvati rezultatele obtinute in urma rularii scripturilor   * fisierele de output in care salvati rezultatele obtinute in urma rularii scripturilor
   * graficele (fisiere .png) / notebook-ul Jupyter aferent laboratorului   * graficele (fisiere .png) / notebook-ul Jupyter aferent laboratorului
   * un fisier README in care interpretati/​analizati rezultatele obtinute   * un fisier README in care interpretati/​analizati rezultatele obtinute
 +
  
 ===== Plotarea datelor simple ===== ===== Plotarea datelor simple =====
Line 657: Line 655:
 ====== Task-uri ====== ====== Task-uri ======
  
-===== [01] Grafic throughput ===== 
  
-Scriptul ''​ns3/​examples/​wireless/​wifi-tcp.cc''​ pe care l-am executat in cadrul ​[[http://​ocw.cs.pub.ro/​courses/​isrm/​laboratoare/​new/​01?&#​rulare_exemple_existente|Laboratorului 1]afiseaza la fiecare 100ms throughput-ul TCP. Realizati un grafic care sa arate evolutia throughput-ului TCP in timp.+===== [01] Prelucrare fișiere =====
  
-Tineti cont de faptul ​ca datele afisate in urma rularii ​scriptului ​de ns3 arata in felul urmator:+Folosind fișierul {{:​isrm:​laboratoare:​new:​students.txt|}} dorim afișarea doar a numelui studenților pentru acei studenți care au nota finală 10. Adică a treia coloana are valoarea 10. 
 + 
 +Apoi ne propunem să realizăm un script numit ''​extract-sort-grades''​ pentru a afișa numele studenților,​ grupa și nota finală pentru acei studenți care au nota finală cuprină între 6 și 9 (inclusiv, adică valorile 6, 7, 8, 9). Adică a treia coloana să aibă valoarea cuprinsă între 6 și 9. Apoi vom sorta intrările în ordinea notei și apoi în ordinea grupei (adică dacă au aceeași notă să fie sortați în ordinea grupei). 
 + 
 +Ca bonus, actualizați scriptul ''​extract-name-tab''​ astfel încât să primească argumente în linia de comandă notele: ''​extract-name-tab 6 9''​.  
 + 
 +Folosind ''​awk''​ (sau altă soluție) - extrageți toate notele din fișier și calculați media generală.  
 + 
 +===== [02] Prelucrare fișiere (optional) ===== 
 + 
 + 
 +Ne propunem să afișăm grupele sortate în funcție de câți studenți din acea grupă au obținut nota 10. 
 + 
 +Creați un script numit ''​sort-groups-by-grade''​ care afișează fiecare grupă și numărul de note de 10 obținute de studenții din acea grupă, separate prin virgulă (,, comma), sortate după numărul de note de 10. Sortarea să fie inversă, adică grupele cu cele mai multe note de 10 să fie primele. 
 + 
 +<note tip> 
 +În Bash puteți folosi array-uri asociative, adică array-uri pentru care indexul poate fi un șir, nu neapărat un număr. 
 + 
 +Cautați în pagina de manual a bash șirul Arrays și localizați secțiunea corespunzătoare. 
 +Căutați pe Google după șirul bash arrays. Puteți da click pe link. 
 + 
 +Acest exercițiu poate fi rezolvat și cu un one liner. Dacă folosiți corespunzător filtre de text precum cut, tr, sed, awk, grep, sort, uniq, veți putea obține aceeași soluție, fără să folosiți array-uri asociative. </​note>​ 
 + 
 +Puteți folosi ​ca intrare fie fișierul {{:​isrm:​laboratoare:​new:​students.txt|}} fie fișierul [[https://​raw.githubusercontent.com/​systems-cs-pub-ro/​uso/​master/​lab10/​students.csv|students.csv]] 
 + 
 +În cazul unei implementări corecte, în urma rulării ​scriptului ​veți obține output-ul:
  
 <code bash> <code bash>
-1.1s: 45.8086 Mbit/s +314CC,4 
-1.2s: 55.936 Mbit/s +311CC,3 
-1.3s: 55.936 Mbit/s +315CC,3 
-1.4s: 49.6947 Mbit/s +313CC,2 
-1.5s: 56.1715 Mbit/s +312CC,1
-1.6s: 53.2275 Mbit/s +
-1.7s: 49.3414 Mbit/s +
-1.8s: 56.2893 Mbit/s +
-1.9s: 49.3414 Mbit/s+
 </​code>​ </​code>​
  
-Primul pas este stabilirea formatului in care trebuie sa arate fisierul CSV/text in care veti salva datele care vor urma sa fie trasate in graficIn cazul nostru, o sa avem nevoie ​de 2 coloanemomentul de timp si throughput (date afisate in urma rularii scriptului de ns3).+Grupa 314CC este prima grupă afișată întrucât are cel mai mare număr de studenți ​care au obținut nota 10: 4 studențiGrupa 312CC este ultima grupă afișată întrucât are cel mai mic număr ​de studenți care au obținut nota 101 student.
  
-<note tip>​Pentru usurinta, salvati intr-un fisier output-ul obtinut in urma rularii scriptului de ns3.</​note>​ 
  
-Odata stabilit formatul datelor din fisierul CSV/texttrebuie sa parsam output-ul obtinut in urma rularii scriptuluiNe intereseaza doar valorile numerice ceea ce inseamna ca va trebui sa scapam de sirurile de caractere ''​s:''​ si ''​Mbit/​s''​ folosind utilitarele oferite de Bash precum ''​awk''​''​cut''​ sau ''​tr''​.+===== [03] Basic plot ===== 
 + 
 +Având datele de mai jos: 
 + 
 +<code bash> 
 +Date,Open,​High,​Low,​Close 
 +10-03-16,774.25,776.065002,​769.5,​772.559998 
 +10-04-16,​776.030029,​778.710022,​772.890015,​776.429993 
 +10-05-16,​779.309998,​782.070007,​775.650024,​776.469971 
 +10-06-16,​779,​780.47998,​775.539978,​776.859985 
 +10-07-16,​779.659973,​779.659973,​770.75,​775.080017 
 +</​code>​ 
 + 
 +Se cere graficul de mai jos:
  
-Graficul ar trebui sa arate astfel:+{{:isrm:​laboratoare:​new:​matplotlib-basic-exercise-4.png?​direct&​100|}}
  
-{{:​isrm:​laboratoare:​new:​tcp_tput_evolution.png}} 
  
-===== [02] Basic shell scripting =====+===== [04] Basic shell scripting ​(optional) ​=====
  
 Fișierul ''/​proc/​net/​dev''​ conține toate interfețele de rețea care sunt în sistem. Iată exemplu de cum arată: Fișierul ''/​proc/​net/​dev''​ conține toate interfețele de rețea care sunt în sistem. Iată exemplu de cum arată:
isrm/laboratoare/new/01a.1646560000.txt.gz · Last modified: 2022/03/06 11:46 by mbarbulescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0