Kompendium pracy codziennej, czyli jak wkroczyć w nowe laboratorium najlepiej :)

Aby pracować podczas programowania efektywnie, warto zdawać sobie sprawę z etapów takiej pracy i wykonywanych w jej trakcie czynności. By bez problemu realizować zadania, warto odpowiednio się do tego przygotować. Poniżej przedstawiono jak rzecz wygląda w typowych sytuacjach związanych z laboratorium Podstaw programowania. Oczywiście opisany sposób postępowanie nie jest jedynym możliwym a jedynie przykładowym, aczkolwiek wydaje się, że skutecznym sposobem pracy.

1. Przed zajęciami

Do każdych zajęć wymagane jest przygotowanie. Należy zapoznać się z wszystkimi materiałami wskazanymi w pierwszej części opisu zadania, przygotować/przetestować wskazane programy / ich fragmenty. Wygodnie jest to zrobić na swoim lokalnym komputerze działającym pod nadzorem Linuksa. By mieć dostęp w trakcie laboratorium do przygotowanych w ten sposób programów umieść je w repozytorium (https://git.kcir.pwr.edu.pl lub swoim ulubionym). Alternatywnie skopiuj je na serwer diablo/panamint. Najwygodniej to zrobić z poziomu wykorzystanego do przygotowania komputera działającego pod nadzorem Linuksa wydając polecenie

jasiek@moj_komputer:~$ scp mojprog1.c mojprog2.c innyprog.c user@diablo.kcir.pwr.edu.pl:Programy
Password: 
mojprog1.c                                   100%   87     0.3KB/s   00:00
mojprog2.c                                   100%   92     0.1KB/s   00:00
innyprog.c                                   100%   44     0.1KB/s   00:00

co skopiuje wskazane pliki na komputer diablo (tudzież panamint, jako że komputery te mają wspólny system plików) do katalogu Programy (takowy na diablo musi istnieć – jeśli go tam nie ma możesz zalogować się na diablo: ssh user@diablo.kcir.pwr.edu.pl i utworzyć go: mkdir Programy). Z poziomu innych systemów operacyjnych należy w tym celu wykorzystać jakiś program potrafiący obsługiwać protokół scp (WinSCP, PSCP z programu PuTTY).

Pamiętaj, by po umieszczeniu programów na diablo sprawdzić, czy one tam są, czy się tam kompilują i działają zgodnie z Twoimi oczekiwaniami.

2. W trakcie zajęć

Przygotowanie

  1. By sprawnie działać w trakcie zajęć i testować oprogramowanie w różnych środowiskach warto otworzyć trzy terminale: jeden do pracy lokalnie i dwa do pracy zdalnej: na diablo i na panamincie, z przekierowaniem wyświetlania aplikacji graficznych – opcja X/Y (w poniższych przykładach zakładamy, że lokalny komputer w laboratorium to kajko314 – zauważ, że dokładnie w ten sam sposób co na laboratorium możesz pracować z własnego komputera działającego pod nadzorem Linuksa, każdy z trzech terminali możesz umieścić na osobnym pulpicie, w ten sposób będziesz miał pulpit do pracy lokalnej, do pracy na diablo i do pracy na panamincie)
    john@kajko314:~$ ssh diablo -X     # w terminalu 2.
    john@kajko314:~$ ssh panamint -X   # w terminalu 3.
    

  2. Warto kompilować przygotowywane programy z wykorzystaniem opcji -o, tak aby każdy program wykonywalny był zapisany we wskazanym pliku
    [john@kajko314:~]$ ls
    wartosci.c
    [john@kajko314:~]$ gcc -std=c99 -pedantic -Wall -o wartosci wartosci.c
    [john@panamint:~]$ gcc -std=c99 -pedantic -Wall -o wartosci_panamint wartosci.c
    [john@diablo:~]$ cc -xc99 -Xc -o wartosci_diablo wartosci.c
    [john@kajko314:~]$ ls
    wartosci wartosci_diablo wartosci_panamint  wartosci.c
    
    Plik źródłowy można edytować lokalnie przy użyciu ulubionego edytora (VS Code, emacs, CLion), najlepiej uruchomionego w tle przez cały okres pracy
    [john@kajko314:~]$ cube wartosci.c &
    

Programowanie

Proces programowania wymaga cyklicznego powtarzania kilku czynności. By robić to sprawnie warto:

  1. Utworzyć plik źródłowy, nad którym będziesz pracować. To może być nowy plik (wówczas w tym kroku nie musisz robić nic:) lub kopia jednego z plików, które opracowałeś(aś) wcześniej
    [john@kajko314:~]$ cp wartosci.c super_prog.c
    
  2. Uruchomić w tle swój ulubiony edytor i wczytać do niego opracowywany plik (najłatwiej podając jego nazwę jako argument wywołania edytora)
    [john@kajko314:~]$ code super_prog.c &
    
  3. Cyklicznie, po każdorazowym dokonaniu zmian w edytowanym pliku, zapisać jego zawartość na dysk (w emacsie C-x C-s ;) a następnie (bez kończenia pracy edytora!) dokonać kompilacji programu w oknie terminala (pamiętaj, by podczas kompilowania kodu korzystać z opcji ścisłego przestrzegania standardu ANSI C oraz dodatkowych ostrzeżeń): kompilatorem Sun C (dostępnym tylko na diablo)
    [john@diablo:~]$ cc -xc99 -Xc -o super_prog_diablo super_prog.c
    
    lub GNU C (dostępnym na diablo/panamincie/lokalnie – co zostaje wywołane na panaminicie/lokalnie po wydaniu polecenie cc?)
    [john@pdiablo:~]$ gcc -std=c99 -pedantic -Wall -o super_prog super_prog.c
    
    Częstsze kompilowanie mniejszych przyrostów kodu źródłowego pozwala uniknąć nagromadzenia błędów i znacznie usprawnia proces ich usuwania z programu. Zauważ, że wcześniej wywoływane w terminalu polecenia możesz łatwo przywoływać używając klawisza strzałki w górę lub opcji przeszukiwania historii poleceń (C-r).

  4. Po poprawnym skompilowaniu programu dokonać jego uruchomienia
    [john@diablo:~]$ ./super_prog
    
    i sprawdzić poprawność działania – to, że udało się skompilować program źródłowy nie oznacza, że działa on już poprawnie (błędy kompilacji vs. błedy wykonania). Aby przetestować swój program, uruchamiaj go wiele razy z różnymi danymi wejściowymi – zarówno typowymi, poprawnymi, jak i błędnymi – i sprawdzaj, czy wyniki są zgodne z oczekiwaniami. Warto też sprawdzać, jak program zachowuje się w nietypowych sytuacjach, np. przy pustych danych lub bardzo dużych liczbach. Dzięki temu można łatwiej zauważyć błędy w logice działania programu.

Na zakończenie

  1. Zachowaj efekty swojej pracy w repozytorium według wskazań prowadzącego / zgodnie z własnymi potrzebami.

  2. Zakończ wszystkie otwarte połączenia z serwerami diablo/panamint
    [john@diablo:~]$ exit
    logout
    Connection to diablo.kcir.pwr.edu.pl closed.
    john@kajko314:~$
    
    i wyloguj się z lokalnej stacji roboczej.

3. W domu

Jeżeli posiadasz dostęp do systemu GNU/Linux (OS, maszyna wirtualna, Live USB), to wygodnie jest najpierw pracować nad programem lokalnie na własnym komputerze, a dopiero później, po jego uruchomieniu, przenieść jego źródła na serwer diablo/panamint – i tam, zdalnie, upewnić się co do jego poprawności lub/i nanieść wymagane poprawki. I tak:

  1. Pobierz pliki nad którymi chcesz pracować z repozytorium, ewentualnie skopiuj je z diablo/panaminta na swój komputer lokalny
    jasiek@moj_komputer:~$ scp user@diablo.kcir.pwr.edu.pl:plik_zrodel.c ~/
    Password: 
    plik_zrodel.c                                100%   47     0.1KB/s   00:00
    
  2. Otwórz źródła w ulubionym edytorze, np. VS Code, emacs, by dalej je rozwijać. Większość dystrybucji Linuksa ma domyślnie zainstalowany darmowy kompilator języka C, GNU C. Przy kompilacji należy dodawać odpowiednie flagi
    jasiek@moj_komputer:~$ gcc -std=c99 -pedantic -Wall -o prog plik_zrodel.c
    
  3. Kiedy program wydaje się już działać poprawnie, skopiuj go z powrotem na serwer diablo/panamint
    jasiek@moj_komputer:~$ scp plik_zrodel.c user@diablo.kcir.pwr.edu.pl: 
    Password: 
    plik_zrodel.c                                100%   47     0.1KB/s   00:00
    
  4. Połącz się zdalnie z serwerem diablo/panamint, skompiluj przesłany kod źródłowy i przetestuj poprawność jego działania
    jasiek@moj_komputer:~$ ssh user@diablo.kcir.pwr.edu.pl
    Password:
    Last user: Fri Apr 13 08:37:51 2012 from 176.42.241.76.i
    Sun Microsystems Inc.   SunOS 5.10      SUNW,Sun-Fire-880
    user@diablo:~$ cc -xc99 -Xc -o prog plik_zrodel.c
    user@diablo:~$ ./prog
    
    Pamiętaj, że program, który wydaje się działać poprawnie na twoim lokalnym komputerze wcale nie musi działać poprawnie w ogólności, w tym na serwerze diablo! Dlatego ważnym jest, aby dokładnie go przetestować. Jeśli będziesz miał potrzebę dokonania poprawek w pliku na zdalnym komputerze i zalogowałeś się na nim jak powyżej bez przekazywania sesji graficznej (brak opcji X/Y) to musisz uruchomić edytor w pierwszym planie (bez umieszczania na końcu polecenia znaku & – edytor musi potrafić działać w trybie terminalowym). Jeśli masz dostęp do szybkiej sieci komputerowej możesz logować się w trybie graficznym (z opcją X/Y). Nie poleca się jednakże tego trybu pracy, jeżeli sieć lokalna jest powolna – występują wtedy znaczne opóźnienia w przesyle danych, czy nawet zrywanie połączenia, co utrudnia komfortową pracę nad programem. Przy pracy w takich niekorzystnych warunkach nieocenioną pomocą może być program tmux lub GNU Screen (w przypadku pierwszego z nich po zerwaniu połączenia wystarczy zalogować się ponownie na zdalnym komputerze i wydać polecenie tmux attach by przywołać stan tuż sprzed zerwania).

Jeżeli nie posiadasz w domu dostępu do systemu GNU/Linux, zainstaluj na komputerze aplikację pozwalającą na łączenie się z serwerem za pomocą protokołu SSH – dla systemu Windows wygodnym narzędziem jest np. program PuTTY (http://www.putty.org/). Zaleca się również zainstalowanie wygodnej aplikacji do bezpiecznego przesyłania plików pomiędzy lokalnym i zdalnym komputerem, np. WinSCP (https://winscp.net/).

  1. Uruchom wybraną aplikację, np. PuTTY, i połącz się z serwerem diablo/panamint.
  2. Kontynuuj, zdalnie, pracę nad programem.

4. Kompilowanie programów na serwerach diablo/panamint

About this document ...

Kompendium pracy codziennej, czyli jak wkroczyć w nowe laboratorium najlepiej :)

This document was generated using the LaTeX2HTML translator Version 2021.2 (Released July 1, 2021)

The command line arguments were:
latex2html -html_version 3.2,latin2,unicode -split 0 -no_navigation dodatek_praca_codzienna

The translation was initiated on 2025-10-18