Programowanie w systemie UNIX

Ten podręcznik opisuje podstawy programowania w Linuksie

NewTux.svg

WprowadzenieEdytuj

  1. Wstęp
  2. architektura komputera/CPU
  3. dostęp
    1. Konsola - tryb tekstowy
      1. Zdalny dostęp (ang. remote acces): ssh
      2. Przekierowania, łączenie poleceń (potok, polecenia złożone)
    2. tryb graficzny
  4. Pamięć
  5. licencja

Języki programowania i narzędziaEdytuj

  1. BASH
  2. C : CPU, GPU, obliczenia numeryczne, grafika, ...
  3. C++
  4. D
  5. Erlang
  6. Fortran
  7. GNU Data Language (GDL) – otwarta implementacja środowiska do obliczeń i wizualizacji IDL
  8. Go
  9. Haskell
  10. Icon
  11. Java
  12. JavaScript
  13. Julia
  14. Jupyter Notebook - może potocznie odnosić się do dwóch różnych koncepcji, albo aplikacji skierowanej do użytkownika do edycji kodu i tekstu, albo bazowego formatu pliku, który jest interoperacyjny w wielu implementacjach
  15. Lisp - Common Lisp, Scheme, Clojure, Elisp, ...
  16. Lua
  17. OCaml
  18. Pascal
  19. Perl
  20. PHP
  21. PostScript
  22. Prolog
  23. Python
  24. Ruby
  25. Rust
  26. swift
  27. Vala ( and Gtk)

Metody/technologie/specjalistyczne programyEdytuj

  1. Dane
    1. typy
      1. wg możliwości odczytu:
        1. Dane do odczytu maszynowego
        2. Dane do odczytu przez człowieka
        3. Dane do odczytu zarówno przez człowieka jak i przez komputer: XML
      2. wg zawartości
        1. tekstowe
        2. numeryczne (liczbowe)
        3. obrazy
      3. wg ilości i złożoności danych
        1. małe zbiory
        2. średnie zbiory
        3. Big data
    2. Bazy danych
      1. SQL
        1. MySql w PHP
    3. wyszukiwanie danych
      1. OpenSearch ułatwia pozyskiwanie, wyszukiwanie, wizualizację i analizę danych
      2. GraphQL to otwarta specyfikacja elastycznej warstwy API.
  2. Pliki
    1. tekstowe
    2. binarne
  3. Obliczenia
    1. obliczenia symboliczne (CAS) i numeryczne (wektorowe (macierzowe), równoległe)
      1. Programy
        1. Maxima
        2. GNU Octave
        3. PARI/GP
      2. biblioteki
      3. konwersja danych numerycznych do symbolicznych  :
        1. The Inverse Symbolic Calculator (ISC):
    2. Statystyczne
      1. R, czyli języku programowania i środowisku do obliczeń statystycznych i wizualizacji wyników
    3. Obliczenia współbiezne, równoległe i rozproszone
      1. OpenMP
      2. OpenMPI
      3. GPGPU
        1. OpenGl
        2. OpenCl
        3. CUDA
        4. ArrayFire
        5. par4all
        6. Vulkan API
        7. OpenACC
  4. www
    1. Django
    2. PHP
  5. Grafika - komputerowe przetwarzanie obrazów
    1. GIMP
    2. gnuplot
    3. Processing
    4. asymptote - The Vector Graphics Language, online: You can even run it in your browser without installing it, using the Asymptote Web Application
    5. WebGl
    6. WebCl
    7. ImageMagic
    8. OpenCV C++ / Python
    9. Dane tekstowe w obrazach, metadata
  6. tekst: obsługa biura / przetwarzanie tekstów / publikacje
    1. Pliki tekstowe, kodowanie i formatowanie
    2. Pliki mieszane : tekst i obraz ( pdf, ps)
    3. WYSIWYG (ang. What You See Is What You Get – widzisz to, co dostajesz)
      1. LibreOffice, OpenOffice.org
      2. Emacs
      3. Vim
      4. Gedit
    4. języki znaczników
      1. TeX
        1. LateX
      2. markdown format
    5. Przetwarzanie tekstu w językach ogólnego przeznaczenia
      1. Wyrażenia regularne

Budowanie programu Edytuj

  1. planowanie: sformułowanie problemu i opis algorytmu w języku naturalnym
  2. Dokumentacja kodu
  3. Formatowanie kodu (ang. indent)
  4. Numery wersji - jak oznaczać nowe wersje programu ?
  5. Kontrola wersji
    1. ręcznie lub łaty i diff
    2. scentralizowane
      1. Subversion
      2. CVS
    3. rozproszone (zdecentralizowane)
      1. Git
      2. Mercurial
  6. Kompilacja, linkowanie, instalacja = budowanie. Jak zbudować program ze źródeł ?
    1. Ręczne (ang. "hand compilation", aka "manual build")
    2. Automatyczne: Narzędzia wspomagające budowę aplikacji
      1. Make = build system
      2. Apache Ant
      3. SCons
      4. Rake - Ruby Make
      5. Flex_i_Bison
      6. Pants, Apache Maven, gradle, sbt
  7. linkowanie (konsolidacja) i zależności (ang. dependencies) i menadżery pakietów
    1. ręcznie wpisana ścieżka [1]
    2. pkg-config
    3. conan The open-source C/C++ package manager
    4. spack -Elastyczny menedżer pakietów obsługujący wiele wersji, konfiguracji, platform i kompilatorów
  8. Odpluskwiane (ang. debugging), testy bezpieczeństwa
    1. z użyciem printf: "printf is the world’s simplest debugger" John L. Miller in Quora
    2. gdb
    3. VAlgrind, memleax
    4. kcachegrind[2]
    5. grafy
      1. Dependency graph
      2. call graph
    6. Statyczna analiza kodu[3]
      1. cppcheck
      2. lint
      3. stack [4]
      4. kint [5]
      5. sparse [6]
      6. Frama-C
  9. testowanie
  10. optymalizacja (profilowanie) : Najpierw profiluj, potem optymalizuj !
    1. gprof
  11. instalacja i odinstalowanie ( usuwanie) programów
  12. Praca grupowa
    1. Jak rozwijać gotowe projekty?
    2. Jak zadawać pytania?

LiteraturaEdytuj

  1. Literatura
  1. Library autotools
  2. [1]
  3. Static Analysis Problem Type Reference
  4. stack - is a static checker that detects unstable code in C/C++ programs
  5. KINT is a tool that uses scalable static analysis to detect integer errors in C programs.
  6. Sparse - a Semantic Parser for C