Programowanie w systemie UNIX

Ten podręcznik opisuje podstawy programowania w Linuksie

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. asymptote - The Vector Graphics Language, online: You can even run it in your browser without installing it, using the Asymptote Web Application
  2. BASH
  3. C : CPU, GPU, obliczenia numeryczne, grafika, ...
  4. C++
  5. D
  6. Erlang
  7. Fortran
  8. GNU Data Language (GDL) – otwarta implementacja środowiska do obliczeń i wizualizacji IDL
  9. Go
  10. Haskell
  11. Icon
  12. Java
  13. JavaScript
  14. Julia
  15. 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
  16. Lisp - Common Lisp, Scheme, Clojure, Elisp, ...
  17. Lua
  18. OCaml
  19. Pascal
  20. Perl
  21. PHP
  22. PostScript
  23. Prolog
  24. Python
  25. Ruby
  26. Rust
  27. swift
  28. 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
    3. codepen - online editor for front-end designers and developers
    4. jsbin is a tool for experimenting with web languages. In particular HTML, CSS and JavaScript, but JS Bin also supports other languages too (like Markdown, Jade and Sass).
  5. CAD
    1. implicitcad
  6. 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
    10. Drukowanie grafiki - Jak przygotować plik do druku ?
  7. 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
      2. awk
      3. grep

Budowanie programu Edytuj

  1. planowanie: sformułowanie problemu i opis algorytmu w języku naturalnym = od problemu do programu
  2. Jaki język programowania wybrać ?
  3. Dokumentacja kodu
  4. Formatowanie kodu (ang. indent)
  5. Numery wersji - jak oznaczać nowe wersje programu ?
  6. Kontrola wersji
    1. ręcznie lub łaty i diff
    2. scentralizowane
      1. Subversion
      2. CVS
    3. rozproszone (zdecentralizowane)
      1. Git
      2. Mercurial
  7. 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. Cake ( for C23 )
  8. 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
  9. 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
  10. testowanie
  11. optymalizacja (profilowanie) : Najpierw profiluj, potem optymalizuj !
    1. gprof
  12. instalacja i odinstalowanie ( usuwanie) programów
  13. Praca grupowa
    1. Jak rozwijać gotowe projekty?
    2. Jak zadawać pytania?

Analiza gotowych programówEdytuj

  1. Jak ustalić w jakim języku jest program / kod żródłowy ?

LiteraturaEdytuj

  1. Literatura

Przypisy