Programowanie w systemie UNIX

Ten podręcznik opisuje podstawy programowania w Linuksie

Wprowadzenie

edytuj
  1. Wstęp
  2. architektura komputera/CPU
  3. Karta graficzna, GPU
  4. 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
  5. Pamięć
  6. licencja

Języki programowania i narzędzia

edytuj
  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. R (język programowania)
  26. Ruby
  27. Rust
  28. swift
  29. Vala ( and Gtk)

Metody/technologie/specjalistyczne programy/zastosowania

edytuj
  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. Sage
          1. sage online : interactive fractals
        4. 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. WebGPU
        2. OpenGl
        3. OpenCl
        4. CUDA
        5. ArrayFire
        6. par4all
        7. Vulkan API
        8. OpenACC
        9. oneAPI (compute acceleration)
  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. Dane tekstowe w obrazach, metadata
    2. Drukowanie grafiki - Jak przygotować plik do druku ?
    3. color menagment
    4. Programy graficzne
      1. GIMP
      2. gnuplot
      3. Processing
      4. Nvidia unity engine
      5. Context Free is a program that generates images from written instructions called a grammar grafika żółwia
      6. Skia: The 2D Graphics Library
      7. asymptote - The Vector Graphics Language, online: You can even run it in your browser without installing it, using the Asymptote Web Application
      8. WebGl
      9. WebCl
      10. ImageMagic
      11. OpenImageIO - C++, Python, CLI
      12. OpenCV C++ / Python
  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
  8. komunikacja
    1. gnutls = ( GNU Transport Layer Security library)
  9. Algorytmy
    1. Kody źródłowe
  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, cmake, premake
      2. Apache Ant
      3. SCons
      4. bazel - projekt open source do tworzenia i testowania wielojęzycznych i wieloplatformowych projektów
      5. Rake - Ruby Make
      6. ninja (build-system) i gn - meta system, który generuje pliki kompilacji dla Ninja ( meta-build system)
      7. Flex_i_Bison
      8. Pants, Apache Maven, gradle, sbt
      9. 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. vcpkg C++ Library Manager for Windows, Linux, and MacOS
    5. 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ów

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

Literatura

edytuj
  1. Literatura

Przypisy