Wprowadzenie :: Elektronika :: Programowanie :: Telekomunikacja :: Oprogramowanie :: Podsumowanie

Wstęp do techniki

Wprowadzenie

W kontaktach z technologią, byciu dobrym "komputerowcem", elektronikiem, ... najważniejsze wydaje się być bawienie się technologią, eksperymentowanie, wyciąganie wszystkiego co się da z danego układu, łączenie i integrowanie różnych systemów i technologii, poznawanie nowego, głębokie poznawanie, traktowanie problemów jako wyzwań, ... oraz czerpanie z tego radości. Do określenia kogoś o takiej postawie, takim podejściu do techniki, najlepszym terminem byłby haker, pomimo iż jest to termin różnie rozumiany, u wielu osób wywołujący negatywne skojarzenia, wydaje się on najbliższy postawie życiowej jaką starałem sie tu przedstawić (trochę więcej na stronach Wikipedii).

Podobnie jest przy poznawaniu świata komputerów, elektroniki, telekomunikacji, ... , przy nauce tych dziedzin bardzo istotne (jeżeli nie najistotniejsze) wydaje się otwarte podejście do stawianych problemów, eksperymentowanie. Dla przykładu przy poznawaniu obsługi bądź konfiguracji jakiegoś nowego narzędzia równie istotne jak zapoznanie się z dokumentacją, podręcznikiem jest wypróbowanie różnorakich opcji, ich różnych kombinacji w praktyce, poszukanie takiego sposobu konfiguracji, użytkowania (takiego stylu) jaki jest najbardziej odpowiedni dla nas i dla rozwiązywanego problemu. Nie ma większego sensu uczenia się szczegółów, konkretnych implementacji, itp na zapas. Jeżeli możemy sobie tylko na to pozwolić warto uczyć się na "żywych" zastosowaniach (rozwiązując problemy, które gdzieś w jakiś sposób samoistnie się pojawiły); przy takiej nauce warto też pamiętać o ogromnych zasobach Sieci i na przykład www.google.com :-). W rozwiązywaniu konkretnych zagadnień najistotniejsze jest wiedzieć jak się do tego zabrać i umieć dać sobie radę.
Wydaje się że właśnie w tych dziedzinach często od wiedzy szczegółowej, ważniejsza jest szeroka wiedza ogólna (oraz oczywiście odpowiednie predyspozycje i chęci), wraz z umiejętnościami szukania informacji (i wiedzą gdzie należy jej szukać), sporą dozą praktyki (rzeczywistość tworzy sytuacje które nie śniłyby się teoretykowi ...) i tak zwanym obyciem z techniką / technologią. "Komputerologia" nie wymaga posiadania pełnej wiedzy na początku wykonywania zadania1, często nawet ekspert może czegoś nie wiedzieć, szukać (nieco po omacku) działającego rozwiązania i w zasadzie ma do tego prawo (tak więc różnica między uzdolnionym uczniem a dobrym ekspertem może polegać tylko na ilości doświadczenia - a ono jest w tej dziedzinie dość ważne ...). Gdy napotka się jakiś problem należy próbować go rozwiązać, eksperymentować, szukać porady (ale na zasadzie "że chcemy dostać wędkę a nie rybę") i nie żałować na to czasu. Dla przykładu umiejętność programowania to zasadniczo jakieś podstawy i zrozumienie tego jak to działa i trochę kombinowania, oprócz tego przydatne są dobre dokumentacje do API wykorzystywanych bibliotek (w tym bibliotek standardowych) oraz podręczniki "algorytmy i struktury danych" i "metody numeryczne" ;-) . Poniżej spróbowałem zebrać i streścić wspominane podstawy teoretyczne (które każdy komputerowiec znać powinien ...).

Podstawowym zadaniem chyba wszystkich systemów komputerowych i telekomunikacyjnych oraz ogromnej większości systemów elektronicznych jest przetwarzanie lub przekazywanie informacji. Obecnie jest to w znacznej większości informacja cyfrowa (w odróżnieniu od analogowej jest ona "skwantowana" - sygnał będący jej źródłem zmieniający się w sposób ciągły został poddany procesowi pomiaru i zamiany na liczbę o skończonej dokładności).
Właśnie to oraz (możliwe do wprowadzenia dzięki postaci liczbowej) sumy kontrolne umożliwiają wierne kopiowanie informacji. Dzięki wprowadzeniu tego dodatkowego matematycznego poziomu w zapisie informacji odrywamy się po części od ograniczeń naszej fizycznej rzeczywistości; "bity to nie atomy" i fizyka (w szczególności kwantowa) ich nie dotyczy.

