Commit 80c02043 authored by TUHH GitLab Administrator (Andreas Böttger)'s avatar TUHH GitLab Administrator (Andreas Böttger)
Browse files

Merge branch 'master' into 'development'

Master

See merge request !6
parents d93d1345 b34d6f9e
variables: image: docker.rz.tu-harburg.de:5000/docker/gitbook:node
REVIEW_IMAGE: docker.rz.tu-harburg.de:5000/docker/nginx--review-apps:latest
BUILD_IMAGE: docker.rz.tu-harburg.de:5000/docker/gitbook-itbh-glr:latest
DOCKER_CONTAINER_NAME: ${CI_PROJECT_PATH_SLUG}-${CI_ENVIRONMENT_SLUG}
before_script:
- sudo docker pull ${BUILD_IMAGE}
- sudo docker pull ${REVIEW_IMAGE}
stages: stages:
- setup
- test
- build
- review - review
- deploy - deploy
- clean
review:pdf: - linkchecker
stage: review
only: before_script:
- branches # https://docs.gitlab.com/ee/ci/ssh_keys/README.html
when: manual - mkdir -p ~/.ssh
retry: 2 - chmod 700 ~/.ssh
tags:
- development setup:
script: stage: setup
- pwd cache:
- mkdir -p book_pdf; sudo docker run --rm -v $(pwd):/source ${BUILD_IMAGE} pdf ./ ./book_pdf/book.pdf key: "$CI_COMMIT_REF_SLUG"
artifacts:
name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}"
paths: paths:
- book_pdf - node_modules
except:
- master
review:start:
stage: review
retry: 2
script: script:
- pwd - gitbook install
- sudo docker run --detach --rm --env VIRTUAL_HOST=${CI_ENVIRONMENT_SLUG} --name ${DOCKER_CONTAINER_NAME} ${REVIEW_IMAGE} || true
- sudo docker run --rm -v $(pwd):/source ${BUILD_IMAGE} install
- sudo docker run --rm -v $(pwd):/source ${BUILD_IMAGE} build
- sudo docker cp ./_book/. ${DOCKER_CONTAINER_NAME}:/usr/share/nginx/html
- if [ ! -z "${REVIEW_CREDENTIALS}" ]; then mkdir -p ./nginx && echo "${REVIEW_CREDENTIALS}" > ./nginx/credentials && sudo docker cp ./nginx/credentials ${DOCKER_CONTAINER_NAME}:/etc/nginx/htpasswd/credentials; rm -f ./nginx/credentials; fi
environment:
name: review/${CI_COMMIT_REF_NAME}
url: http://${CI_ENVIRONMENT_SLUG}.collaborating.tuhh.de
on_stop: review:stop
only:
- branches
tags:
- development
- ssg
except:
- master
test:
stage: test
script:
#- if [ -f book.json ]; then jq -r --arg base_path "/${CI_PROJECT_PATH}/~${CI_COMMIT_REF_NAME}/" '.base_path |= $base_path' book.json | sponge book.json; fi
#- if [ -f book.json ]; then jq -r --arg pluginsConfig__downloadpdf_base "/${CI_PROJECT_PATH}/~${CI_COMMIT_REF_NAME}/book_pdf/book.pdf?/" '.pluginsConfig.downloadpdf.base |= $pluginsConfig__downloadpdf_base' book.json | sponge book.json; fi
#- if [ -f book.json ]; then cat book.json; fi
#- if [ -f book.json ]; then jq -r --arg base_path "/${CI_PROJECT_PATH}/" '.base_path |= $base_path' book.json | sponge book.json; fi
#- if [ -f book.json ]; then jq -r --arg pluginsConfig__downloadpdf_base "/${CI_PROJECT_PATH}/book_pdf/book.pdf?/" '.pluginsConfig.downloadpdf.base |= $pluginsConfig__downloadpdf_base' book.json | sponge book.json; fi
#- if [ -f book.json ]; then cat book.json; fi
- exit 0
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- node_modules
policy: pull
except:
- master
pdf:
stage: build
script:
- gitbook install
- mkdir -p book_pdf
- gitbook pdf ./ ./book_pdf/book.pdf
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- node_modules
- book_pdf
artifacts:
name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}"
paths:
- book_pdf
pages:branches:
stage: build
script:
- if [ -f book.json ]; then jq -r --arg base_path "/${CI_PROJECT_PATH}/~${CI_COMMIT_REF_NAME}/" '.base_path |= $base_path' book.json | sponge book.json; fi
- if [ -f book.json ]; then jq -r --arg pluginsConfig__downloadpdf_base "/${CI_PROJECT_PATH}/~${CI_COMMIT_REF_NAME}/book_pdf/book.pdf?/" '.pluginsConfig.downloadpdf.base |= $pluginsConfig__downloadpdf_base' book.json | sponge book.json; fi
- 'if [ -f book.json ]; then cat book.json; fi'
- gitbook install
- gitbook build
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- node_modules
- _book
artifacts:
paths:
- _book
except:
- master
pages:master:
stage: build
script:
- if [ -f book.json ]; then jq -r --arg base_path "/${CI_PROJECT_PATH}/" '.base_path |= $base_path' book.json | sponge book.json; fi
- if [ -f book.json ]; then jq -r --arg pluginsConfig__downloadpdf_base "/${CI_PROJECT_PATH}/book_pdf/book.pdf?/" '.pluginsConfig.downloadpdf.base |= $pluginsConfig__downloadpdf_base' book.json | sponge book.json; fi
- 'if [ -f book.json ]; then cat book.json; fi'
- gitbook install
- gitbook build
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- node_modules
- _book
artifacts:
paths:
- _book
only:
- master
review:start:
stage: review
script:
- echo "$REVIEW_SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
- eval $(ssh-agent -s)
- echo "$REVIEW_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
- ssh -p "${REVIEW_SSH_PORT}" "${REVIEW_SSH_USER}"@"${REVIEW_HOST_NAME}" "mkdir -p /usr/share/nginx/html/~${CI_COMMIT_REF_NAME}"
- scp -P "${REVIEW_SSH_PORT}" -r _book/* "${REVIEW_SSH_USER}"@"${REVIEW_HOST_NAME}":"/usr/share/nginx/html/~${CI_COMMIT_REF_NAME}"
- if [ -d book_pdf ]; then ssh -p "${REVIEW_SSH_PORT}" "${REVIEW_SSH_USER}"@"${REVIEW_HOST_NAME}" "mkdir -p /usr/share/nginx/html/~${CI_COMMIT_REF_NAME}/book_pdf"; fi
- if [ -d book_pdf ]; then scp -P "${REVIEW_SSH_PORT}" -r book_pdf/* "${REVIEW_SSH_USER}"@"${REVIEW_HOST_NAME}":"/usr/share/nginx/html/~${CI_COMMIT_REF_NAME}/book_pdf"; fi
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- _book
- book_pdf
policy: pull
except:
- master
environment:
name: $CI_COMMIT_REF_NAME
url: https://${REVIEW_PROXY_HOST_NAME}/${REVIEW_BASE_DIR}/~${CI_COMMIT_REF_NAME}/
on_stop: review:stop
review:stop: review:stop:
stage: review stage: review
variables: script:
GIT_STRATEGY: none - echo "$REVIEW_SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
script: - chmod 644 ~/.ssh/known_hosts
- sudo docker stop ${DOCKER_CONTAINER_NAME} - eval $(ssh-agent -s)
when: manual - echo "$REVIEW_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
environment: - ssh -p "${REVIEW_SSH_PORT}" "${REVIEW_SSH_USER}"@"${REVIEW_HOST_NAME}" "rm -rf /usr/share/nginx/html/~${CI_COMMIT_REF_NAME}"
name: review/${CI_COMMIT_REF_NAME} when: manual
action: stop except:
only: - master
- branches environment:
tags: name: $CI_COMMIT_REF_NAME
- development action: stop
- ssg
except:
- master
.deploy: .deploy:
stage: deploy stage: deploy
only: only:
- master - master
retry: 2 except:
tags: - schedules
- ssg
script: script:
- pwd - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
- sudo docker run --rm -v $(pwd):/source ${BUILD_IMAGE} install - chmod 644 ~/.ssh/known_hosts
- sudo docker run --rm -v $(pwd):/source ${BUILD_IMAGE} build - eval $(ssh-agent -s)
- mkdir -p book_pdf; sudo docker run --rm -v $(pwd):/source ${BUILD_IMAGE} pdf ./ ./book_pdf/book.pdf - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
- sshpass -p "${SSH_PASSWD}" ssh -p "${SSH_PORT}" "${SSH_USER}"@"${HOST_NAME}" "mkdir -p /usr/share/nginx/html/production" - ssh -p "${SSH_PORT}" "${SSH_USER}"@"${HOST_NAME}" "mkdir -p /usr/share/nginx/html"
- sshpass -p "${SSH_PASSWD}" scp -P "${SSH_PORT}" -r _book/* "${SSH_USER}"@"${HOST_NAME}":/usr/share/nginx/html/production - scp -P "${SSH_PORT}" -r _book/* "${SSH_USER}"@"${HOST_NAME}":"/usr/share/nginx/html"
- sshpass -p "${SSH_PASSWD}" scp -P "${SSH_PORT}" -r book_pdf "${SSH_USER}"@"${HOST_NAME}":/usr/share/nginx/html/production - if [ -d book_pdf ]; then ssh -p "${SSH_PORT}" "${SSH_USER}"@"${HOST_NAME}" "mkdir -p /usr/share/nginx/html/book_pdf"; fi
- if [ -d book_pdf ]; then scp -P "${SSH_PORT}" -r book_pdf/* "${SSH_USER}"@"${HOST_NAME}":"/usr/share/nginx/html/book_pdf"; fi
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- _book
- book_pdf
policy: pull
environment: environment:
name: production name: $CI_COMMIT_REF_NAME
#url: http://$HOST_NAME$COLON$HTTP_PORT/production/ #url: http://$HOST_NAME$COLON$HTTP_PORT/production/
#url: https://$PROXY_HOST_NAME/$BASE_PATH/ #url: https://$PROXY_HOST_NAME/$BASE_PATH/
url: https://$PROXY_HOST_NAME/$CI_PROJECT_PATH/ url: https://$PROXY_HOST_NAME/${BASE_DIR}/
\ No newline at end of file #url: https://$PROXY_HOST_NAME/
clean:
stage: clean
script:
- echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
- ssh -p "${SSH_PORT}" "${SSH_USER}"@"${HOST_NAME}" "rm -rf /usr/share/nginx/html/*"
when: manual
only:
- master
environment:
name: $CI_COMMIT_REF_NAME
action: stop
linkchecker:intern:
stage: linkchecker
except:
- master
image:
name: linkchecker/linkchecker
entrypoint: [""]
script:
- linkchecker --recursion-level 10 --threads 10 --no-status --no-robots --no-warnings --ignore-url 'https://fonts.gstatic.com/{0,1}$' https://${REVIEW_PROXY_HOST_NAME}/${REVIEW_BASE_DIR}/~${CI_COMMIT_REF_NAME}/
when: manual
linkchecker:all:
stage: linkchecker
except:
- master
image:
name: linkchecker/linkchecker
entrypoint: [""]
script:
- linkchecker --recursion-level 10 --threads 10 --no-status --no-robots --no-warnings --check-extern --ignore-url 'https://fonts.gstatic.com/{0,1}$' https://${REVIEW_PROXY_HOST_NAME}/${REVIEW_BASE_DIR}/~${CI_COMMIT_REF_NAME}/
when: manual
## Glossar
## API
*Application Programming Interface* Dabei handelt es sich um die Schnittstelle einer Software, Sprache oder Programmbibliothek. Menschen und Maschinen können über die API auf das Gerät/die Software zugreifen. Zu jeder API sollte es eine gute Dokumentation geben, die Menschen lesen und verstehen können. [Ein Beispiel ist die API-Referenz von Python](https://docs.python.org/3/).
<!--
<div class="badge-wrapper"> <div class="badge-wrapper">
<a class="version-badge" href="https://fizban05.rz.tu-harburg.de/itbh-inf-wise201718/veranstaltungsskript-inf-wise201718/"> <a class="version-badge" href="https://fizban05.rz.tu-harburg.de/itbh-inf-wise201718/veranstaltungsskript-inf-wise201718/">
<img alt="version HTML" src="https://img.shields.io/badge/version-HTML-yellowgreen.svg"> <img alt="version HTML" src="https://img.shields.io/badge/version-HTML-yellowgreen.svg">
...@@ -9,6 +10,7 @@ ...@@ -9,6 +10,7 @@
<img alt="version Pandoc PDF" src="https://img.shields.io/badge/version-Pandoc_PDF-red.svg" /> <img alt="version Pandoc PDF" src="https://img.shields.io/badge/version-Pandoc_PDF-red.svg" />
</a> </a>
</div> </div>
-->
# Über diese Veranstaltung # Über diese Veranstaltung
......
...@@ -22,7 +22,21 @@ ...@@ -22,7 +22,21 @@
* [Fahrplan](sitzungen/fahrplan.md) * [Fahrplan](sitzungen/fahrplan.md)
* [[01] 2017-10-20](sitzungen/01-Fr-2017-10-20.md) * [[01] 2017-10-20](sitzungen/01-Fr-2017-10-20.md)
* [[02] 2017-10-27](sitzungen/02-Fr-2017-10-27.md) * [[02] 2017-10-27](sitzungen/02-Fr-2017-10-27.md)
* [Arbeitsauftrag INF2](sitzungen/auftraege/02-Fr-2017-10-27-auftrag-inf2.md) * [Arbeitsauftrag](sitzungen/auftraege/02-Fr-2017-10-27-auftrag-inf2.md)
* [[03] 2017-11-03](sitzungen/03-Fr-2017-11-03.md)
* [Arbeitsauftrag](sitzungen/auftraege/03-Fr-2017-11-03-auftrag-inf2.md)
* [[04] 2017-11-10](sitzungen/04-Fr-2017-11-10.md)
* [Arbeitsauftrag](sitzungen/auftraege/04-Fr-2017-11-10-auftrag-inf2.md)
* [[05] 2017-11-17](sitzungen/05-Fr-2017-11-17.md)
* [Arbeitsauftrag](sitzungen/auftraege/05-Fr-2017-11-17-auftrag-inf2.md)
* [[06] 2017-11-24](sitzungen/06-Fr-2017-11-24.md)
* [Arbeitsauftrag](sitzungen/auftraege/06-Fr-2017-11-24-auftrag-inf2.md)
* [[07] 2017-12-01](sitzungen/07-Fr-2017-12-01.md)
* [Arbeitsauftrag](sitzungen/auftraege/07-Fr-2017-12-01-auftrag-inf2.md)
* [[08] 2017-12-08](sitzungen/08-Fr-2017-12-08.md)
* [Arbeitsauftrag](sitzungen/auftraege/08-Fr-2017-12-08-auftrag-inf2.md)
* [[09] 2017-12-15](sitzungen/09-Fr-2017-12-15.md)
* [Arbeitsauftrag](sitzungen/auftraege/09-Fr-2017-12-15-auftrag-inf2.md)
## Lernmaterialtypen ## Lernmaterialtypen
* [Lernmaterialtypen](material/typen/einleitung.md) * [Lernmaterialtypen](material/typen/einleitung.md)
...@@ -37,6 +51,7 @@ ...@@ -37,6 +51,7 @@
## Sitzungsmaterial ## Sitzungsmaterial
* [Studienleistungen mit GitLab hochladen](material/sitzungsmaterial/studienleistungen-in-gitlab-hochladen.md) * [Studienleistungen mit GitLab hochladen](material/sitzungsmaterial/studienleistungen-in-gitlab-hochladen.md)
* [Jupyter Notebook installieren](material/sitzungsmaterial/einrichtung-byod-python.md)
* [Experiment: Client-/Serverkommunikation](material/sitzungsmaterial/analyse-client-server.md) * [Experiment: Client-/Serverkommunikation](material/sitzungsmaterial/analyse-client-server.md)
* [Sechszeiler in Markdown](material/sitzungsmaterial/sechszeiler-in-markdown.md) * [Sechszeiler in Markdown](material/sitzungsmaterial/sechszeiler-in-markdown.md)
* [Einrichtung Raspberry Pi](material/sitzungsmaterial/einrichtung-rpi.md) * [Einrichtung Raspberry Pi](material/sitzungsmaterial/einrichtung-rpi.md)
...@@ -52,6 +67,7 @@ ...@@ -52,6 +67,7 @@
## Referenzen ## Referenzen
* [Literatur](material/literatur.md) * [Literatur](material/literatur.md)
* [Glossar](GLOSSARY.md)
## Anhang ## Anhang
* [Atom Editor](./anhang/atom/atom.md) * [Atom Editor](./anhang/atom/atom.md)
...@@ -59,4 +75,6 @@ ...@@ -59,4 +75,6 @@
## Meta ## Meta
* [Impressum und Kontakt](meta/impressum.md) * [Impressum und Kontakt](meta/impressum.md)
* [Datenschutzerklärung](meta/datenschutz.md)
* [Beitragen und Weiternutzen](meta/beitragen.md) * [Beitragen und Weiternutzen](meta/beitragen.md)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Formulartemplate</title>
</head>
<body>
<form>
Vorname:
<input type="text">
<br>
Zuname:
<input type="text">
<br>
männlich
<input type="radio" name="geschlecht">
weiblich
<input type="radio" name="geschlecht">
<br>
über 18:
<input type="checkbox">
</form>
</body>
</html>
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
"pluginsConfig": { "pluginsConfig": {
"image-captions": { "image-captions": {
"align": "left", "align": "left",
"caption": "Abbildung: _PAGE_IMAGE_NUMBER_ - _CAPTION_", "caption": "Abbildung _PAGE_IMAGE_NUMBER_: _CAPTION_",
"images": { "images": {
"1.1.1": { "1.1.1": {
"skip": true "skip": true
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
"description": "Begleitendes Skript für die Veranstaltung Einführung in die Informationstechnik am ITBH der TUHH, WiSe 2017/18", "description": "Begleitendes Skript für die Veranstaltung Einführung in die Informationstechnik am ITBH der TUHH, WiSe 2017/18",
"title": "Einführung in die Informationstechnik II", "title": "Einführung in die Informationstechnik II",
"colors": { "colors": {
"sidebarBackground": "#ff8700", "sidebarBackground": "#78b37e",
"sidebarColor": "#fff", "sidebarColor": "#fff",
"partHeaderColor": "#364149", "partHeaderColor": "#364149",
"sidebarLink": "#fff", "sidebarLink": "#fff",
......
...@@ -10,6 +10,7 @@ Wer das WWW mitgestalten will, kommt an HTML nicht vorbei. HTML5 ist die aktuell ...@@ -10,6 +10,7 @@ Wer das WWW mitgestalten will, kommt an HTML nicht vorbei. HTML5 ist die aktuell
HTML5 kann man mit jedem Texteditor notieren, als `dateiname.html` speichern und dann als Dokument im Browser öffnen. Wir werden in der Veranstaltung [Atom](http://atom.io) verwenden, einen Editor, der unter der [MIT Lizenz](https://github.com/atom/atom/blob/master/LICENSE.md) veröffentlicht wurde und damit als [Freie Software gilt](https://www.gnu.org/licenses/license-list#X11License). HTML5 kann man mit jedem Texteditor notieren, als `dateiname.html` speichern und dann als Dokument im Browser öffnen. Wir werden in der Veranstaltung [Atom](http://atom.io) verwenden, einen Editor, der unter der [MIT Lizenz](https://github.com/atom/atom/blob/master/LICENSE.md) veröffentlicht wurde und damit als [Freie Software gilt](https://www.gnu.org/licenses/license-list#X11License).
### Referenzen ### Referenzen
* Ein sehr guter Anlaufpunkt in Sachen Referenz und Dokumentation ist das **Mozilla Developer Framework**. Hier gibt es mittlerweile viel zu [CSS](https://developer.mozilla.org/de/docs/Web/HTML) in deutscher Sprache. Jedoch gilt auch hier, dass die englische Version hinsichtlich Aktualität und Vollständigkeit der deutschen vorzuziehen ist. * Ein sehr guter Anlaufpunkt in Sachen Referenz und Dokumentation ist das **Mozilla Developer Framework**. Hier gibt es mittlerweile viel zu [CSS](https://developer.mozilla.org/de/docs/Web/HTML) in deutscher Sprache. Jedoch gilt auch hier, dass die englische Version hinsichtlich Aktualität und Vollständigkeit der deutschen vorzuziehen ist.
...@@ -19,6 +20,7 @@ HTML5 kann man mit jedem Texteditor notieren, als `dateiname.html` speichern und ...@@ -19,6 +20,7 @@ HTML5 kann man mit jedem Texteditor notieren, als `dateiname.html` speichern und
* Eine aktuelle deutschsprachige Website, die auch Stilfragen und gute Praxis vermittelt, ist das [HTML-Seminar](http://www.html-seminar.de/einsteiger.htm) von Axel Pratzner. * Eine aktuelle deutschsprachige Website, die auch Stilfragen und gute Praxis vermittelt, ist das [HTML-Seminar](http://www.html-seminar.de/einsteiger.htm) von Axel Pratzner.
* Auf dieser Seite ist besonders [der Vergleich zwischen der "althergebrachten Art" und der neuen zu erwähnen](http://www.html-seminar.de/html-5-strukturierende-elemente.htm), mit der Webseiten strukturiert werden. * Auf dieser Seite ist besonders [der Vergleich zwischen der "althergebrachten Art" und der neuen zu erwähnen](http://www.html-seminar.de/html-5-strukturierende-elemente.htm), mit der Webseiten strukturiert werden.
* Die W3School hat [viele Lerneinheiten](http://www.w3schools.com/html/html5_intro.asp) zu aktuellen Sprachen des Webs. * Die W3School hat [viele Lerneinheiten](http://www.w3schools.com/html/html5_intro.asp) zu aktuellen Sprachen des Webs.
* Die Arnold-Bode-Schule in Kassel hat eine [Lernplatform](http://code.arnoldbodeschule.de/) speziell für Mediengestalter Digital und Print entworfen
### Videos ### Videos
......
# Einrichtung des eigenen Rechners für die Arbeit mit Python
Weil die Installation von Python auf den drei gängigen Betriebssystemen Windows, MacOS und Linux zuweilen umständlich sein kann, wird im Folgenden ein Verfahren beschrieben, das halbwegs einheitlich und einfach ist.
## Installation von Anaconda
Anaconda ist eine freie und quelloffene Entwicklungsumgebung, die vor allem in wissenschaftlichen Zusammenhängen genutzt wird. Wir nutzen sie vornehmlich für zwei Dinge:
1. Um einfach zu einer verlässlichen Pythonumgebung kommen
1. Für das Arbeiten mit [Jupyter Notebook](https://jupyter.org/)
### Vorgehen
- [Laden Sie Anaconda für Ihr Betriebssystem herunter](https://www.anaconda.com/download/) (ca. 3 GB).
- Installieren Sie die Anwendung. Unchecken Sie die beiden Boxen am Ende des Installationsvorgangs, bevor Sie beenden.
Sie haben nun **Anaconda Navigator** und unter Windows noch **Anaconda Prompt** auf dem Rechner.
- Starten Sie Anaconda Navigator. Sehen Sie sich darin alles an. Uns interessiert die Anwendung **Jupyter Notebook**, mit der wir hauptsächlich arbeiten werden.
![Anaconda-Dashboard](/abb/material/sitzungsmaterial/Anaconda-Dashboard.png)
- Starten Sie Jupyter Notebook mit einem Klick auf *Launch*. Wie Sie sinnvoll mit Jupyter Notebook arbeiten können, zeigt das folgende Video.
- <iframe width="560" height="315" src="https://www.youtube.com/embed/DLWBfR2hxoo?rel=0" frameborder="0" allowfullscreen></iframe>
Video 1: "Jupyter Demo 1 - Playing with Strings" by Lorena Barba unter [CC-BY](https://creativecommons.org/licenses/by/3.0/legalcode)
<!-- ![Beispiel für ein Arbeitsblatt in Jupyter Notebook](/abb/material/sitzungsmaterial/Jupyter-Notebook.png) -->
## Konfiguration von Anaconda
Damit Jupyter Notebook nach dem Start Ihren gewünschten Arbeitsordner anzeigt, sind folgende Schritte zu erledigen (hier beschrieben für Windows):
- Rufen Sie über START den **Anaconda Prompt** auf. Das gilt nur für Windows, *nix-User_innen (MacOS und Linux) haben schon eine Kommandozeile eingebaut.
- Geben Sie `jupyter-notebook --generate-config` ein, um initial eine Konfigurationsdatei für Jupyter Notebook zu generieren.
- Öffnen Sie diese Datei z.B. durch die Eingabe `notepad .jupyter\jupyter_notebook_config.py`
- Passen Sie den Wert von `c.NotebookApp.notebook_dir` an. Geben Sie einen absoluten Pfad mit Laufwerksbuchstabe (nur Windows) und *forward slashes* ("/") an.
- Speichern und schließen Sie die Datei.
- Starten Sie Jupyter Notebook. Sie sollten nun im gewünschten Verzeichnis landen.
## Erfahrungen bei Installation und Konfiguration
- **Windows**: Die Installation unter Windows sollte unter Adminrechten durchgeführt werden. Sonst kann es passieren, dass die Menüeinträge nicht erstellen werden kann (Option: "Just me").
- **Windows**: Die Konfiguration des Startordners für Jupyter Notebook gelingt nicht immer sofort, hier ist Geduld gefragt. Es kann sein, dass die Konfigurationsdatei nicht erneut eingelesen wird, wenn schon Prozesse von Jupyter Notebook laufen. Wie immer bei Windows: Jeder Boot tut gut. Oder mit dem Taskmanager alle Jupyter-Prozesse abschießen.
- **Windows**: *forward slashes* und Einkommentieren der Direktive für den Startordner werden gern vergessen.
- **Mac**: Da die Konfigurationsdatei in dem versteckten Ordner `.jupyter` angelegt wird, kann es schwierig sein, diese zu öffnen, wenn der Mac versteckte Dateien nicht anzeigt. Hier kann *vim* helfen, der vom Terminal aus gestartet werden kann, aber nicht allen Studierenden gleich ein guter Freund ist.
## Installation von GitBash (nur Windows)
tbd
## Installation von GitKraken
tbd
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
## ssh ## ssh
ssh -l loginname rechnername | Starten einer sicheren Shell auf einem anderen Rechner ssh -l loginname rechnername | Starten einer sicheren Shell auf einem anderen Rechner
"Wenn man mit **ssh** zum ersten Mal eine Verbindung zu einem anderen Rechner herstellt, erscheint oft eine Warnung. Dies geschieht, weil **ssh** hier nachfragt, ob es dem anderen Rechner mit seiner IP-Adresse vertrauen darf. Beantwortet man diese Frage mit *yes*, speichert **ssh** den Namen und den *RSA-Fingerprint* (Code zur eindeutigen Identifizierung des anderen Rechners) in der Datei *~/.ssh/known_hosts*, so dass diese Nachfrage beim nächsten Anmelden nicht mehr erscheint. "Wenn man mit **ssh** zum ersten Mal eine Verbindung zu einem anderen Rechner herstellt, erscheint oft eine Warnung. Dies geschieht, weil **ssh** hier nachfragt, ob es dem anderen Rechner mit seiner IP-Adresse vertrauen darf. Beantwortet man diese Frage mit *yes*, speichert **ssh** den Namen und den *RSA-Fingerprint* (Code zur eindeutigen Identifizierung des anderen Rechners) in der Datei *~/.ssh/known_hosts*, so dass diese Nachfrage beim nächsten Anmelden nicht mehr erscheint.
...@@ -220,13 +220,13 @@ würde dies zu einem Fehler führen. Mit dieser Eingabe eines absoluten Pfades w ...@@ -220,13 +220,13 @@ würde dies zu einem Fehler führen. Mit dieser Eingabe eines absoluten Pfades w
touch Plan.txt touch Plan.txt
touch Noten.txt touch Noten.txt
touch Zeiten.txt touch Zeiten.txt
* Löschen Sie mit `rm` die Dateien wieder: * Löschen Sie mit `rm` die Dateien wieder:
rm Plan.txt rm Plan.txt
rm Noten.txt Zeiten.txt rm Noten.txt Zeiten.txt
......
...@@ -35,19 +35,19 @@ Die Motivation, GitLab für diese Veranstaltung einzusetzen, liegt darin, dass z ...@@ -35,19 +35,19 @@ Die Motivation, GitLab für diese Veranstaltung einzusetzen, liegt darin, dass z
## Die eigene Subgroup finden ## Die eigene Subgroup finden
Für alle Teilnehmer_innen wurde ein so genannte Subgroup in GitLab eingerichtet. Sie ist der Subgroup der Veranstaltung, [itbh-inf-sose2017](https://collaborating.tuhh.de/itbh-inf-sose2017), untergeordnet. Eine Subgroup gibt dem *Owner*, also dem jeweiligen Teilnehmer, volle Rechte als *Master* dieser Gruppe. Er/sie kann andere einladen, Projekte anlegen und verschiedene andere Operationen durchführen. Für alle Teilnehmer_innen wurde ein so genannte Subgroup in GitLab eingerichtet. Sie ist der Subgroup der Veranstaltung, [itbh-inf-wise201718](https://collaborating.tuhh.de/itbh-inf-wise201718), untergeordnet. Eine Subgroup gibt dem *Owner*, also dem jeweiligen Teilnehmer, volle Rechte in dieser Gruppe. Er/sie kann andere einladen, Projekte anlegen und verschiedene andere Operationen durchführen.
Die eigene Subgroup findet man am besten durch den Einstieg in die Gruppe der Veranstaltung, [itbh-inf-sose2017](https://collaborating.tuhh.de/itbh-inf-sose2017) und anschließend durch einen Klick auf *Subgroups*. Die eigene Subgroup findet man am besten durch den Einstieg in die Gruppe der Veranstaltung, [itbh-inf-wise201718](https://collaborating.tuhh.de/itbh-inf-wise201718) und anschließend durch einen Klick auf *Subgroups*.
![Ausgehen von der Kursgruppe die eigene Subgroup finden](/abb/material/sitzungsmaterial/gitlab-subgroup-finden.png) ![Ausgehen von der Kursgruppe die eigene Subgroup finden (Die Bildschirmdarstellung kann vom Screenshot abweichen.)](/abb/material/sitzungsmaterial/gitlab-subgroup-finden.png)
## Projekte anlegen ## Projekte anlegen
Benutzer_innen in GitLab können eine bestimmte Anzahl von Projekten anlegen, in der Regel fünf. Benutzer_innen in GitLab können eine bestimmte Anzahl von Projekten anlegen, in der Regel fünf.
Im folgenden werden Sie ein neues Projekt anlegen und ihm den Namen *Studienleistungen_[Ihr Name]* geben. Hier kann alles hochgeladen werden, was Sie im Laufe der kommenden Sitzungen erarbeiten. Im Folgenden werden Sie ein neues Projekt anlegen und ihm den Namen *Studienleistungen_[Ihr Name]* geben. Hier kann alles hochgeladen werden, was Sie im Laufe der kommenden Sitzungen erarbeiten.
Für das Anlegen eines Projekts starten Sie in der Subgroup mit Ihrem Namen. Für das Anlegen eines Projekts starten Sie in der Subgroup Ihres Namens.
![Anlegen eines Projekts in GitLab](/abb/material/sitzungsmaterial/gitlab-projekt-anlegen.gif) ![Anlegen eines Projekts in GitLab](/abb/material/sitzungsmaterial/gitlab-projekt-anlegen.gif)
......
...@@ -5,3 +5,8 @@ Auf so genannten Cheat Sheets werden die wichtigsten Befehle und Ausdrücke eine ...@@ -5,3 +5,8 @@ Auf so genannten Cheat Sheets werden die wichtigsten Befehle und Ausdrücke eine
Eine Internetrecherche z.B. nach "cheat sheet html" fördert einige zutage, bei [Envato](https://envato.com/blog/cheatsheets-web-designers/) findet sich auch eine gute Sammlung. Eine Internetrecherche z.B. nach "cheat sheet html" fördert einige zutage, bei [Envato](https://envato.com/blog/cheatsheets-web-designers/) findet sich auch eine gute Sammlung.
![Screenshot eines Cheat Sheets von <a href='https://websitesetup.org/HTML5-cheat-sheet.pdf'>WebsiteUp</a>](/abb/material/typen/html-cheat-sheet.png) ![Screenshot eines Cheat Sheets von <a href='https://websitesetup.org/HTML5-cheat-sheet.pdf'>WebsiteUp</a>](/abb/material/typen/html-cheat-sheet.png)
### Python
- https://ehmatthes.github.io/pcc/cheatsheets/README.html
-
# Datenschutzerklärung
Bei jedem Zugriff einer Nutzerin bzw. eines Nutzers auf die diese Website werden Daten über diesen Vorgang vorübergehend in einer Protokolldatei gespeichert.
Im Einzelnen sind dies folgende Daten:
IP-Adresse
Datum und Uhrzeit
Browserinformationen
Referrer
URI der abgerufenen Information