# Entwicklungsumgebungen Für diesen Kurs werden wir die webbasierte Entwicklungsumgebung [Jupyterhub](https://de.wikipedia.org/wiki/Project_Jupyter) verwenden. Sie steht allen Teilnehmerïnnen für die Dauer des Kurses zur Verfügung. Für langfristiges Arbeiten empfiehlt sich eine eigene Installation. ## Installation auf eigenem Rechner (Linux/MacOS/MS Windows) 1. Julia mit dem Installations- und Update-Manager **juliaup** installieren: 2. als Editor/IDE **Visual Studio Code** installieren: 3. im VS Code Editor die **Julia language extension** installieren: Einstieg: - In VS Code eine neue Datei mit der Endung `.jl` anlegen - Julia-Code schreiben - `Shift-Enter` oder `Ctrl-Enter` am Ende einer Anweisung oder eines Blocks startet eine Julia-REPL, Code wird in die REPL kopiert und ausgeführt - [Tastenbelegungen für VS Code](https://code.visualstudio.com/docs/getstarted/keybindings#_keyboard-shortcuts-reference) und [für Julia in VS Code](https://www.julia-vscode.org/docs/stable/userguide/keybindings/) ### Die Julia-REPL Wenn man Julia direkt startet, wird die [Julia-REPL](https://docs.julialang.org/en/v1/stdlib/REPL/) (*read-eval-print* Schleife) gestartet, in der man interaktiv mit Julia arbeiten kann. ```default $ julia _ _ _ _(_)_ | Documentation: https://docs.julialang.org (_) | (_) (_) | _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 1.10.1 (2024-02-13) _/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release |__/ | julia> ``` ## Arbeiten auf dem [Jupyterhub-Webserver](https://misun103.mathematik.uni-leipzig.de/) ### Jupyterhub & Jupyter - [Jupyterhub](https://de.wikipedia.org/wiki/Project_Jupyter) ist ein Multi-User-Server für Jupyter. - Jupyter ist eine web-basierte interaktive Programmierumgebung, die - ursprünglich in und für Python geschrieben, inzwischen eine Vielzahl von Programmiersprachen nutzen kann. - In Jupyter bearbeitet man sogenannte *notebooks*. Das sind strukturiere Textdateien (JSON), erkennbar an der Dateiendung `*.ipynb`. Unser Jupyterhub-Server: Nach dem Einloggen in Jupyterhub erscheint ein Dateimanager: ::: {.content-visible when-format="html"} ![](../images/notebook001.png) ::: ::: {.content-visible when-format="pdf"} ![Jupyterhub Dateimanager](../images/notebook001.png){width=50%} ::: Mit diesem kann man: - vorhandene *notebooks* öffnen, - neue *notebooks* anlegen, - Dateien, z.B. *notebooks*, vom lokalen Rechner hochladen, - die Sitzung mit `Logout` beenden (bitte nicht vergessen!). ### Jupyter notebooks ::: {.content-visible when-format="html"} ![](../images/notebook003.png) ::: ::: {.content-visible when-format="pdf"} ![Jupyter Notebook](../images/notebook003.png){width=50%} ::: *Notebooks* bestehen aus Zellen. Zellen können - Code oder - Text/Dokumentation (Markdown) enthalten. In Textzellen kann die Auszeichnungssprache [Markdown](https://de.wikipedia.org/wiki/Markdown) zur Formatierung und LaTeX für mathematische Gleichungen verwendet werden. ::: {.callout-tip } Bitte die Punkte `User Interface Tour` und `Keyboard Shortcuts` im `Help`-Menü anschauen! ::: Die Zelle, die man gerade bearbeitet, kann im `command mode` oder `edit mode` sein. :::{.narrow} | | *Command mode* | *Edit mode* | |:-------|:---------------:|:-----------:| | Mode aktivieren | `ESC` | Doppelklick oder `Enter` in Zelle | | neue Zelle | `b` | `Alt-Enter` | | Zelle löschen | `dd` | | | Notebook speichern | `s` | `Ctrl-s` | | Notebook umbenennen | `Menu -> File -> Rename` | `Menu -> File -> Rename` | | Notebook schließen | `Menu -> File -> Close & Halt` | `Menu -> File -> Close & Halt` | | *run cell* | `Ctrl-Enter` | `Ctrl-Enter` | | *run cell, move to next cell* | `Shift-Enter` | `Shift-Enter` | | *run cell, insert new cell below* | `Alt-Enter` | `Alt-Enter` | : {.striped} ::: ::: {.content-visible when-format="html"} ![](../images/notebook002.png) ::: ::: {.content-visible when-format="pdf"} ![Julia arbeitet...](../images/notebook002.png){width=50%} ::: Wenn eine Zelle \"arbeitet\", wird ihre Zellen-Nummer zu einem `*` und die `kernel busy`-Anzeige (Voller schwarzer Punkt oben rechts neben der Julia-Version) erscheint. Falls das zu lange dauert (ein *infinite loop* ist schnell programmiert), dann - `Menu -> Kernel -> Interrupt` anklicken; falls das wirkungslos ist, - `Menu -> Kernel -> Restart` anklicken. ::: {.callout-important } Nach einem `kernel restart` müssen alle Zellen, die weiterhin benötigte Definitionen, `using`-Anweisungen etc enthalten, wieder ausgeführt werden. **Am Ende der Arbeit bitte immer:** - `Menu -> File -> Save & Checkpoint` - `Menu -> File -> Close & Halt` - `Logout` :::