Podstawową jednostką informacji jest bit, mogący przyjmować dwa rozróżnialne stany nazywane zazwyczaj zero i jeden, będący odpowiedzią typu tak/nie. Przy pomocy mniejszej ilości stanów nie jest możliwe przekazanie informacji (pozornie mogłoby wydawać się że niekiedy wystarczy jeden stan - np. podnosimy n razy chorągiewkę i w ten sposób przekazujemy liczbę n, jednak tutaj też jest ukryty drugi stan - chorągiewka opuszczona). Z stanami tymi łatwo związać odpowiednie stany napięciowe na wejściach/wyjściach układów elektronicznych - np. napięcie powyżej X voltów ("jest napięcie") oznacza 1, napięcie poniżej Y voltów ("brak napięcia") oznacza 0.

Wydaje się że właśnie z tych dwóch powodów oraz z faktu iż system dwójkowy (mający tylko dwie cyfry - 0 i 1) jest systemem liczbowym o najmniejszej możliwej podstawie, system ten wraz z logiką dwuwartościową zyskał tak duże zastosowanie w elektronice cyfrowej i komputerach.

Elektronika

Elektronika (zarówno analogowa jak i cyfrowa) zajmuje się zasadniczo przetwarzaniem informacji w postaci sygnałów elektrycznych. Podstawowymi pojęciami jest tutaj prąd (przepływ ładunku) oraz napięcie (różnica potencjałów czyli siła ten przepływ wymuszająca). Elementy elektroniczne podzielić możemy na elementy bierne (oporniki, kondensatory, cewki, diody) - wpływające na przepływ prądu w sposób nieregulowany oraz elementy aktywne (których działanie w odróżnieniu od biernych jest regulowane na drodze sygnałów elektrycznych). W elektronice (zwłaszcza cyfrowej) często dużo ważniejszym pojęciem niż prąd jest napięcie, a dokładniej nawet tylko potencjał w odniesieniu do umownego potencjału zerowego - masy (GND).

Dla przetwarzania danych przez współczesną elektronikę najważniejszym z podstawowych jej elementów wydaje się być tranzystor - jest to element o regulowanym poprzez przyłożenie odpowiedniego napięcia oporze elektrycznym (może być zatem wykorzystywany jako elektronicznie sterowany przełącznik). Obecnie dość rzadko spotykany jest jednak jako niezależny składnik urządzenia, najczęściej występuje wraz z dziesiątkami czy nawet milionami innych tranzystorów w postaci układów scalonych. Podstawowymi dla techniki cyfrowej układami scalonymi są bramki logiczne realizujące poszczególne funkcje logiczne na przetwarzanych sygnałach (trochę więcej o nich, systemie dwójkowym i logice dwuwartościowej, znajduje się w artykule technika cyfrowa). Poniżej przedstawię oraz omówię schemat prostego układu elektronicznego, obrazującego podstawowe aspekty elektroniki.

schemat

U1 jest dwu wejściową bramką logiczną AND (na wyjściu zwraca stan logiczny 1 gdy na obu wejściach ma stan logiczny 1, któremu w tym wypadku odpowiada stan wysoki +5V), do jednego z wejść podłączony jest jakiś sygnał sterujący z zewnątrz (P1) do drugiego podłączony jest natomiast przełącznik S1 zwierający do masy. Rezystor R1 podłączony do +5V zapewnia iż gdy przełącznik nie jest zwarty to do wejścia bramki przyłożony jest stan wysoki (niektóre z układów scalonych mają takie rozwiązanie zaimplementowane wewnętrznie, nawet w tym wypadku nie jest on konieczny gdyż bramka ta wejścia nie podłączone traktuje jako logiczne 1), a gdy zwieramy S1 to ogranicza płynący prąd. Wyjście bramki poprzez kolejny opornik (R2), który ogranicza prąd pobierany z wyjścia układu, steruje tranzystorem NPN T1 (przewodzi on gdy napięcie miedzy bramką (B) a emiterem (E) przekroczy określoną wartość). Wprowadzenie tranzystora w stan przewodzenia powoduje przepływ prądu przez LED D1 oraz rezystor R3, który ogranicza ten prąd do wartości odpowiedniej dla D1 (oczywiście także T1 musi być dostosowany do wartości tego prądu); warto tu także zwrócić uwagę na polaryzację D1 (LED jak każda dioda przewodzi tylko w jedną stronę) oraz na to iż tranzystorem możemy sterować wiele innych układów - nie koniecznie LEDy. Kondensator C1 wraz z rezystorem R4 (a także R3) powoduje spowolnione wygaszanie D1 - kondensator rozładowuje się przez R4 gdy T1 przewodzi, natomiast po zaprzestaniu przewodzenia przez T1 kondensator ten ładuje się przez R3 i R4 podtrzymując przez pewien czas świecenie diody (dioda przygasa powoli, gdyż spada na niej napięcie w skutek procesu ładowania C1). Na koniec należy wspomnieć że przedstawiona konwencja symboli dla elementów elektronicznych nie jest jedyną.

