$ tree . ├── dir │ ├── my data │ │ ├── 1.txt │ │ └── 3.txt │ └── my_data │ ├── 2.txt │ └── 3.txt └── Super[something] ├── super! │ └── chaszcze#5 └── super🕴 └── gąszcz $ ./fix_names --allowed 'a-z0-9ąćęłńóśźź' --case-insensitive --replacement '_' --merge dir $ tree . ├── dir │ └── my_data │ ├── 1.txt │ ├── 2.txt │ ├── 3.txt │ └── 3.txt.1 └── Super[something] ├── super! │ └── chaszcze#5 └── super🕴 └── gąszcz $ ./fix_names --allowed 'a-z0-9ąćęłńóśźź' --case-insensitive --replacement '_' --suffix dir 'Super[something]' $ tree . ├── dir │ └── my_data │ ├── 1.txt │ ├── 2.txt │ ├── 3.txt │ └── 3.txt.1 └── Super_something_ ├── super_ │ └── chaszcze_5 └── super_.1 └── gąszcz++++ **~~Temat.#~~.** Wykres bieżącego użycia sieci. \\ Skrypt odczytuje z systemu informacje o ilości przesłanych i odebranych bajtów przez wyspecyfikowaną w argumentach skryptu kartę sieciową //ifname//. Na tej podstawie co jakiś czas (określony w argumentach skryptu) oblicza prędkość odbioru i wysłania danych jako różnicę bajtów podzieloną przez czas od poprzedniego pomiaru. Po każdym pomiarze skrypt uaktualnia rysowane przez siebie wykresy prędkości wysłania i odbierania danych. Razem wykresy muszą zajmować całe dostępne okno terminala i muszą mieć czas jako poziomą oś. Dodatkowo skrypt ma używać wybranych znaków Unicode pozwalających na większą dokładność niż cały znak (np. ''⢀⢠⢰⢸⡀⣀⣠⣰⣸⡄⣄⣤⣴⣼⡆⣆⣦⣶⣾⡇⣇⣧⣷⣿'', ''▁▂▃▄▅▆▇█'' czy ''▗▐▖▄▟▌▙█''). \\ Liczbę wysłanych/odebranych znaków można odczytać z pliku ''/sys/class/net/%%%%//ifname//%%%%/statistics/tx_bytes'' i ''…/rx_bytes'', bądź z wyników komend ''ethtool --statistics ifname'' oraz ''ip [--json] --statistics show dev //ifname//''. \\ Zaleca się użycie znaków sterujących (por. ''man console_codes'') do przesuwania kursora w wybrane miejsce ekranu. **~~Temat.#~~.** Automatyzacja uruchamiania benchmarków i robienia wykresów z wynikami. \\ Temat wymaga wybrania na początku programu który dla różnej wartości jednego parametru generuje powiązany z nim wynik (bądź inną metrykę). \\ Skrypt przyjmuje kilka argumentów: listę bądź zakres wartości parametru, liczbę powtórzeń i pierwszą część nazwy tworzonych przez skrypt plików. \\ Skrypt ma uruchamiać wybrany program z kolejnymi wartościami parametru, powtarzając uruchomienie z każdą wartością parametru tyle razy ilu powtórzeń zażądano w argumentach skryptu. Skrypt ma umieszczać wyniki w pliku/plikach tekstowych. \\ Następnie skrypt ma wygenerować obrazek (np. svg/png) z wykresem (np. punktowym, liniowym) zależności wyniku od wartości parametru. Na wykresie dla każdej wartości parametru ma być umieszczona średnia z wyników wraz ze słupkiem błędu. \\ Wykresy możesz generować narzędziami takimi jak ''gnuplot'' czy ''R''. \\ Jeśli nie masz pomysłu na program do ewaluacji, możesz użyć komendy szukającej liczby pierwszej o długości ''//N//'' bitów – ''openssl prime -generate -bits //N//'' – i użyć czasu wykonania jako metryki (wyniku). **~~Temat.#~~.** Skrypt testujący program z kombinacjami dwóch parametrów. \\ Na początku skryptu ma znajdować się lista możliwych wartości każdego z dwóch zmienianych parametrów oraz komenda do uruchamiania z miejscem na wstawienie wartości tych parametrów. \\ Skrypt ma za zadanie uruchomić podaną komendę dla wszystkich kombinacji parametrów. Standardowe wyjście testowanego programu (bądź produkowany plik, jeśli program tworzy plik z wynikiem zamiast pisać do standardowego wyjścia) ma zostać umieszczone w pliku o nazwie jednoznacznie wskazującej na parametry z którymi został uruchomiony program. Pliki mają zostać umieszczone w katalogu którego nazwa zawiera nazwę testowanego programu oraz datę i godzinę uruchomienia skryptu. Każdy gotowy plik ma być kompresowany. \\ Skrypt ma wyświetlać na standardowym wyjściu bieżąco testowaną kombinację parametrów i czas uruchomienia bieżącego testu. \\ Wybór testowanego programu dowolny. Przykładowy program który można testować to program ''fio'', testujący wydajność operacji wejścia-wyjścia. Przykładowo do badania wydajności dysku można w Bashu użyć komendy: \\ ''fio <(echo -e "[foo] \n time_based \n runtime=1s \n filename=/tmp/testFile \n filesize=10M \n ioengine=posixaio \n readwrite=randrw \n rwmixread=10 \n blocksize=4k")'' \\ Parametry do zmiany to np. rozmiar bloku i procent odczytów. **~~Temat.#~~.** Przygotowywanie i uruchomienie testu na zdalnej maszynie. \\ Skrypt ma utworzyć tymczasowy katalog w którym umieści pliki z listy (lista czytana z pliku lub konfigurowalna na początku skryptu). Następnie skrypt ma przygotować plik konfiguracyjny i umieścić w nim wartości podane jako argumenty skryptu. Następnie pliki mają być skopiowane do maszyny zdalnej (adres maszyny ma być ustawialny w zmiennej na początku skryptu) i na zdalnej maszynie ma zostać uruchomiony wskazany program (też ustawialny w zmiennej na początku skryptu). Standardowe wyjście i standardowy błąd uruchomionego programu mają trafić do pliku z nazwą programu i bieżącą datą. \\ Wybór testowanego programu i format pliku konfiguracyjnego dowolny. Przykładowy program który można testować i format pliku konfiguracyjnego można wziąć z poprzedniego tematu. **~~Temat.#~~.** Przypomnienie o najbliższych urodzinach. \\ Skrypt korzysta z pliku w którym znajdują się cykliczne wydarzenia – daty i opisy (format pliku dowolny, przykład formatu: ''12.31 imieniny Sylwestra''). \\ Bez argumentów, skrypt wyświetla wszystkie wydarzenia które dotyczą najbliższych dwóch tygodni, lub jeśli w przeciągu dwóch tygodni są mniej niż trzy wydarzenia, to wyświetla trzy najbliższe wydarzenia. \\ Z właściwymi argumentami skrypt dodaje nowe wydarzenia, usuwa istniejące bądź wypisuje najbliższe wystąpienie każdego wydarzenia porządkując wyniki chronologicznie. **~~Temat.#~~.** Pokaz slajdów / prezentacja w Bashu. \\ Skrypt ma wyświetlać w terminalu po kolei pliki znajdujące się we wskazanym w argumentach skryptu katalogu. Nawigacja między kolejnymi "slajdami" ma odbywać się przy wykorzystaniu odpowiednich klawiszy z klawiatury, po naciśnięciu których skrypt ma przechodzić do kolejnego slajdu, przechodzić do poprzedniego slajdu, oraz wyświetlać listę plików i z tej listy przejść do dowolnego slajdu. Na każdym slajdzie, poza treścią pliku, ma znajdować się pasek stanu z numerem slajdu, łączną liczbą slajdów i nazwą pliku. \\ Jeśli któryś z plików jest kodem źródłowym, ma on zostać wypisany z kolorowaniem składni. \\ W Bashu, komenda ''read -sn1'' wczytuje pojedynczy znak bez wypisywania go na ekran. Zauważ, że strzałka generuje trzy znaki. \\ Do kolorowania składni użyj zewnętrznego narzędzia (np. ''pygmentize''). **~~Temat.#~~.** Generowanie miniaturek. \\ Skrypt przyjmuje jako argument listę katalogów. Skrypt generuje dla każdego obrazu znajdującego się bezpośrednio w podanych katalogach miniaturę o określonym rozmiarze i umieszcza ją w podkatalogu ''tn'' w katalogu w którym znajduje się obraz. Miniaturkom ustawia czasy modyfikacji, zmiany i dostępu na identyczne jak odpowiednie czasy obrazu. Dodatkowo w każdym podkatalogu ''tn'' skrypt tworzy obraz o nazwie ''cover.jpg'' z pierwszymi 25 miniaturkami ułożonymi w siatce 5x5. \\ Skrypt wypisuje na ekranie nazwę każdego przetwarzanego obrazu. \\ W zadaniu zaleca się skorzystać z programu ''file'' do wykrywania typu MIME i pakietu narzędzi imagemagick do operacji na obrazkach (tzn. programów ''convert''/''magick'' oraz ''montage''). **~~Temat.#~~.** Tworzenie śladów GPX z geotagowanych zdjęć. \\ Skrypt ma przeglądać rekurencyjnie podane katalogi w poszukiwaniu plików ''.jpg''. Dla każdego znalezionego pliku skrypt ma wyciągnąć pozycję GPS (//GPSPosition//) oraz datę i czas wykonania zdjęcia (//CreateDate//) z tagów (metadanych) EXIF. Na tej podstawie ma zostać utworzony plik GPX zawierający ślady (pozycja + data) oraz ścieżki (pozycja + URL do zdjęcia). Odcinki śladów/ścieżek mają być tworzone tak, by kolejne zdjęciami w jednym odcinku dzieliło mniej niż ustalony czas (np. godzina). Zdjęcia bez wymaganych tagów mają być pomijane. Skrypt ma wypisywać podsumowanie: łączną liczbę zdjęć, liczbę zdjęć z tagami, oraz liczbę wygenerowanych śladów/ścieżek. \\ Do napisania i testowania skryptu potrzebujesz geotagowanych zdjęć – proszę je zorganizować we własnym zakresie, np. robiąc zdjęcia telefonem bądź aparatem fotograficznym z działającym odbiornikiem GPS. \\ Polecenie ''exiftool'' pozwala wyciągać metadane z plików. Liczne narzędzia, np. ''gpxsee'', wyświetlą plik GPX (pod warunkiem że będzie zgodny z odpowiednim standardem). ++++ Przykładowy (uproszczony) plik GPX |
2024.04.01
2024.04.01
/home/user/zdjecia/1.jpg image/jpeg
<img width=128 height=128 src="/home/user/zdjecia/1.jpg">
/home/user/zdjecia/2.jpg image/jpeg
<img width=128 height=128 src="/home/user/zdjecia/2.jpg">
++++
**~~Temat.#~~.**
Porządkowanie zdjęć.
\\
Skrypt przyjmuje jako pierwszy argument katalog docelowy, a jako kolejne listę
katalogów źródłowych.
\\
Skrypt ma porządkować katalog ze zdjęciami. Ma przenieść każdy plik z katalogów
źródłowych (rekurencyjnie) do podkatalogu ''rok/miesiąc/dzień'' w katalogu
docelowym i zmienić plikom nazwy na ''godzina_minuta_sekunda__//stara_nazwa//''.
Jako datę skrypt ma brać dane EXIF (//CreateDate//, //DateTimeOriginal//) lub datę
modyfikacji pliku jeśli plik nie ma danych EXIF.
Jeśli dwa pliki z katalogów źródłowych mają tę samą nazwę i daty, skrypt ma
dodawać na koniec nazwy (przed rozszerzenie) kolejne numery tak żeby nie
stracić żadnego pliku.
\\
W trackie pracy skrypt ma wypisywać linię ''plik źródłowy --> plik docelowy''
\\
W zadaniu zaleca się skorzystać z programu ''exiftool'' do wyciągania metadanych o pliku.
**~~Temat.#~~.**
Ściąganie obrazków ze strony.
\\
Skrypt przyjmuje jako argument listę adresów URL do stron www.
\\
Skrypt pobiera wskazane strony i wyciąga z nich adresy obrazów (przez obraz
należy rozumieć tag ''