From 842e43e7719e3330d4146675f56e404a69646fd0 Mon Sep 17 00:00:00 2001 From: Meik Hellmund Date: Sat, 13 May 2023 16:54:43 +0200 Subject: [PATCH] work on ch.5 --- .gitignore | 6 ++ .quartoignore | 2 + Readme.md | 4 ++ chapters/5_TricksHelp.qmd | 132 ++++++-------------------------------- 4 files changed, 33 insertions(+), 111 deletions(-) create mode 100644 .quartoignore diff --git a/.gitignore b/.gitignore index bd7216d..7165ecd 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,9 @@ chapters/*.ipynb _extensions/julia/escfilter.sh _extensions/julia/escfilter2.py _extensions/julia/escfilter3.py +site_libs/ +fonts/atkinson* +fonts/quicksand* +fonts/ubuntu* + +/.luarc.json diff --git a/.quartoignore b/.quartoignore new file mode 100644 index 0000000..1ff620f --- /dev/null +++ b/.quartoignore @@ -0,0 +1,2 @@ +Readme.md +makie.qmd diff --git a/Readme.md b/Readme.md index e69de29..7f4e100 100644 --- a/Readme.md +++ b/Readme.md @@ -0,0 +1,4 @@ + +This 'Quarto Book'https://quarto.org/ about Julia Programming in German is online at https://www.math.uni-leipzig.de/~hellmund/juliabook/ https://www.math.uni-leipzig.de/~hellmund/juliabook/ + +It uses the `julia-color` Quarto extension https://gitea.math.uni-leipzig.de/hellmund/julia-color \ No newline at end of file diff --git a/chapters/5_TricksHelp.qmd b/chapters/5_TricksHelp.qmd index 1ab5cad..570f112 100644 --- a/chapters/5_TricksHelp.qmd +++ b/chapters/5_TricksHelp.qmd @@ -1,4 +1,4 @@ -# Arbeit mit Julia: Hilfe, REPL, Pakete, Introspection +# Arbeit mit Julia: REPL, Pakete, Introspection @sec-tab @@ -72,32 +72,38 @@ In einem Jupyter-Notebook sind die Modi sind als Einzeiler in einer eigenen Inpu ## Der Paketmanager -- Über 9000 Pakete, siehe [https://julialang.org/packages/](https://julialang.org/packages/) -- Bevor sie mit `using Module` verwendet werden können, müssen sie heruntergeladen und installiert werden. -- Dazu dient der _package manager_ `Pkg` -- Man kann ihn auf zwei Arten verwenden: - - als normale Julia-Anweisungen, die auch in einer `.jl`-Programmdatei stehen können: +Wichtiger Teil des _Julia Ecosystems_ sind die zahlreichen Pakete, die Julia erweitern. + +- Einige Pakete sind Teil jeder Julia-Installation und müssen nur mit einer `using Paketname`-Anweisung aktiviert werden. + - Sie bilden die sogenannte _Standard Library_ und dazu gehören + - `LinearAlgebra`, `Statistics`, `SparseArrays`, `Printf`, `Pkg` und andere. +- Über 9000 Pakete sind offiziell registriert, siehe [https://julialang.org/packages/](https://julialang.org/packages/). + - Diese können mit wenigen Tastendrücken heruntergeladen und installiert werden. + - Dazu dient der _package manager_ `Pkg`. + - Man kann ihn auf zwei Arten verwenden: + - als normale Julia-Anweisungen, die auch in einer `.jl`-Programmdatei stehen können: ``` using Pkg - Pkg.add("TollesPaket") + Pkg.add("PaketXY") ``` - - im speziellen pkg-Modus des Julia-REPLs: + - im speziellen pkg-Modus des Julia-REPLs: ``` - ] add TollesPaket + ] add PaketXY ``` - + - Anschließend kann das Paket mit `using PaketXY` verwendet werden. +- Man kann auch Pakete aus anderen Quellen und selbstgeschriebene Pakete installieren. - ### Einige Funktionen des Paketmanagers | Funktion | `pkg` - Mode | Erklärung | -|:------------------------|:----------------------|:----------------------------------------------------------| +|:------------------------|:--------------------------| :-------------------------------------------------------| | `Pkg.add("MyPack")` | `pkg> add MyPack` | add `MyPack.jl` to current environment | | `Pkg.rm("MyPack")` | `pkg> remove MyPack` | remove `MyPack.jl` from current environment | | `Pkg.update()` | `pkg> update` | update packages in current environment | | `Pkg.activate("mydir")` | `pkg> activate mydir` | activate directory as current environment | | `Pkg.status()` | `pkg> status` | list packages | +| `Pkg.instantiate()` | `pg> instantiate` | install all packages according to `Project.toml` | ### Installierte Pakete und Environments @@ -142,113 +148,17 @@ Danach können Sie mit `add` im Pkg-Modus auch Pakete installieren: ```{julia} #| eval: false -] add TollesPaket +] add PaketXY ``` -Achtung! Das kann dauern! Viele Pakete haben komplexe Abhängigkeiten und lösen die Installation von weiteren Paketen aus. Viele Pakete werden beim Installieren vorkompiliert. Im REPL sieht man den Installationsfortschritt, im Jupyter-Notebook nicht. - - -## Eingebaute Hilfe und Informationen -Mit `?` und der `Tab`-Taste kommt man oft weiter. -## Hilfe und praktische Tipps - ----- +Achtung! Das kann dauern! Viele Pakete haben komplexe Abhängigkeiten und lösen die Installation von weiteren Paketen aus. Viele Pakete werden beim Installieren vorkompiliert. Im REPL sieht man den Installationsfortschritt, im Jupyter-Notebook leider nicht. -### weitere Hilfe: `@which`, `fieldnames()`, `methods()`, `names()`, `pwd()` -```{julia} -# Die Zuordnung zu einem Modul zeigt @which an: -@which(sqrt) -``` - - -```{julia} -# Die Komponenten einer struct oder eines anderen zusammengesetzten Typs: - -fieldnames(Rational) -``` - - -```{julia} -fieldnames(Complex) -``` - - -```{julia} -# alle Methoden einer Funktion - -methods(sqrt) -``` - - -```{julia} -# alle Methoden einer Funktion bei bestimmten Argumenttypen. Die Argumenttypen müssen als Tupel angegeben werden - -methods(sqrt, (Number,)) # Komma nötig für 1-elementiges Tupel -``` - - -```{julia} -# für einen Typ gibt methods() alle Konstruktoren aus - -methods(Int64) -``` - - -```{julia} -# names(Module) gibt alle von einem Modul exportierte Namen aus. -# genau wie auch -# -# ?Module -# -# funktioniert es erst, wenn das Modul mit 'using Module' geladen ist. -# Oft ist es besser, wenn die using-Anweisung in einer eigenen Zelle steht. - -using Plots - -``` - - -```{julia} -names(Plots) -``` - - -```{julia} -# Julia kürzt den interaktiven Output. -# ein explizites print() zeigt alles: - -print(names(Plots)) -``` - - -```{julia} -# eine andere Möglichkeit der Ausgabe mit Überlänge in Jupyter - -show(stdout, MIME("text/plain"), names(Plots)) -``` - - -```{julia} -# pwd() "print working directory" zeigt, in welchem Verzeichnis Julia gerade operiert. -# -# Wichtig für die Ein/Ausgabe mit Dateien, z.B. include() - -pwd() -``` - - -```{julia} -include("Jupyter.jl") # Datei mit Julia-Code einlesen und abarbeiten -``` - - - -## Der Julia JIT _(just in time)_ Compiler +## Der Julia JIT _(just in time)_ Compiler: Introspection Julia baut auf die Werkzeuge des _LLVM Compiler Infrastructure Projects_ auf.