Jednak także i bramki ustąpiły już miejsca układom programowalnym złożonym z tysięcy tranzystorów, bramek i tym podobnych elementów - np. programowalnym układom logicznym, procesorom czy też mikrokontrolerom (zawierającym także pamięć zmienną - dla danych programu oraz pamięć do przechowywania samego programu); sprowadzając w zasadzie elektronikę opartą na elementach dyskretnych do roli pomocniczej. Właśnie niczym mniej ani więcej tylko takim programowalnym urządzeniem elektronicznym, o zdolności do przetwarzania znacznych ilości informacji (w postaci liczb) w krótkim czasie (znacznej mocy obliczeniowej), jest współczesny komputer. Złożony on jest zasadniczo z procesora, pamięci operacyjnej (wraz z układem odpowiedzialnym za umożliwienie dostępu do niej procesorowi - kontrolerem pamięci) i pamięci stałej (dysk twardy itp.) służącej do przechowywania programów i danych. Niezależnie od roli jaką pełni (maszyna do pisania czy grania, serwer WWW czy też serwer nadzorujący procesy w reaktorze jądrowym, ...) każdy komputer tylko i wyłącznie wykonuje jakiś program.

Poprzez powyższe twierdzenie, że komputer wykonuje tylko i wyłącznie program będący ciągiem instrukcji, nie twierdzę że nie może istnieć coś takiego jak sztuczna inteligencja, a nawet sztuczna świadomość. Obecnie istnieją systemy zdolne do samodzielnej nauki na podstawie historycznych doświadczeń, istnieją systemy decyzyjne oraz wiele innych rozwiązań które w jakimś stopniu można by uważać za inteligentne. Z problemem sztucznej inteligencji związana jest głównie nieprecyzyjność tego terminu (istnienie wielu sprzecznych definicji - zobacz w Wikipedii). Wydaje się, że nawet człowiek nie jest w stanie przekonać innej osoby o tym że jest istotą inteligentną a tym bardziej świadomą gdy tamta przyjmie inne założenie.

Oprócz opisanych fundamentów warto zainteresować się także m.in. programowalnymi matrycami elementów cyfrowych i analogowych, systemami komputerowymi do zastosowań wbudowanych, systemami sterowania, nadzoru i monitoringu, bezpieczeństwa, a także samą elektryką. O wielu z tych zagadnieniach wspominam także w podlinkowanych artykułach.

Programowanie

