{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "1cb64ccb",
   "metadata": {},
   "source": [
    "# Entwicklungsumgebungen\n",
    "\n",
    "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. \n",
    "\n",
    "Für langfristiges Arbeiten empfiehlt sich eine eigene Installation. \n",
    "\n",
    "\n",
    "## Installation auf eigenem Rechner (Linux/MacOS/MS Windows)\n",
    "\n",
    "1.  Julia mit dem Installations- und Update-Manager **juliaup** installieren:  <https://github.com/JuliaLang/juliaup/>\n",
    "2.  als Editor/IDE **Visual Studio Code** installieren: <https://code.visualstudio.com/>\n",
    "3.  im VS Code Editor die **Julia language extension** installieren: <https://www.julia-vscode.org/docs/stable/gettingstarted/>\n",
    "\n",
    "Einstieg:\n",
    "\n",
    "- In VS Code eine neue Datei mit der Endung `.jl` anlegen\n",
    "- Julia-Code schreiben\n",
    "- {{< kbd Shift-Enter >}} oder {{< kbd Ctrl-Enter >}} am Ende einer Anweisung oder eines Blocks startet  ein Julia-REPL, Code wird ins REPL kopiert und ausgeführt \n",
    "- [Tastenbelegungen für VS Code](https://code.visualstudio.com/docs/getstarted/keybindings#_keyboard-shortcuts-reference)\n",
    "und [Julia in VS Code](https://www.julia-vscode.org/docs/stable/userguide/keybindings/)\n",
    "\n",
    "\n",
    "\n",
    "## Arbeiten auf dem  [Jupyterhub-Webserver](https://misun103.mathematik.uni-leipzig.de/)\n",
    "\n",
    "### Jupyterhub & Jupyter\n",
    "\n",
    "- [Jupyterhub](https://de.wikipedia.org/wiki/Project_Jupyter) ist ein Multi-User-Server für Jupyter.\n",
    "- Jupyter ist eine web-basierte interaktive Programmierumgebung, die\n",
    "- ursprünglich in und für Python geschrieben, inzwischen eine\n",
    "    Vielzahl von Programmiersprachen nutzen kann.\n",
    "- In Jupyter bearbeitet man sogenannte *notebooks*. Das sind strukturiere Textdateien (JSON), erkennbar an der Dateiendung \n",
    "    `*.ipynb`.\n",
    "\n",
    "Unser Jupyterhub-Server: <https://misun103.mathematik.uni-leipzig.de/>\n",
    "\n",
    "Nach dem Einloggen in Jupyterhub erscheint ein Dateimanager:\n",
    "\n",
    "![Jupyterhub Dateimanager](../images/notebook001.png)\n",
    "\n",
    "Mit diesem kann man:\n",
    "\n",
    "-  vorhandene *notebooks* öffnen,\n",
    "-  neue *notebooks* anlegen,\n",
    "-  Dateien, z.B. *notebooks*, vom lokalen Rechner hochladen,\n",
    "-  die Sitzung mit `Logout` beenden (bitte nicht vergessen!). \n",
    "\n",
    "### Jupyter notebooks\n",
    "\n",
    "![Jupyter Notebook](../images/notebook003.png)\n",
    "\n",
    "\n",
    "*Notebooks* bestehen aus Zellen. Zellen können \n",
    "\n",
    "- Code oder \n",
    "- Text/Dokumentation (Markdown) \n",
    "\n",
    "enthalten. In  Textzellen können mit die Auszeichnungssprache [Markdown](https://de.wikipedia.org/wiki/Markdown) zur Formatierung und LaTeX für mathematische Gleichungen verwendet werden.  \n",
    "\n",
    "Es sei empfohlen, die Punkte `User Interface Tour` und `Keyboard Shortcuts` im `Help`-Menü anzuschauen. Die Zelle, die man gerade bearbeitet, kann im `command mode` oder `edit mode` sein. \n",
    "\n",
    "\n",
    "\n",
    "```{html}\n",
    "<table>\n",
    "    <caption>Einige Kommandos</caption>\n",
    "    <thead>\n",
    "        <tr>\n",
    "            <th></th><th>command mode</th><th>edit mode</th>\n",
    "        </tr>\n",
    "    </thead>\n",
    "    <tbody>\n",
    "        <tr>    \n",
    "            <td>Mode aktivieren</td><td>ESC</td>\n",
    "        </tr>\n",
    "    </tbody>    \n",
    "</table>\n",
    "```\n",
    "\n",
    "\n",
    "\n",
    "|        | *command mode* | *edit mode* |\n",
    "|:-------|:---------------:|:-----------:|\n",
    "| Mode aktivieren | `ESC`  | Doppelklick oder `Enter` in Zelle |\n",
    "| neue Zelle | `b`    |  `Alt-Enter` |\n",
    "| Zelle löschen | `dd` | |\n",
    "| Notebook speichern | `s` | `Ctrl-s` |\n",
    "\n",
    "\n",
    "\n",
    "-   Notebook speichern:\n",
    "\n",
    "    -   `Ctrl-s` in Edit Mode\n",
    "    -   `s` in Command mode\n",
    "    -   `Menu -> File -> Save & Checkpoint`\n",
    "    -   `Menu -> File -> Rename`: Umbenennen (falls es noch\n",
    "        \\\"Untitled1\\\" heißt) `<br>`{=html}`<br>`{=html}\n",
    "\n",
    "-   Notebook schließen:\n",
    "\n",
    "    -   `Menu -> File -> Close & Halt` `<br>`{=html}`<br>`{=html}\n",
    "\n",
    "-   Ausführen von Julia:\n",
    "\n",
    "    -   `Ctrl-Enter`: Run cell\n",
    "    -   `Shift-Enter`: Run cell, move to next cell\n",
    "    -   `Alt-Enter`: run cell, insert new cell below\n",
    "\n",
    "\n",
    "\n",
    "bla backslash\n",
    "\n",
    "![](../images/notebook002.png)\n",
    "\n",
    "bla backslash\n",
    "\n",
    "\n",
    "------------------------------------------------------------------------\n",
    "\n",
    "Wenn eine Zelle \\\"arbeitet\\\", wird ihre Zellen-Nummer zu einem `*` und\n",
    "die `kernel busy`-Anzeige (Voller schwarzer Punkt oben rechts neben der\n",
    "Julia-Version) erscheint. Falls das zu lange dauert (ein *infinite loop*\n",
    "ist schnell programmiert), dann\n",
    "\n",
    "-   `Menu -> Kernel -> Interrupt` anklicken; falls das wirkungslos ist,\n",
    "-   `Menu -> Kernel -> Restart` anklicken.\n",
    "\n",
    "Danach müssen alle Zellen, die weiterhin benötigte Definitionen,\n",
    "`using`-Anweisungen etc enthalten, wieder ausgeführt werden!\n",
    "\n",
    "------------------------------------------------------------------------\n",
    "\n",
    "**Am Ende der Arbeit bitte immer:**\n",
    "\n",
    "-   `Menu -> File -> Save & Checkpoint`\n",
    "-   `Menu -> File -> Close & Halt`\n",
    "-   `Logout`\n",
    ":::\n",
    "\n",
    "::: {#73820119 .cell .markdown}\n",
    "#### Markdown-Zellen\n",
    "\n",
    "neben den üblichen Markdown-Elementen können auch diese auch\n",
    "`HTML`-Anweisungen und Mathematische Formeln in LaTeX-Form enthalten.\n",
    "LaTeX-Formeln werden in `$...$` oder `$$...$$` (Display-Form)\n",
    "eingeschlossen.\n",
    ":::\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Julia 1.8.5",
   "language": "julia",
   "name": "julia-1.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
