User Tools

Site Tools


sk2:projekt

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
sk2:projekt [2025/11/07 12:39] – [Terminy] jkonczaksk2:projekt [2026/10/29 23:32] (current) – jkonczak
Line 1: Line 1:
-====== SK2 – projekt zaliczeniowy z programowania (2025/2026) ======+====== SK2 – projekt zaliczeniowy z programowania (2026/2027) ======
 Do zaliczenia pierwszej części laboratoriów (programowanie) należy zrealizować projekt __ustalony z prowadzącym__. Do zaliczenia pierwszej części laboratoriów (programowanie) należy zrealizować projekt __ustalony z prowadzącym__.
  
Line 5: Line 5:
  
 __Przykładowe__ tematy projektów: __Przykładowe__ tematy projektów:
-<html><div style="margin: -1.2em 0 0 0"/></html> 
   - Wieloosobowa gra czasu rzeczywistego – dowolna gra w którą da się grać w więcej niż dwie osoby. Przykłady gier na których można się wzorować: [[https://archive.org/details/msdos_Jump_n_Bump_1998|jump 'n bump]], [[https://classicreload.com/bomberman.html|dyna blaster]], [[https://archive.org/details/CometBusters14Image|asteroids]].   - Wieloosobowa gra czasu rzeczywistego – dowolna gra w którą da się grać w więcej niż dwie osoby. Przykłady gier na których można się wzorować: [[https://archive.org/details/msdos_Jump_n_Bump_1998|jump 'n bump]], [[https://classicreload.com/bomberman.html|dyna blaster]], [[https://archive.org/details/CometBusters14Image|asteroids]].
   - "Zręcznościowa" gra karciana / planszowa w której wiele osób naraz może wykonać ruch – np. dobble, jungle speed.   - "Zręcznościowa" gra karciana / planszowa w której wiele osób naraz może wykonać ruch – np. dobble, jungle speed.
Line 15: Line 14:
   - Grupowy edytor grafiki wektorowej – serwer i klient programu, który pozwoli kilku osobom naraz pracować nad grafiką wektorową. Współbieżne operacje na tym samym obiekcie (np. zmiana rozmiaru i zmiana koloru) mają być sensownie obsłużone.   - Grupowy edytor grafiki wektorowej – serwer i klient programu, który pozwoli kilku osobom naraz pracować nad grafiką wektorową. Współbieżne operacje na tym samym obiekcie (np. zmiana rozmiaru i zmiana koloru) mają być sensownie obsłużone.
   - Radio internetowe – serwer ma kolejkę plików dźwiękowych, które kolejno strumieniuje do wszystkich podłączonych klientów. Klienci mogą wgrywać na serwer nowe pliki, widzą bieżący stan kolejki i mogą wykonywać dowolne operacje na niej, mogą też zlecić przeskoczenie do następnego pliku z kolejki.   - Radio internetowe – serwer ma kolejkę plików dźwiękowych, które kolejno strumieniuje do wszystkich podłączonych klientów. Klienci mogą wgrywać na serwer nowe pliki, widzą bieżący stan kolejki i mogą wykonywać dowolne operacje na niej, mogą też zlecić przeskoczenie do następnego pliku z kolejki.
-  - Ciągła synchronizacja katalogów – program który dba o to, by zawartość katalogu (rekurencyjnie) u wszystkich klientów była taka sama. Zmiany są wykrywane natychmiastowo. Współbieżne zmiany są wykrywane i właściwie obsłużone. W tym projekcie można nie robić GUI.+  - Ciągła synchronizacja katalogów – program który dba o to, by zawartość katalogu (rekurencyjnie) u wszystkich klientów była taka sama. Zmiany są wykrywane natychmiastowo (np. przez [[https://pl.wikipedia.org/wiki/Inotify|inotify]]. Współbieżne zmiany są wykrywane i właściwie obsłużone. W tym projekcie można nie robić GUI.
   - Job scheduler – prosty system kolejkowy: w serwerze rejestrują się węzły obliczeniowe, do serwera klienci wysyłają zadania do wykonania na węzłach (por. [[https://en.wikipedia.org/wiki/Job_scheduler|job scheduler]], [[https://en.wikipedia.org/wiki/Slurm_Workload_Manager|slurm]]). Tutaj trzeba napisać serwer, klienta będącego węzłem i klienta będącego zlecającym zadanie. W tym projekcie można nie robić GUI.   - Job scheduler – prosty system kolejkowy: w serwerze rejestrują się węzły obliczeniowe, do serwera klienci wysyłają zadania do wykonania na węzłach (por. [[https://en.wikipedia.org/wiki/Job_scheduler|job scheduler]], [[https://en.wikipedia.org/wiki/Slurm_Workload_Manager|slurm]]). Tutaj trzeba napisać serwer, klienta będącego węzłem i klienta będącego zlecającym zadanie. W tym projekcie można nie robić GUI.
   - Reliable UDP multicast – biblioteka / protokół do realizacji niezawodnego przesyłania danych z użyciem UDP multicastu i użycie jej do budowy przykładowego programu (np. wysyłanie pliku). W tym projekcie można nie robić GUI.   - Reliable UDP multicast – biblioteka / protokół do realizacji niezawodnego przesyłania danych z użyciem UDP multicastu i użycie jej do budowy przykładowego programu (np. wysyłanie pliku). W tym projekcie można nie robić GUI.
   - Publish–subscribe message queue. Tutaj trzeba napisać trzy składniki – message broker (serwer), [[https://pl.wikipedia.org/w/index.php?title=Biblioteka_programistyczna|współdzieloną bibliotekę]] klienta i demonstracyjny program używający tej biblioteki. Klient może tworzyć kolejki, wysyłać do nich wiadomości i zapisywać się do odbioru wiadomości z kolejki. Kolejki wspierają wielu konsumentów, wiadomości mają określony czas ważności (por. [[https://en.wikipedia.org/wiki/Message_queue|message queue]]). W tym projekcie można nie robić GUI.   - Publish–subscribe message queue. Tutaj trzeba napisać trzy składniki – message broker (serwer), [[https://pl.wikipedia.org/w/index.php?title=Biblioteka_programistyczna|współdzieloną bibliotekę]] klienta i demonstracyjny program używający tej biblioteki. Klient może tworzyć kolejki, wysyłać do nich wiadomości i zapisywać się do odbioru wiadomości z kolejki. Kolejki wspierają wielu konsumentów, wiadomości mają określony czas ważności (por. [[https://en.wikipedia.org/wiki/Message_queue|message queue]]). W tym projekcie można nie robić GUI.
-  - HTTP(S) caching proxy – proxy serwujące najczęściej pobierane strony z własnej pamięci (przykład programu – [[http://www.squid-cache.org/|squid]]). Proxy ma redukować ruch (obsługa etag, if-modified-since, współbieżne żądania o tą samą stronę generują jedno zapytanie). W tym projekcie należy napisać tylko serwer i można nie robić GUI. 
   - Inny projekt, uzgodniony z prowadzącym.   - Inny projekt, uzgodniony z prowadzącym.
  
Line 29: Line 27:
   * http://www.cs.put.poznan.pl/agodzinski/project_2022.html   * http://www.cs.put.poznan.pl/agodzinski/project_2022.html
   * [[https://web.archive.org/web/20190914225318/http://www.cs.put.poznan.pl/ddwornikowski/courses/projekty_sieci2_2015.html|http://www.cs.put.poznan.pl/ddwornikowski/courses/projekty_sieci2_2015.html]]   * [[https://web.archive.org/web/20190914225318/http://www.cs.put.poznan.pl/ddwornikowski/courses/projekty_sieci2_2015.html|http://www.cs.put.poznan.pl/ddwornikowski/courses/projekty_sieci2_2015.html]]
-  * http://www.cs.put.poznan.pl/ksiek/sk2/zadania.html+  * [[https://web.archive.org/web/20260829234626/https://www.cs.put.poznan.pl/ksiek/sk2/zadania.html|https://www.cs.put.poznan.pl/ksiek/sk2/zadania.html]]
   * http://www.cs.put.poznan.pl/jkonczak/misc/lukasz_tematy_projektow.pdf [projekty Łukasza Piątkowskiego, cached]   * http://www.cs.put.poznan.pl/jkonczak/misc/lukasz_tematy_projektow.pdf [projekty Łukasza Piątkowskiego, cached]
 </small>   </small>  
Line 47: Line 45:
   * Projekty są pisane w 2 osoby, chyba że uzgodniono inaczej z prowadzącym.   * Projekty są pisane w 2 osoby, chyba że uzgodniono inaczej z prowadzącym.
   * **Uzgodnieniu projektu = mail do mnie z opisem projektu + moja odpowiedź OK.**   * **Uzgodnieniu projektu = mail do mnie z opisem projektu + moja odpowiedź OK.**
-  * Opis projektu najlepiej zrobić w postaci krótkiego przypadku użycia (use case [[https://pl.wikipedia.org/wiki/Przypadek_użycia|[1]]]) z zaznaczoną rolą serwera i klienta. \\ Opis projektu można też wykonać w sposób podobny jak na stronie z propozycjami projektów Konrada Sieka [[http://www.cs.put.poznan.pl/ksiek/sk2/zadania.html|[2]]]. \\ **[[projekt_przykladowy_opis|Przykład opisu projektu]].**+  * Opis projektu najlepiej zrobić w postaci krótkiego przypadku użycia (use case [[https://pl.wikipedia.org/wiki/Przypadek_użycia|[1]]]) z zaznaczoną rolą serwera i klienta. \\ Opis projektu można też wykonać w sposób podobny jak na stronie z propozycjami projektów Konrada Sieka [[https://web.archive.org/web/20260829234626/https://www.cs.put.poznan.pl/ksiek/sk2/zadania.html|[2]]]. \\ **[[projekt_przykladowy_opis|Przykład opisu projektu]].**
   * Tematy projektów mogą się powtarzać. Każda grupa musi przygotować własny opis projektu.   * Tematy projektów mogą się powtarzać. Każda grupa musi przygotować własny opis projektu.
-  * Około miesiąc przed terminem oddania projektu (datę podam później) będę przeglądał kod źródłowy projektów. Przegląd kodu ma pomóc w poprawieniu jakości kodu i eliminacji błędów które się w nim zdążyły pojawić. 
  
 ===== Wymagania ===== ===== Wymagania =====
Line 66: Line 63:
 Sieć i liczba użytkowników: Sieć i liczba użytkowników:
 <html><div style="margin: -1.2em 0 0 0"/></html> <html><div style="margin: -1.2em 0 0 0"/></html>
-  * **Program ma działać w sieciach rozległych (przez internet) – czyli obsługiwać opóźnienia, brak informacji zwrotnej z funkcji ''connect'' (firewall), zerwanie połączenia, etc.,**+  * **Program ma działać w sieciach rozległych (przez internet) – czyli sensownie działać mimo opóźnień, braku informacji zwrotnej z funkcji ''connect'' (firewall), ograniczonej prędkości łącz, zrywana połączeń, etc.,**
   * **Zaimplementowana logika ma uwzględniać że użytkownicy mogą się dowolnie łączyć, rozłączać (np. w trakcie kiedy serwer wykonuje na ich rzecz działanie), nie robić nic (np. nie udzielać odpowiedzi w quizie / kahoocie).** \\ <small>(W tym wymaganiu chodzi o to, żeby użytkownik łączący się "nie w porę" też dostał sensowny komunikat, a zakończenie / zerwanie / utrata połączenia bądź nieaktywność gracza nie wpłynęła negatywnie na pracę serwera; proszę nie próbować implementować "powracania" rozłączonego użytkownika.)</small>   * **Zaimplementowana logika ma uwzględniać że użytkownicy mogą się dowolnie łączyć, rozłączać (np. w trakcie kiedy serwer wykonuje na ich rzecz działanie), nie robić nic (np. nie udzielać odpowiedzi w quizie / kahoocie).** \\ <small>(W tym wymaganiu chodzi o to, żeby użytkownik łączący się "nie w porę" też dostał sensowny komunikat, a zakończenie / zerwanie / utrata połączenia bądź nieaktywność gracza nie wpłynęła negatywnie na pracę serwera; proszę nie próbować implementować "powracania" rozłączonego użytkownika.)</small>
   * Komunikacja klient-serwer ma odbywać się z wykorzystaniem protokołu TCP, chyba że temat projektu stanowi inaczej lub uzgodniono z prowadzącym użycie innych protokołów.   * Komunikacja klient-serwer ma odbywać się z wykorzystaniem protokołu TCP, chyba że temat projektu stanowi inaczej lub uzgodniono z prowadzącym użycie innych protokołów.
-  * Serwer musi nasłuchiwać na dowolnym adresie IP, a klient musi mieć możliwość wyboru adresu IP serwera bez ponownej kompilacji.+  * Komunikacja nie ma odbywać się po HTTP ani używać wzorca w którym klient periodycznie odpytuje serwer o stan. 
 +  * Serwer musi nasłuchiwać na dowolnym adresie IP, a klient musi mieć możliwość wyboru adresu IP serwera bez ponownej kompilacji (<small>np. z pliku konfiguracyjnego, z GUI, z argumentów programu</small>).
   * Liczba klientów nie może być sztucznie ograniczona. Jeśli np. liczba graczy jest ograniczona przez zasady gry, to należy umożliwić wiele gier na serwerze. (Po uzgodnieniu z prowadzącym można uchylić to wymaganie, np. dla gier czasu rzeczywistego.)   * Liczba klientów nie może być sztucznie ograniczona. Jeśli np. liczba graczy jest ograniczona przez zasady gry, to należy umożliwić wiele gier na serwerze. (Po uzgodnieniu z prowadzącym można uchylić to wymaganie, np. dla gier czasu rzeczywistego.)
      
 Rozwój oprogramowania: Rozwój oprogramowania:
   * **Kod ma być rozwijany na repozytorium** https://git.cs.put.poznan.pl/ (lub innym, dostępnym dla prowadzącego bez konieczności logowania / posiadania konta w zewnętrznej usłudze).   * **Kod ma być rozwijany na repozytorium** https://git.cs.put.poznan.pl/ (lub innym, dostępnym dla prowadzącego bez konieczności logowania / posiadania konta w zewnętrznej usłudze).
-  * **Projekt musi dać się łatwo zbudować – konieczne są pliki systemu budowania** [[https://en.wikipedia.org/wiki/Build_automation|[1]]] [[https://en.wikipedia.org/wiki/List_of_build_automation_software|[2]]]. +  * **Wymagane jest przygotowanie plików** (wybranego przez was) **systemu budowania pozwalające łatwo zbudować kod na lokalnym systemie** [[https://en.wikipedia.org/wiki/Build_automation|[1]]] [[https://en.wikipedia.org/wiki/List_of_build_automation_software|[2]]]. 
-  * Programy powinny kompilować się bez ostrzeżeń (np. dla kodu w C/C%%++%% z flagami kompilatora ''-Wall -Wextra'').+  * Programy powinny kompilować się bez ostrzeżeń (np. dla kodu w C/C%%++%% z flagami kompilatora ''-Wall -Wextra''). \\ <small>Samo pojawianie się ostrzeżeń nie obniża oceny, natomiast ostrzeżenia wskazujące na faktyczne błędy w kodzie mogą obniżać ocenę.</small>
   * Kod będzie testowany analizatorami statycznymi (np. cppcheck, [[https://clang.llvm.org/docs/analyzer/user-docs/CommandLineUsage.html|clang]]), wykonanie – dynamicznymi (np. [[https://valgrind.org/docs/manual/mc-manual.html|valgrind]]).   * Kod będzie testowany analizatorami statycznymi (np. cppcheck, [[https://clang.llvm.org/docs/analyzer/user-docs/CommandLineUsage.html|clang]]), wykonanie – dynamicznymi (np. [[https://valgrind.org/docs/manual/mc-manual.html|valgrind]]).
  
Line 85: Line 83:
  
 Projekt jest wstępnie oceniany na: Projekt jest wstępnie oceniany na:
-<html><div style="margin: -1.2em 0 0 0"/></html> 
   * 5.0 jeśli stworzone programy działają poprawnie w każdych warunkach sieciowych i realizują wszystkie aspekty zawarte w opisie projektu   * 5.0 jeśli stworzone programy działają poprawnie w każdych warunkach sieciowych i realizują wszystkie aspekty zawarte w opisie projektu
   * 4.0 jeśli stworzone programy działają poprawnie przynajmniej w typowej sieci lokalnej i realizują wszystkie aspekty zawarte w opisie projektu   * 4.0 jeśli stworzone programy działają poprawnie przynajmniej w typowej sieci lokalnej i realizują wszystkie aspekty zawarte w opisie projektu
   * 3.0 jeśli pojawiają się błędy w działaniu programów lub nie zostały zrealizowane fragmenty opisu projektu   * 3.0 jeśli pojawiają się błędy w działaniu programów lub nie zostały zrealizowane fragmenty opisu projektu
-Następnie ocena jest zwiększana / zmniejszana w zależności od: 
 <html><div style="margin: -1.2em 0 0 0"/></html> <html><div style="margin: -1.2em 0 0 0"/></html>
 +Następnie ocena jest zwiększana / zmniejszana w zależności od:
   * przyjętych rozwiązań aspektów sieciowych   * przyjętych rozwiązań aspektów sieciowych
   * jakości kodu   * jakości kodu
   * błędów kompilacji, błędów zarządzania pamięcią, błędnej synchronizacji między wątkami, etc.   * błędów kompilacji, błędów zarządzania pamięcią, błędnej synchronizacji między wątkami, etc.
   * braku spełnienia zasad opisanych na tej stronie (np. terminy, brak plików systemu budowania, brak repozytorium etc.)   * braku spełnienia zasad opisanych na tej stronie (np. terminy, brak plików systemu budowania, brak repozytorium etc.)
 +
 +**W trakcie prezentacji działającego projektu w laboratorium prowadzący będzie
 +wypytywać wyrywkowo o działanie kodu.** Przykładowo: wskazując linie w kodzie
 +zapyta co one robią, albo poprosi o wskazanie który fragment kodu odpowiada 
 +za konkretne rzeczy. **Brak udzielenia odpowiedzi, wyjaśnienia niepasujące do
 +kodu, wymijające odpowiedzi, problemy ze wskazaniem które linie w kodzie
 +odpowiadają za podane działania znacznie obniżą ocenę z projektu.**
 +Proszę się przygotować że będę wymagać od was przy prezentacji projektu
 +znajomości kodu waszych programów.
 +
 Często powtarzające się błędy które prawie zawsze skutkują obniżeniem oceny: Często powtarzające się błędy które prawie zawsze skutkują obniżeniem oceny:
-<html><div style="margin: -1.2em 0 0 0"/></html> 
   * aktywne czekanie (nieważne czy dla synchronizacji wątków, czy do obsługi sieci)   * aktywne czekanie (nieważne czy dla synchronizacji wątków, czy do obsługi sieci)
   * brak dzielenia przychodzących strumieniem TCP danych na logiczne komunikaty   * brak dzielenia przychodzących strumieniem TCP danych na logiczne komunikaty
Line 103: Line 109:
 ===== Terminy ===== ===== Terminy =====
  
-  * **Tematy projektów należy uzgodnić nie później niż do 30.11.2025.** \\ Przekroczenie tego terminu skutkuje obniżeniem oceny o 0.5.+  * **Tematy projektów należy uzgodnić nie później niż do 28.11.2026.** \\ Przekroczenie tego terminu skutkuje obniżeniem oceny o 0.5.
   * O skończeniu projektu należy poinformować prowadzącego mailowo. Do tego czasu opis projektu musi być zaakceptowany przez prowadzącego i prowadzący musi mieć dostęp do kodu źródłowego.   * O skończeniu projektu należy poinformować prowadzącego mailowo. Do tego czasu opis projektu musi być zaakceptowany przez prowadzącego i prowadzący musi mieć dostęp do kodu źródłowego.
-  * **Mail z informacją o skończeniu projektu należy wysłać najpóźniej 04.01.2026**. \\ Przekroczenie tego terminu skutkuje obniżeniem oceny o 0.5. +  * **Mail z informacją o skończeniu projektu należy wysłać najpóźniej 09.01.2027**. \\ Przekroczenie tego terminu skutkuje obniżeniem oceny o 0.5. 
-  * **Działający projekt należy zaprezentować w laboratorium przed końcem okresu zajęć dydaktycznych semestru zimowego (tj. najpóźniej 03.02.2026)**.+  * **Działający projekt należy zaprezentować w laboratorium przed końcem okresu zajęć dydaktycznych semestru zimowego (tj. najpóźniej 29.01.2027)**.
   * Wysłanie maila z informacją o skończeniu projektu a zaprezentowanie projektu w laboratorium muszą dzielić przynajmniej 2 dni (na przejrzenie kodu przez prowadzącego).   * Wysłanie maila z informacją o skończeniu projektu a zaprezentowanie projektu w laboratorium muszą dzielić przynajmniej 2 dni (na przejrzenie kodu przez prowadzącego).
-  * Zaprezentowanie projektu w laboratorium projektów możliwe jest na/po zajęciach lub po mailowym uzgodnieniu z prowadzącym.+  * Na zaprezentowanie projektu w laboratorium jest przewidziany czas na przedostatnich i ostatnich zajęciach. \\ Po mailowym uzgodnieniu z prowadzącym można też pokazywać projekt w innym terminie.
   * Do zaliczenia przedmiotu konieczna jest pozytywna ocena z projektu.   * Do zaliczenia przedmiotu konieczna jest pozytywna ocena z projektu.
  
sk2/projekt.txt · Last modified: by jkonczak