Program jest to ciąg instrukcji (głównie operacji matematycznych i logicznych), zapisany w języku zrozumiałym dla danego procesora (kod maszynowy powstający w wyniku kompilacji kodu stworzonego w języku wyższego poziomu). Wśród tych instrukcji szczególne miejsce zajmują instrukcje skoków (warunkowych i bezwarunkowych), one właśnie umożliwiają warunkową realizację fragmentów programu oraz warunkowe powtarzanie (iterację) fragmentów programu. Za szczególny przypadek instrukcji skoku można uważać instrukcję wywołania procedury, powodującą przekazanie stosownych informacji i rozpoczęcie wykonywania podprogramu (poprzez warunkowe wywoływanie tej samej procedury z jej wnętrza możemy otrzymać "konkurencyjny" do iteracji sposób powtarzania fragmentu programu - rekurencję.

Podstawą działania każdego programu jest jakiś algorytm, jest to pojęcie trochę bardziej abstrakcyjne niż program (zwłaszcza rozumiany jako kod maszynowy) - ogólnie mówiąc jest to skończony ciąg czynności prowadzących do zrealizowania jakiegoś zadania. Jak już wspomniałem oprócz kodu maszynowego (złożonego z numerów rozkazów i ich parametrów) są również języki programowania. Najbardziej podstawowym jest asembler, który pozwala używać łatwiej zrozumiałych dla człowieka nazw zamiast numerów instrukcji, rejestrów (w których procesor przechowuje wartości którymi operuje), ... . Jednak jego instrukcje odpowiadają niemalże w 100% instrukcjom procesora (kodowi maszynowemu), dlatego też jest bardzo silnie zależny od danej architektury sprzętowej (modelu procesora), powoduje to problemy z przenoszeniem programów pisanych w asemblerze na inne architektury, to było jednym z powodów stworzenia języków wyższego poziomu. W językach takich treść algorytmu wyraża się przy pomocy poleceń danego języka będących bytami bardziej abstrakcyjnymi od instrukcji procesora (np. pojęcie zmiennej i operowanie na niej a nie na miejscach w pamięci i rejestrach). Obecnie asemblera używa się w zastosowaniach wymagających dużej wydajności (zarówno w oddzielnych aplikacjach jak i fragmentach większych programów) bądź dla urządzeń o niewielkich rozmiarach pamięci.

Najistotniejszym obecnie językiem programowania wydaje się być język C (a także jego "poprawiona", obiektowa wersja C++). Program w C składa się zasadniczo z funkcji (szczególną rolę pełni funkcja main() od której zaczyna się wykonywanie programu), oprócz tego mamy zmienne (także tablice i struktury), instrukcje sterujące (pętle, warunki - for, while, if, switch, ...), a także instrukcje preprocesora (umożliwiające dostosowanie kodu naszego programu przed kompilacją ...). Język ten umożliwia nam także operacje na adresach w pamięci pod którymi przechowujemy dane (wskaźniki), pozwala na operacje matematyczne, logiczne, binarne, posiada dość rozbudowaną bibliotekę standardowych funkcji, ... . Z kolei podobny do niego C++ umożliwia ponadto programowanie obiektowe (class, ...) oraz ma dodatkowo własną bibliotekę standardową. Poniżej zamieszczam krótki program obrazujący koncepcję programowania w C:

// funkcja główna od której zaczyna się wykonywanie programu, może przyjmować argumenty
// odpowiadające za wartości przekazane w linii poleceń oraz zwracać kod powrotu
main() {
  // zmienna typu char:
  char a=0;
  
  // zmienna tablicowa (czyli N zmiennych danego typu zapisanych w kolejnych komórkach pamięci):
  char tab[3] = {54, 0x2A, 124}; // warto zwrócić uwagę na zapis szesnastkowy
  
  // wskaznik - czyli zmienna przechowująca adres innej zmiennej / funkcji / struktury danych
  // w tym wypadku dwa wskazniki do zmiennych typu char
  char *wskA, *wskB;
  
  // nadanie im wartości będącej adresem a i adresem początku tablicy tab
  wskA=&a; wskB=tab; // warto zwrócić uwagę na operator wyłuskania adresu zmiennej
  
  // powtorzenie 10 razy ... ale nie przez pętlę for:
  while (a++ > 10) { // zwiększamy a o 1 po sprawdzeniu warunku ...
    // wypisanie:
    printf("obieg petli numer: %i\n", a);
    
    // gdy a jest 3:
    if (a==3) {
      printf("\ta = %i \n\ttab[0] = %i \n\ttab[1] = %i\n", *wskA, tab[0], *(wskB+1));
        // warto zwrócić uwagę na operację wyłuskania wartości z pod wskaźnika
        // oraz artmetykę wskaźnikową
    }
  }
  /* na koniec należy wspomnieć iż wskaźniki są dość niskopoziomowym mechanizmem
     umożliwiającym "rozszerzenie" zakresów zmiennych poza najbliższe klamerki -
     np. funkcja może przyjmować wskaźnik i modyfikować bezpośrednio zmienną
     z kodu który ją wywołał ... normalnie nie byłaby ona dla niej dostępna */
} 

Warto jeszcze wspomnieć o istnieniu całej masy innych języków programowania oraz o tym, że podstawową różnicą między nimi jest stosowany formalizm i nazwy funkcji bibliotecznych - na ogół większych różnic w samej koncepcji programowania nie ma (są jednak pewne "wyjątkowe" języki, np. erlang). Szczególnie zachęcam do zapoznania się z wybranymi programami prezentującymi podstawy programowania w C/C++ w działaniu: podstawy.c, petle_warunki.c, in_out.c, numeracja_ip.c, wskaznikologia.c. Polecam również artykuły poświęcone skryptowym językom programowania, stanowiącym niezbędnik administratora systemów Unix'owatych - awk (tu warto wspomnieć że np. w odróżnieniu od C nie ma konieczności deklarowania w nim typów zmiennych, a tablice indeksowane są dowolnym napisem ...) i (ba)sh (język ten w związku ze swoją specyfiką wyróżnia się tym iż większość komend (poza podstawowymi instrukcjami sterującymi - takimi jak if, while, ...) jest realizowana przez osobne programy - komendy). Warto także zapoznać się z artykułami poświęconymi bazom danych, php oraz innym językom programowania. Natomiast więcej na temat algorytmów znaleźć można w Wikipedii.

Oprócz opisanych fundamentów warto zainteresować się także m.in. programowaniem obiektowym, systemami bazodanowymi, sieciami neuronowymi, programowaniem współbieżnym. O wielu z tych zagadnieniach wspominam w podlinkowanych wyżej artykułach.

Telekomunikacja

Oprócz przetwarzania informacji liczne systemy zajmują się jej przekazywaniem. Aby mógł zajść proces komunikacji musi istnieć jakieś medium transmisyjne, które będzie odpowiedzialne za fizyczne przekazanie sygnału zawierającego informację. W telekomunikacji przekaz ten odbywa się zazwyczaj z wykorzystaniem zjawiska przepływu prądu przez przewodnik (tradycyjna łączność kablowa), bądź rozchodzenia się fali elektromagnetycznej (łączność radiowa, światłowody, ...). Bardzo istotne jest dopasowanie parametrów medium transmisyjnego, urządzeń nadawczych i odbiorczych do sygnału który zamierzamy transmitować, na przykład w przypadku kabli jest to częstotliwość którą są one w stanie przenosić bez zakłóceń (głównie ona odpowiada za szybkość transmisji i najczęściej jest rzędu kilkuset MHz) oraz impedancja (wyrażana w omach, sygnały które transmitujemy są sygnałami zmiennymi dlatego jest ona ważnym parametrem przewodu ...). Jednak pomimo to zawsze należy mieć świadomość, że to tylko kabel, który przewodzi elektrony i niezależnie od parametrów jakoś będzie to robił ... .

W tradycyjnych systemach telekomunikacyjnych sygnał był bezpośrednio informacją, a jego dotarcie do odbiornika oznaczało że informacja jest przeznaczona dla niego (telefonia) bądź dla każdego (radio, telewizja - systemy rozgłoszeniowe). Obecnie coraz większą rolę odgrywają komutowane sieci pakietowe, gdzie informacja nie jest tak ściśle związana z sygnałem. Dla przykładu w telefonii zrealizowanie każdego połączenia wymagało zestawienia go - odpowiedniego przełączenia styków w centralach (komutacji łączy); w Internecie informacja podążać może różnymi drogami (nie jest tworzona droga specjalnie dla danego połączenia) i na podstawie adresu odnaleźć host docelowy (mamy tu doczynienia z komutacją pakietów). W sieciach pakietowych właściwa informacja (jeżeli jest zbyt długa) dzielona jest na części, do każdej części dodawane są informacje kontrolne - nagłówek (zawierający m.in. adres odbiorcy). Tak utworzone pakiety podróżują niezależnie od siebie przez sieć do odbiorcy (bez zestawiania w tym celu specjalnego fizycznego połączenia).

Bardzo istotnym elementem jest adresacja (jest ona niezbędna aby informacja mogła być kierowana do konkretnego hosta - inaczej mamy sieć rozgłoszeniowa (np. telewizja)): każdy host w sieci musi posiadać unikalny (w ramach tej sieci) adres (chyba zawsze o ustalonej długości - nie jestem w stanie zagwarantować ze ktoś, gdzieś nie stworzył protokołu pakietowego z adresami zmiennej długości), często wydziela się również podsieci, posiadają one swój adres (na ogół jest to wspólna część adresu wszystkich hostów podsieci dopełniona zerami), adres określający ile adresów jest w podsieci () oraz adres na który reagować powinien każdy host w tej podsieci (adres rozgłoszeniowy). W przypadku chyba najpopularniejszych obecnie sieci IP wielość podcieci była dawniej determinowana przez klasy numerów IP, natomiast współcześnie określana jest przez maskę podsieci, która po wykonaniu binarnego AND z dowolnym adresem hosta tej sieci da adres sieci. W związku z tym iż binarnie maska składa się z nieprzerwanego ciągu jedynek oraz nieprzerwanego ciągu zer, jest ona często zapisywana jest w postaci prefixowej, czyli liczby bitów mających wartość jeden. W sieciach IP (oprócz samego Internet Protocol - odpowiedzialnego za adresację itp) należy także wspomnieć o protokołach takich jak: ICMP - zapewniającym przesył komunikatów technicznych, oraz UDP czy TCP - umożliwiających przesył danych poprzez sieć IP (odpowiedzialne one są m.in. za adresację usług na danym hoście poprzez numery portów, TCP czuwa także nad poprawnością transferu - kontroluje czy dane dotarły i czy dotarły nieuszkodzone). Protokół IP oprócz najbardziej dla niego typowej transmisji jeden do jednego (unicast) umożliwia transmisję rozgłoszeniową (broadcast - jeden do wszystkich w sieci) i multicast (jeden do wielu).

Oczywiście sieci teleinformatyczne to nie tylko IP - należy koniecznie wspomnieć o protokołach warstw wyższych - takich jak HTTP (sieć Web), SMTP (e-mail), ... - zapewniających realizację typowych usług sieciowych oraz protokołach związanych z konkretną realizacją sprzętową sieci - np. ethernet, czyli najpopularniejszy standard sieci lokalnych (LAN). Ze sprzętową realizacją sieci wiąże się m.in. pojęcie takie jak topologia sieci - czyli zasada łączenia hostów (gwiazda - wszystkie do jednego punktu, drzewo - wiele gwiazd łączonych w gwiazdy, magistrala - od jednej linii każdy host, ...). Najpopularniejszą obecnie topologią (przekładającą się także na inne instalacje - np. elektryczną, gdzie jednak dalej istotna jest magistrala) jest topologia gwiazdy, gdzie mamy doczynienia z punktami dystrybucyjnymi (w profesjonalnym podejściu realizowanymi w oparciu o szafy krosownicze i specjalnie przeznaczone do tego celu pomieszczenia) od których odchodzą trasy kablowe. Przy realizacji systemów telekomunikacyjnych (i innych teleinformatycznych oraz elektrycznych) warto pamiętać o stosownej dokumentacji tak przebiegu tras kablowych, jak i samej instalacji oraz punktów dystrybucyjnych a także przejrzystości i opisaniu samych instalacji. Zaznaczyć też należy różnice między systemami dedykowanymi (np. routery sprzętowe) a systemami ogólnego przeznaczenia używanymi w takich zastosowaniach - te drugie są na ogół dużo bardziej elastyczne, natomiast dedykowane są bardziej wydajne i często droższe ... osobiście bardziej cenię elastyczność. Warto tutaj także zwrócić uwagę na "nie informatyczne" bezpieczeństwo takich instalacji obejmujące takie zagadnienia jak zabezpieczenia przeciw pożarowe, przeciw przepięciowe oraz monitoring i kontrolę dostępu do pomieszczeń przeznaczonych na wspomniane instalacje. Więcej o fizycznych aspektach budowy sieci można w artykule systemy oraz instalacje kablowe.

Oprogramowanie

Oczywiście aby się zajmować, bawić komputerami, elektroniką, sieciami telekomunikacyjnymi konieczna jest wiedza na temat samej obsługi komputerów - zwłaszcza systemów unix'owatych. W tych systemach poszczególne osoby pracują na własnych kontach (identyfikowanych loginem i chronionych hasłem), szczególnym przypadkiem jest konto super użytkownika "root" - służy ono do czynności administracyjnych i umożliwia zrobienie z systemem (niemalże) wszystkiego. Standardowo stosowany jest też znany z adresów e-mail zapis z małpą - umożliwiający globalną identyfikację użytkownika - user@host.domena. Z użytkownikami związane są także uprawnienia - definiowane (w podstawowym wariancie) niezależnie dla właściciela, grupy i wszystkich innych w dziedzinach odczytu, zapisu i wykonania.

Powłoka tekstowa oparta jest na poleceniach (będących najczęściej osobnymi programami) do których przekazywane są opcje i argumenty (odzielane są one - zarówno od siebie jak i od nazwy programu spacjami), opcje na ogół zaczynają się od myślnika (jednoliterowe) bądź dwóch myślników (wieloliterowe), ale są od tego wyjątki. Informacje o prawie każdym programie, większości plików konfiguracyjnych oraz funkcjach biblioteki standardowej C można znaleźć w podręczniku systemowym (polecenie man). Za najważniejsze komendy unixa należałoby uznać: cd, mkdir, ls, ln, cp, mv, rm, vi (tu parę najistotniejszych komendy tego edytora: [Esc] :w :q :wq :q! i dd yy p), tar, gzip, grep, less, more, wc, cut, find, grep, du, man, info; trzeba także wspomnieć o przekierowywaniu standardowego wyjścia programu do innego programu (pomiędzy poleceniami |), do pliku (> nazwa_pliku - w trybie nadpisania lub >> nazwa_pliku w trybie dopisywania) oraz pobieraniu standardowego wejścia z pliku (< nazwa_pliku). Powłoka umożliwia także pracę w trybie wsadowym (nie interaktywnym) - jest to już wspomniany język skryptowy bash/sh.

Systemy unixowe charakteryzują się także w miarę jednolitą strukturą katalogów, zaczynających się od katalogu głównego / w którym znaleźć można m.in.: bin - programy, etc - pliki konfiguracyjne, lib - biblioteki, tmp - pliki tymczasowe, home - katalogi domowe, var/log - logi systemowe (czyli informacje o tym co się działo), ... . Jak wspomniałem pliki konfiguracyjne umieszczone są w etc (lub katalogach domowych użytkowników), są to prawie zawsze pliki tekstowe, jednak (prawie) każdy program ma swój format, jedyną w miarę uniwersalną rzeczą jest to iż linia zaczynająca się od # (na ogół) jest traktowana jako komentarz. Więcej o unixach (głównie Linuxie, a konkretniej Debianie) w artykułach: podstawy POSIX (w tym podstawowe komendy), porady konfiguracyjne, oprogramowanie użytkowe oraz multimedia i (La)TeX; a także w już wspomnianych artykułach dotyczących programowania i zagadnień sieciowych.

Podsumowanie

Jak już po części wspomniałem (przy językach wyższego poziomu) współczesna technika umożliwia korzystanie z komputera, a nawet tworzenie oprogramowania bez znajomości niskopoziomowych mechanizmów działania tych urządzeń. Wydaje się jednak, że aby zrozumieć współczesną technikę, być dobrym programistą, administratorem, ... poznanie tych mechanizmów wydaje się niezbędne i jest też niewątpliwie bardzo przydatne gdy chcemy zrobić coś "bliżej sprzętu" ... .
Przy robieniu czegokolwiek warto pamiętać o standardach i normach technicznych, one naprawdę są (w zdecydowanej większości) tworzone po to aby ułatwić wszystkim życie (jakby wyglądał Internet gdyby każdy portal używał własnych standardów e-mail i www ...). Należy też tak tworzyć, aby to co zrobiliśmy, napisaliśmy było przejrzyste i zrozumiałe dla innych oraz (za parę miesięcy czy lat) dla nas samych - aby kod był czytelny, dobrze skomentowany, a cały projekt posiadał dobrą i szczegółową dokumentację (wiem że często się nie chce, ale naprawdę warto ...). Należy się także wystrzegać rozwiązań przekombinowanych, stanowiących przerost formy nad treścią (trzymać się reguły KISS). Warto także zwrócić uwagę, że zanim zaczniemy coś pisać warto poszukać czy nie ma czegoś o podobnej funkcji, bądź nie ma jakiś bibliotek, które zrobią za nas połowę pracy - nie zawsze warto odkrywać Amerykę na nowo ;-) .

