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
    1. ack - "lepszy niż grep" napisany w Perlu
    2. ag - The Silver Searcher. Narzędzie do wyszukiwania kodu podobne do ack, z naciskiem na szybkość autorstwa Geoffa Greera i 204 współpracowników
    3. awk lub gawk (gnu awk)
    4. bc
    5. cut
    6. dc
    7. du
    8. diff
    9. file
    10. find
    11. grep
    12. hexdump
    13. ldconfig
    14. ldd
    15. locate
    16. ls
    17. ltrace - a library call tracer
    18. objdump
    19. od = octal dump
    20. patch
    21. readelf
    22. sed
    23. ssh
    24. strings
    25. time
    26. wc
  2. C : CPU, GPU, obliczenia numeryczne, grafika, ...
  3. C++
  4. D
  5. Erlang
  6. Fortran
  7. Go
  8. Haskell
  9. Icon
  10. Java
  11. JavaScript
  12. Julia
  13. Lisp - Common Lisp, Scheme, Clojure, Elisp, ...
  14. Lua
  15. OCaml
  16. Pascal
  17. Perl
  18. PHP
  19. PostScript
  20. Prolog
  21. Python
  22. Ruby
  23. Rust
  24. swift
  25. 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
      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
  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. WebGl
    5. WebCl
    6. ImageMagic
    7. OpenCV C++ / Python
    8. 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):
    1. ręcznie wpisana ścieżka [1]
    2. pkg-config
    3. zależności (ang. dependencies)
  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]
  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