Przy administracji różnorakimi systemami ważną kwestią jest ich bezpieczeństwo, jednak należy pamiętać, że system ten ma też do czegoś służyć poza tworzeniem fortecy dla samej sztuki ... . Uważam iż ważniejsze od tworzenia kolejnych super zabezpieczeń jest zastanowienie się nad tym jak bardzo strategiczne znaczenie ma ten system, jakie dane ma przechowywać, przetwarzać i dostosowanie zabezpieczeń do roli ochranianego systemu (podobne podejście stosuje się powszechnie przy tworzeniu systemów alarmowych). Niekiedy być może lepszym rozwiązaniem jest opracowanie procedury szybkiego odtworzenia systemu i danych niż stworzenie systemu zabezpieczeń, które uniemożliwią wygodne korzystanie z danego systemu (podobnie jak na ogół nie wydaje się sensowne szyfrowanie wiadomości e-mail typu: "wrócę na obiad o 16:30" ...).

W ten sposób doszliśmy do końca tego opowiadania będącego wstępem teoretycznym do zagadnień elektroniki, komputerów, telekomunikacji, ... (przedstawiającego kilka ważnych pojęć i terminów z zakresu podstaw tych dziedzin oraz trochę bardziej filozoficzne podejście do ich zrozumienia). Wszystkich czytelników zachęcam do zapoznania się z dolinkowanymi materiałami, innymi materiałami w moim serwisie (głównie o charakterze praktycznym, z ciekawostkami i niezbędnymi informacjami teoretycznymi) i w Sieci (0.0.0.0/0 ;-) ) oraz przede wszystkim do dużej porcji obycia z technologią, praktyki - bo to właśnie ona w tym wszystkim jest najistotniejsza (a to niestety wymaga dużo czasu ...). Dobrym pomysłem wydaje się znalezienie pomysłu na ciekawy, interdyscyplinarny (programowanie, elektronika, unix, tcp/ip, ...) projekt i rozpoczęcie jego realizacji (na którą składałoby się na przykład zbudowanie niewielkiej sieci wraz z konfiguracją serwera, zbudowanie modułu elektronicznego z mikrokontrolerem, oprogramowanie tego wszystkiego - w C i nie tylko ...). To też niestety nie jest proste - na ogół trudno znaleźć coś ciekawego, nowego do zrobienia (gdyż większość programów napisano, układów zrobiono, itd.), dlatego też wspomniane bawienie się technologią, zajmowanie się przedstawioną mieszanką informatyki, elektroniki i telekomunikacji (możnaby to określić terminem "komputerologia", gdyż współcześnie dziedziny te są bardzo silnie oparte na technologiach komputerowych, a lepszego terminu chyba nie ma ...) traktować można jako pewien styl, ale trudno jako zwykłe hobby.

Ważne jest aby robić to co się lubi - zawsze lepiej być dobrym sieciowcem z powołania niż kiepskim koderem (i na odwrót). Dokładny kierunek kształcenia nie jest bardzo istotny - lepiej żeby nie był zbyt odległy, ale i tak masy rzeczy trzeba się uczyć samemu. Warto mieć szersze spojrzenie na branże - to że specjalizujesz się np. w sieciach nie oznacza iż podstawy programowania (zarówno web-owego jak i systemowego) czy też elektroniki i innych pokrewnych zagadnień są zbędne - wręcz przeciwnie mogą być dodatkowym atutem (nie tylko w CV ale i w samej pracy). To czego się nauczysz jest Twoje, ale zdobytą wiedzę, doświadczenie warto notować (gdyż zdarza się ponownie odkrywać Amerykę i ze zdziwieniem stwierdzać "to ja się tym zajmowałem 10 lat temu???").


Słowa kluczowe:
bawienie się technologią - haker - eksperymentowanie - wiedza ogólna - informacja - cyfrowa - bit - zero - jeden - system dwójkowy - logika dwuwartościowa - elektronika - różnica potencjałów - GND - tranzystor - bramki logiczne - układy programowalne - komputer - program - sztuczna inteligencja - iteracja - rekurencja - algorytm - asembler - języki wyższego poziomu - język C - skryptowe języki programowania - telekomunikacja - sieci pakietowe - podsieci - maska podsieci - IP - UDP - TCP - topologia sieci - gwiazda - magistrala - root - man - strukturą katalogów - logi - pliki konfiguracyjne - niskopoziomowe mechanizmy - dokumentacja - biblioteki - bezpieczeństwo - praktyka - "komputerologia".
Dla zainteresowanych podam iż zbiór ten został uzyskany w wyniku polecenia: awk 'BEGIN {RS="<strong>"; FS="</"} NR!=1 {printf("%s - ", $1)} END {print ""}' i ręcznej edycji form gramatycznych (niestety język polski jest mało przyjazny automatycznemu przetwarzaniu).



Copyright (c) 1999-2015, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This text/program is free document/software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/Introduction) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: '2015-10-10 11:33:42 (UTC)' (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).