upgrade to 0.8; added Opinion-section

This commit is contained in:
Nicole Dresselhaus 2022-11-23 12:22:29 +01:00
parent 52c70b39e3
commit b00878e020
66 changed files with 11295 additions and 1673 deletions

View File

@ -2,9 +2,9 @@
title: About me title: About me
--- ---
# Stefan Dresselhaus # Drezil
<img align="right" style='border:1px solid #000000; float:right; margin-left:20px' height='300px' src="/About/DresselhausStefan_klein2.jpg"/> <img class="border border-solid w32 rounded-xl lg:rounded-3xl lg:w64 float-right" style=" border-color: rgb(217 70 239);" src="/About/avatar_neu.png"/>
## Work ## Work

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

View File

@ -11,6 +11,11 @@ Die meisten Services haben offensichtliche Anforderungen (Schnittstellen nach
draußen, Schnittstellen intern, ...). Diese kann man immer sehr gut in einem draußen, Schnittstellen intern, ...). Diese kann man immer sehr gut in einem
`Request -> Response`-Model erfassen. `Request -> Response`-Model erfassen.
Um die Anforderungen und Möglichkeiten des jeweiligen Services sauber zu
erfassen und automatisiert zu prüfen, dummy-implementationen zu bekommen und
vieles andere mehr, empfiehlt es sich den #[[OpenAPI|openapi-generator]] zu
nutzen.
Diese Definition läuft über openapi-v3 und kann z.b. mit Echtzeit-Vorschau im Diese Definition läuft über openapi-v3 und kann z.b. mit Echtzeit-Vorschau im
http://editor.swagger.io/ erspielen. Per Default ist der noch auf openapi-v2 http://editor.swagger.io/ erspielen. Per Default ist der noch auf openapi-v2
(aka swagger), kann aber auch v3. (aka swagger), kann aber auch v3.
@ -19,7 +24,7 @@ Nach der Definition, was man am Ende haben möchte, muss man sich entscheiden, i
welcher Sprache man weiter entwickelt. Ich empfehle aus verschiedenen Gründen welcher Sprache man weiter entwickelt. Ich empfehle aus verschiedenen Gründen
primär 2 Sprachen: Python-Microservices (weil die ML-Libraries sehr gut sind, primär 2 Sprachen: Python-Microservices (weil die ML-Libraries sehr gut sind,
allerdings Änderungen meist schwer sind und der Code wenig robust - meist nur 1 allerdings Änderungen meist schwer sind und der Code wenig robust - meist nur 1
API-Endpunkt pro service) und Haskell (stabilität, performace, leicht zu ändern, API-Endpunkt pro service) und Haskell (Stabilität, Performace, leicht zu ändern,
gut anzupassen). gut anzupassen).
Im folgenden wird (aus offensichtlichen Gründen) nur auf das Haskell-Projekt eingegangen. Im folgenden wird (aus offensichtlichen Gründen) nur auf das Haskell-Projekt eingegangen.
@ -28,15 +33,15 @@ Im folgenden wird (aus offensichtlichen Gründen) nur auf das Haskell-Projekt ei
### Erstellen eines neuen Projektes ### Erstellen eines neuen Projektes
Zunächst erstellen wir in normales Haskell-Projekt ohne funktionalität & firlefanz: Zunächst erstellen wir in normales Haskell-Projekt ohne Funktionalität & Firlefanz:
```bash ```bash
stack new myservice stack new myservice
``` ```
Dies erstellt ein neues Verzeichnis und das generelle scaffolding. Dies erstellt ein neues Verzeichnis und das generelle scaffolding.
Nach einer kurzen anpassung der stack.yaml (resolver auf unserer setzen; Nach einer kurzen Anpassung der `stack.yaml` (resolver auf unserer setzen;
aktuell: lts-17.4) fügen wir am Ende der Datei aktuell: `lts-17.4`) fügen wir am Ende der Datei
```yaml ```yaml
allow-newer: true allow-newer: true
@ -51,7 +56,7 @@ das git mittels `git init; git add .; git commit -m "initial scaffold"`
### Generierung der API ### Generierung der API
Da die API immer wieder neu generiert werden kann (und sollte!) liegt sich in Da die API immer wieder neu generiert werden kann (und sollte!) liegt sich in
einem unterverzeichnis des Haputprojektes. einem unterverzeichnis des Hauptprojektes.
Initial ist es das einfachste ein leeres temporäres Verzeichnis woanders zu Initial ist es das einfachste ein leeres temporäres Verzeichnis woanders zu
erstellen, die `api-doc.yml` hinein kopieren und folgendes ausführen: erstellen, die `api-doc.yml` hinein kopieren und folgendes ausführen:
@ -61,29 +66,29 @@ openapi-generator generate -g haskell -o . -i api-doc.yml
``` ```
Dieses erstellt einem dann eine komplette library inkl. Datentypen. Dieses erstellt einem dann eine komplette library inkl. Datentypen.
Wichtig: Der Name in der api-doc sollte vom Namen des Services (oben myservice) Wichtig: Der Name in der `api-doc` sollte vom Namen des Services (oben `myservice`)
abweichen - entweder in Casing oder im Namen direkt. Suffixe wie API schneidet abweichen - entweder in Casing oder im Namen direkt. Suffixe wie API schneidet
der Generator hier leider ab. der Generator hier leider ab.
(Wieso das ganze? Es entstehen nachher 2 libraries, foo & fooAPI. Da der (Wieso das ganze? Es entstehen nachher 2 libraries, `foo` & `fooAPI`. Da der
generator das API abschneidet endet man mit foo & foo und der compiler meckert, generator das API abschneidet endet man mit foo & foo und der compiler meckert,
dass er nicht weiss, welche lib gemeint ist). dass er nicht weiß, welche lib gemeint ist).
danach: wie gewohnt `git init; git add .; git commit -m "initial"`. Auf dem danach: wie gewohnt `git init; git add .; git commit -m "initial"`. Auf dem
Server der Wahl (github, gitea, gitlab, ...) nun ein Repository erstellen (am Server der Wahl (github, gitea, gitlab, ...) nun ein Repository erstellen (am
Besten: myserviceAPI - alles auf API endend ist autogeneriert!) und den Besten: `myserviceAPI` - nach Konvention ist alles auf API endend autogeneriert!)
Anweisungen nach ein remote hinzufügen & pushen. und den Anweisungen nach ein remote hinzufügen & pushen.
#### Wieder zurück im Haskell-Service #### Wieder zurück im Haskell-Service
In unserem eigentlichen Service müssen wir nun die API einbinden. In unserem eigentlichen Service müssen wir nun die API einbinden.
Dazu erstellen wir ein Verzeichnis `libs` (konvention) und machen ein `git Dazu erstellen wir ein Verzeichnis `libs` (Konvention) und machen ein `git
submodule add <repository-url> libs/myserviceAPI` submodule add <repository-url> libs/myserviceAPI`
Git hat nun die API in das submodul gepackt und wir können das oben erstellte Git hat nun die API in das submodul gepackt und wir können das oben erstellte
temporäre verzeichnis wieder löschen. temporäre Verzeichnis wieder löschen.
Anschließend müssen wir stack noch erklären, dass wir die API da nun liegen Anschließend müssen wir stack noch erklären, dass wir die API da nun liegen
haben und passen wieder die stack.yaml an, indem wir das Verzeichnis unter haben und passen wieder die `stack.yaml` an, indem wir das Verzeichnis unter
packages hinzufügen. packages hinzufügen.
```yaml ```yaml
@ -92,9 +97,9 @@ packages:
- libs/myserviceAPI # << - libs/myserviceAPI # <<
``` ```
nun können wir in der `package.yaml` (oder `myservice.cabal`, falls kein hpack Nun können wir in der `package.yaml` (oder `myservice.cabal`, falls kein `hpack`
verwendet wird) unter den dependencies unsere api hinzufügen (name wie die verwendet wird) unter den dependencies unsere API hinzufügen (name wie die
cabal-datei in libs/myserviceAPI). cabal-Datei in `libs/myserviceAPI`).
### Einbinden anderer Microservices ### Einbinden anderer Microservices
@ -146,7 +151,7 @@ Es gibt 2 wichtige Pfade im Browser:
Wenn man einen lokalen Webserver startet kann man mittels "s" auch die Wenn man einen lokalen Webserver startet kann man mittels "s" auch die
interaktive Suche öffnen (Suche nach Typen, Funktionen, Signaturen, etc.). In interaktive Suche öffnen (Suche nach Typen, Funktionen, Signaturen, etc.). In
Bash mit python3 geht das z.b. einfach über: Bash mit `python3` geht das z.b. einfach über:
```bash ```bash
cd $(stack path --local-doc-root) cd $(stack path --local-doc-root)
@ -160,38 +165,41 @@ firefox "http://localhost:8000"
Generelles Vorgehen: Generelles Vorgehen:
- in app/Main.hs: - in `app/Main.hs`:
Hier ist quasi immer nur eine Zeile drin: `main = myServiceMain` Hier ist quasi immer nur eine Zeile drin: `main = myServiceMain`
Grund: Applications tauchen nicht im Haddock auf. Also haben wir ein Grund: Applications tauchen nicht im Haddock auf. Also haben wir ein
"src"-Modul, welches hier nur geladen & ausgeführt wird. "src"-Modul, welches hier nur geladen & ausgeführt wird.
- in src/MyService.hs: - in `src/MyService.hs`:
`myServiceMain :: IO ()` definieren `myServiceMain :: IO ()` definieren
Für die Main kann man prinzipiell eine Main andere Services copy/pasten. Im Für die Main kann man prinzipiell eine Main andere Services copy/pasten. Im
folgenden eine Annotierte main-Funktion - zu den einzelnen Vorraussetzungen folgenden eine Annotierte main-Funktion - zu den einzelnen Voraussetzungen
kommen wir im Anschluss. kommen wir im Anschluss.
![[Main.hs#]] ![[Main.hs#]]
#### Weitere Instanzen und Definitionen, die der Generator (noch) nicht macht #### Weitere Instanzen und Definitionen, die der Generator (noch) nicht macht
In der `Myservice.Types` werden ein paar hilfreiche Typen und Typinstanzen In der `Myservice.Types` werden ein paar hilfreiche Typen und Typ-Instanzen
definiert. Im Folgenden geht es dabei um Dinge für: definiert. Im Folgenden geht es dabei um Dinge für:
- Envy - `Envy`
- Laden von \$ENV_VAR in Datentypen - Laden von `$ENV_VAR` in Datentypen
- Definitionen für Default-Settings - Definitionen für Default-Settings
- ServerConfig - `ServerConfig`
- Definition der Server-Konfiguration & Benennung der Environment-Variablen - Definition der Server-Konfiguration & Benennung der Environment-Variablen
- ExtraTypes - `ExtraTypes`
- ggf. Paketweite extra-Typen, die der Generator nicht macht, weil sie nicht - ggf. Paketweite extra-Typen, die der Generator nicht macht, weil sie nicht
aus der API kommen (z.B. cache) aus der API kommen (z.B. cache)
- Out/BSON-Instanzen - `Out`/`BSON`-Instanzen
- Der API-Generator generiert nur wenige Instanzen automatisch (z.B. Aeson), - Der API-Generator generiert nur wenige Instanzen automatisch (z.B. `aeson`),
daher werden hier die fehlenden definiert. daher werden hier die fehlenden definiert.
- BSON: Kommunakation mit MongoDB - `BSON`: Kommunikation mit `MongoDB`
- Out: pretty-printing im Log - `Out`: pretty-printing im Log
- Nur nötig, wenn man pretty-printing via `Out` statt über Generics wie z.b.
`pretty-generic` oder die automatische Show-Instanz via `prerryShow`
macht.
![[MyService_Types.hs#]] ![[MyService_Types.hs#]]
@ -201,7 +209,7 @@ Den Service implementieren. Einfach ein neues Modul aufmachen (z.B.
`MyService.Handler` oder `MyService.Handler` oder
`MyService.DieserEndpunktbereich`/`MyService.JenerEndpunktbereich`) und dort die `MyService.DieserEndpunktbereich`/`MyService.JenerEndpunktbereich`) und dort die
Funktion implementieren, die man in der `Main.hs` benutzt hat. Funktion implementieren, die man in der `Main.hs` benutzt hat.
In dem Handler habt ihr dann keinen Stress mehr mit validierung, networking, In dem Handler habt ihr dann keinen Stress mehr mit Validierung, networking,
logging, etc. pp. weil alles in der Main abgehandelt wurde und ihr nur noch den logging, etc. pp. weil alles in der Main abgehandelt wurde und ihr nur noch den
"Happy-Case" implementieren müsst. "Happy-Case" implementieren müsst.
Beispiel für unseren Handler oben: Beispiel für unseren Handler oben:
@ -226,7 +234,7 @@ myApiEndpointV1Post sc calls amqPost log req = do
Diese dummy-Antwort führt auf, wie gut man die ganzen Sachen mischen kann. Diese dummy-Antwort führt auf, wie gut man die ganzen Sachen mischen kann.
- Logging in die Dateien/stdout nach config - Logging in die Dateien/`stdout` - je nach Konfiguration
- Logging von Statistiken in Kibana - Logging von Statistiken in Kibana
- Speichern der Antwort in der MongoDB - Speichern der Antwort in der MongoDB
- Generieren einer Serverantwort und ausliefern dieser über die Schnittstelle - Generieren einer Serverantwort und ausliefern dieser über die Schnittstelle
@ -235,14 +243,14 @@ Diese dummy-Antwort führt auf, wie gut man die ganzen Sachen mischen kann.
##### Dateien, die statisch ausgeliefert werden sollen ##### Dateien, die statisch ausgeliefert werden sollen
Hierzu erstellt man ein Verzeichnis `static/` (konvention; ist im generator so Hierzu erstellt man ein Verzeichnis `static/` (Konvention; ist im generator so
generiert, dass das ausgeliefert wird). Packt man hier z.b. eine `index.html` generiert, dass das ausgeliefert wird). Packt man hier z.b. eine `index.html`
rein, erscheint die, wenn man den Service ansurft. rein, erscheint die, wenn man den Service ansurft.
##### Wie bekomme ich diese fancy Preview hin? ##### Wie bekomme ich diese fancy Preview hin?
Der Editor, der ganz am Anfang zum Einsatz gekommen ist, braucht nur die Der Editor, der ganz am Anfang zum Einsatz gekommen ist, braucht nur die
`api-doc.yml` um diese Ansicht zu erzeugen. Daher empfielt sich hier ein `api-doc.yml` um diese Ansicht zu erzeugen. Daher empfiehlt sich hier ein
angepasster Fork davon indem die Pfade in der index.html korrigiert sind. Am angepasster Fork davon indem die Pfade in der index.html korrigiert sind. Am
einfachsten (und von den meisten services so benutzt): In meiner Implementation einfachsten (und von den meisten services so benutzt): In meiner Implementation
liegt dann nach dem starten auf http://localhost:PORT/ui/ und kann direkt dort liegt dann nach dem starten auf http://localhost:PORT/ui/ und kann direkt dort
@ -265,11 +273,11 @@ Was tut das?
WIRKLICH alles ist ) WIRKLICH alles ist )
- `-Wcompat`: Warnungen für Sachen, die in der nächsten Compilerversion kaputt - `-Wcompat`: Warnungen für Sachen, die in der nächsten Compilerversion kaputt
brechen werden & vermieden werden sollten brechen werden & vermieden werden sollten
- `--interleaved-output`: stack-log direkt ausgeben & nicht in dateien schreiben - `--interleaved-output`: stack-log direkt ausgeben & nicht in Dateien schreiben
und die dann am ende zusammen cat\'en. und die dann am ende zusammen cat\'en.
Um pro Datei Warnungen auszuschalten (z.B. weil man ganz sicher weiss, was man Um pro Datei Warnungen auszuschalten (z.B. weil man ganz sicher weiss, was man
tut -.-): `{-# OPTIONS_GHC -Wno-whatsoever #-}` als Pragma in die Datei. tut -.-): `{-# OPTIONS_GHC -Wno-whatsoever #-}` als pragma in die Datei.
**Idealerweise sollte das Projekt keine Warnungen erzeugen.** **Idealerweise sollte das Projekt keine Warnungen erzeugen.**
@ -277,18 +285,18 @@ tut -.-): `{-# OPTIONS_GHC -Wno-whatsoever #-}` als Pragma in die Datei.
Als Beispiel sei hier ein einfaches Docker-Build mit Jenkins-CI gezeigt, weil Als Beispiel sei hier ein einfaches Docker-Build mit Jenkins-CI gezeigt, weil
ich das aus Gründen rumliegen hatte. Kann man analog in fast alle anderen CI ich das aus Gründen rumliegen hatte. Kann man analog in fast alle anderen CI
übrsetzen. übersetzen.
#### Docker #### Docker
Die angehängten Scripte gehen von einer Standard-Einrichtung aus (statische Die angehängten Scripte gehen von einer Standard-Einrichtung aus (statische
sachen in static, 2-3 händische Anpassungen auf das eigene Projekt nach Sachen in static, 2-3 händische Anpassungen auf das eigene Projekt nach
auspacken). Nachher liegt dann auch unter static/version die gebaute auspacken). Nachher liegt dann auch unter static/version die gebaute
Versionsnummer & kann abgerufen werden. In der Dockerfile.release und der Versionsnummer & kann abgerufen werden. In der `Dockerfile.release` und der
Jenkinsfile müssen noch anpassungen gemacht werden. Konkret: `Jenkinsfile` müssen noch Anpassungen gemacht werden. Konkret:
- in der Dockerfile.release: alle `<<<HIER>>>`-Stellen sinnvoll befüllen - in der `Dockerfile.release`: alle `<<<HIER>>>`-Stellen sinnvoll befüllen
- in der Jenkinsfile die defs für "servicename" und "servicebinary" ausfüllen. - in der `Jenkinsfile` die defs für "servicename" und "servicebinary" ausfüllen.
Binary ist das, was bei stack exec aufgerufen wird; name ist der Image-Name Binary ist das, was bei stack exec aufgerufen wird; name ist der Image-Name
für das docker-repository. für das docker-repository.
@ -296,11 +304,12 @@ Jenkinsfile müssen noch anpassungen gemacht werden. Konkret:
Änderungen die dann noch gemacht werden müssen: Änderungen die dann noch gemacht werden müssen:
- git-repository url anpassen - git-repository URL anpassen
- Environment-Vars anpasses ($BRANCH = test & live haben keine zusatzdinger im - Environment-Vars anpassen (\$BRANCH = test & live haben keine zusatzdinger im
docker-image-repository; ansonsten hat das image $BRANCH im namen) docker-image-repository; ansonsten hat das image \$BRANCH im Namen)
Wenn das durchgebaut ist, liegt im test/live-repository ein docker-image namens `servicename:version`. Wenn das fertig gebaut ist, liegt im test/live-repository ein docker-image
namens `servicename:version`.
### OMG! Ich muss meine API ändern. Was mache ich nun? ### OMG! Ich muss meine API ändern. Was mache ich nun?

23
content/Coding/OpenAPI.md Normal file
View File

@ -0,0 +1,23 @@
# Openapi-generator
## Idee hinter einem API-Generator
[[TODO]] Idee hinter einem API-Generator
## Theorie und Praxis
[[TODO]] Theorie und Praxis
## Spezialfall in Haskell
[[TODO]] Veraltet
Wie im [[Webapp-Example]] kurz angerissen wird in Haskell nicht zwischen Server
und Client unterschieden. Daher können hier sehr viele Optimierungen bei
Änderungen passieren, die in anderen Sprachen nicht so einfach möglich sind.
Die generierte Library hat die Funktionen, die ein Client braucht direkt dabei
und man muss lediglich die Verbindung initialisieren (Callback für
Network-Requests, Serveradresse etc.) und kann dann direkt alle Funktionen
benutzen. Partial Application hilft hier massiv und man bekommt z.b. Für die
Beispiel-Tierhandlung aus dem ursprünglichem `getPet :: ` direkt so etwas wie `getPet :: PetID -> IO Pet`

View File

@ -0,0 +1,9 @@
# Editors
Better said: "why neovim is currently my favorite editor" :wink:
## Current Config
You can find my current Config along with other things in my [gitea snippet-git](https://gitea.dresselhaus.cloud/Drezil/snippets).
[[TODO]]: write more awesomesauce :wink:

View File

@ -0,0 +1,35 @@
---
title: Keyboard-Layouts
---
# My Keyboard-Layout
Since around 2006 i basically write only using the
[NEO2](https://neo-layout.org)-Layout. There are many advantages that are not obvious to
an onlooker right away.
Don't get me wrong. I still can type QWERTZ - just because you learn an
additional layout does not mean that you forget everything from before.
The secret sauce lies in the deeper layers. Especially layer 3 having all the
"hard to reach" things like brackets, braces, etc. right on the home row.
And the 4th layer is *magic* for text-navigation. Left hand has the full
navigation, right hand has the complete Numpad - even on laptop-keyboards that
are lacking those.
For me as a person having the usual German Keyboard with AltGr this just means:
- Putting the thumb down on AltGr - it is above there anyway.
- Use left hand as normal arrow-keys (that work EVERYWHERE because they are just
arrow keys)
- Also use Home/End/PgUp/PgDown/...
Before i always had to switch over or hope that a thing had support for
vi-style "hjkl".
Thats why i also prefer [[Opinions/Editors|Neovim]] as my primary editor - just not having to
touch your mouse at any time for anything is such a godsend :smile:
Best thing: If you don't want to switch, there is also a "Neo-QWERTZ"-variant ..
where you can just try the deeper layers while not leaving your QWERTZ-layout
behind. But i have just seen and never tried it. Your experience may be sub-par.

5
content/TODO.md Normal file
View File

@ -0,0 +1,5 @@
---
title: Todo
---
Todo List in backlinks below vvv

View File

@ -46,37 +46,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -87,12 +115,25 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<head-main></head-main> <head-main></head-main>
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -106,7 +147,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -132,6 +173,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -170,10 +212,6 @@
<h1 class='pb-2 mt-2 mb-2 text-6xl text-center'> <h1 class='pb-2 mt-2 mb-2 text-6xl text-center'>
Index Index
</h1> </h1>
<div class='flex justify-center items-center mb-2'>
<a target='_blank' class='italic underline' href='https://github.com/srid/emanote/discussions/50'>Experimental
feature</a> !
</div>
<div class='pb-2 mx-auto my-4 lg:max-w-screen-md '> <div class='pb-2 mx-auto my-4 lg:max-w-screen-md '>
<div class='pt-1 pb-2 pl-4 bg-gray-200'> <div class='pt-1 pb-2 pl-4 bg-gray-200'>
@ -436,8 +474,8 @@
</svg> </svg>
<a class='font-bold hover:underline truncate' title='Haskell' href='Haskell'> <a class='font-bold hover:underline truncate' title='Coding' href='Coding'>
Haskell Coding
</a> </a>
@ -472,8 +510,8 @@
</svg> </svg>
<a class='font-bold hover:underline truncate' title='Code-Snippets' href='Haskell/Code%20Snippets'> <a class='font-bold hover:underline truncate' title='Haskell' href='Coding/Haskell'>
Code-Snippets Haskell
</a> </a>
@ -508,166 +546,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='*-Morpisms' href='Haskell/Code%20Snippets/Morphisms'> <a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Coding/Haskell/Advantages'>
*-Morpisms
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Monoid? Da war doch was…' href='Haskell/Code%20Snippets/Monoid'>
Monoid? Da war doch was…
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Haskell/FFPiH'>
Fortgeschrittene funktionale Programmierung in Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Lenses' href='Haskell/Lenses'>
Lenses
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Haskell/Advantages'>
Talks und Posts zu Haskell Talks und Posts zu Haskell
</a> </a>
@ -706,7 +585,202 @@
</svg> </svg>
<a class='font-bold hover:underline truncate' title='Webapp-Development in Haskell' href='Haskell/Webapp-Example'> <a class='font-bold hover:underline truncate' title='Code-Snippets' href='Coding/Haskell/Code%20Snippets'>
Code-Snippets
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Monoid? Da war doch was…' href='Coding/Haskell/Code%20Snippets/Monoid'>
Monoid? Da war doch was…
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='*-Morpisms' href='Coding/Haskell/Code%20Snippets/Morphisms'>
*-Morpisms
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Coding/Haskell/FFPiH'>
Fortgeschrittene funktionale Programmierung in Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Lenses' href='Coding/Haskell/Lenses'>
Lenses
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-700' viewBox='0 0 20 20' fill='currentColor'>
<path fill-rule='evenodd' d='M2 6a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1H8a3 3 0 00-3 3v1.5a1.5 1.5 0 01-3 0V6z' clip-rule='evenodd'></path>
<path d='M6 12a2 2 0 012-2h8a2 2 0 012 2v2a2 2 0 01-2 2H2h2a2 2 0 002-2v-2z'></path>
</svg>
<a class='font-bold hover:underline truncate' title='Webapp-Development in Haskell' href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell Webapp-Development in Haskell
</a> </a>
@ -742,7 +816,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Webapp-Example: Main.hs' href='Haskell/Webapp-Example/Main.hs'> <a class='hover:underline truncate' title='Webapp-Example: Main.hs' href='Coding/Haskell/Webapp-Example/Main.hs'>
Webapp-Example: Main.hs Webapp-Example: Main.hs
</a> </a>
@ -781,7 +855,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Webapp-Example: MyService/Types.hs' href='Haskell/Webapp-Example/MyService_Types.hs'> <a class='hover:underline truncate' title='Webapp-Example: MyService/Types.hs' href='Coding/Haskell/Webapp-Example/MyService_Types.hs'>
Webapp-Example: MyService/Types.hs Webapp-Example: MyService/Types.hs
</a> </a>
@ -814,6 +888,48 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Openapi-generator' href='Coding/OpenAPI'>
Openapi-generator
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -853,6 +969,162 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-700' viewBox='0 0 20 20' fill='currentColor'>
<path fill-rule='evenodd' d='M2 6a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1H8a3 3 0 00-3 3v1.5a1.5 1.5 0 01-3 0V6z' clip-rule='evenodd'></path>
<path d='M6 12a2 2 0 012-2h8a2 2 0 012 2v2a2 2 0 01-2 2H2h2a2 2 0 002-2v-2z'></path>
</svg>
<a class='font-bold hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Editors' href='Opinions/Editors'>
Editors
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Keyboard-Layouts' href='Opinions/Layout'>
Keyboard-Layouts
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -1058,7 +1330,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -1090,6 +1362,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -46,37 +46,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -87,12 +115,25 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<head-main></head-main> <head-main></head-main>
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -106,7 +147,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -132,6 +173,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -170,10 +212,6 @@
<h1 class='pb-2 mt-2 mb-2 text-6xl text-center'> <h1 class='pb-2 mt-2 mb-2 text-6xl text-center'>
Tag Index Tag Index
</h1> </h1>
<div class='flex justify-center items-center mb-2'>
<a target='_blank' class='italic underline' href='https://github.com/srid/emanote/discussions/50'>Experimental
feature</a> !
</div>
<div class='pb-2 mx-auto my-4 lg:max-w-screen-md '> <div class='pb-2 mx-auto my-4 lg:max-w-screen-md '>
<div class='bg-gray-200 pb-2'> <div class='bg-gray-200 pb-2'>
@ -217,7 +255,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -249,6 +287,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -46,37 +46,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -87,12 +115,25 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<head-main></head-main> <head-main></head-main>
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -106,7 +147,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -132,6 +173,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -170,10 +212,6 @@
<h1 class='pb-2 mt-2 mb-2 text-6xl text-center'> <h1 class='pb-2 mt-2 mb-2 text-6xl text-center'>
Task Index Task Index
</h1> </h1>
<div class='flex justify-center items-center mb-2'>
<a target='_blank' class='italic underline' href='https://github.com/srid/emanote/discussions/50'>Experimental
feature</a> !
</div>
<div class='pb-2 mx-auto my-4 lg:max-w-screen-md '> <div class='pb-2 mx-auto my-4 lg:max-w-screen-md '>
<div class='w-full bg-gray-300'> <div class='w-full bg-gray-300'>
@ -202,7 +240,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -234,6 +272,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -465,13 +507,13 @@
</svg> </svg>
<a class='hover:underline truncate' title='Haskell' href='Haskell'> <a class='hover:underline truncate' title='Coding' href='Coding'>
Haskell Coding
</a> </a>
<span class='text-gray-300' title='5 children inside'> <span class='text-gray-300' title='2 children inside'>
5 2
</span> </span>
@ -530,6 +572,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -639,46 +757,55 @@
<!-- What goes in this file will appear on top of note body--> <!-- What goes in this file will appear on top of note body-->
<nav> <nav>
<div class='mb-8'> <div class='mb-8'>
<header class='pb-2 mb-2 font-semibold text-gray-600'> <header data-nosnippet class='pb-2 mb-2 font-semibold text-gray-600'>
Pages matching path './*' Pages matching path './*'
</header> </header>
<ul>
<li>
<div class='flex flex-wrap my-2'> <div class='flex flex-wrap my-2'>
<span class='mr-2 text-right text-gray-600'> <span data-nosnippet class='mr-2 text-right text-gray-600'>
</span> </span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='About/CV'> <a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='About/CV'>
About me About me
</a> </a>
</div> </div>
</li>
<li>
<div class='flex flex-wrap my-2'> <div class='flex flex-wrap my-2'>
<span class='mr-2 text-right text-gray-600'> <span data-nosnippet class='mr-2 text-right text-gray-600'>
</span> </span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='About/Experience'> <a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='About/Experience'>
Highlights of my experiences in the programming world Highlights of my experiences in the programming world
</a> </a>
</div> </div>
</li>
<li>
<div class='flex flex-wrap my-2'> <div class='flex flex-wrap my-2'>
<span class='mr-2 text-right text-gray-600'> <span data-nosnippet class='mr-2 text-right text-gray-600'>
</span> </span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='About/Work'> <a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='About/Work'>
Work-Experience Work-Experience
</a> </a>
</div> </div>
</li>
</ul>
</div> </div>
</nav><div class='text-gray-400 border-t-2 inline-block pt-0.5'> </nav><div class='text-gray-400 border-t-2 inline-block pt-0.5'>
<p class='mb-3'> <p class='mb-3'>
Note: To override the auto-generated content here, create a file named one of: <span class='font-mono text-sm'>About.md, About.org</span> Note: To override the auto-generated content here, create a file named one of: <span class='font-mono text-sm'>About.md, About.org</span>
</p> </p>
</div> </div>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -724,7 +851,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -756,6 +883,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -476,13 +518,13 @@
</svg> </svg>
<a class='hover:underline truncate' title='Haskell' href='Haskell'> <a class='hover:underline truncate' title='Coding' href='Coding'>
Haskell Coding
</a> </a>
<span class='text-gray-300' title='5 children inside'> <span class='text-gray-300' title='2 children inside'>
5 2
</span> </span>
@ -541,6 +583,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -663,7 +781,7 @@
</h1> </h1>
<article class='overflow-auto'> <article class='overflow-auto'>
<!-- What goes in this file will appear on top of note body--> <!-- What goes in this file will appear on top of note body-->
<h1 id='stefan-dresselhaus' class='pb-2 mb-2 text-5xl font-bold text-center'>Stefan Dresselhaus</h1><div xmlhtmlRaw><img align="right" style='border:1px solid #000000; float:right; margin-left:20px' height='300px' src="/About/DresselhausStefan_klein2.jpg"/> <h1 id='drezil' class='pb-2 mb-2 text-5xl font-bold text-center'>Drezil</h1><div xmlhtmlRaw><img class="border border-solid w32 rounded-xl lg:rounded-3xl lg:w64 float-right" style=" border-color: rgb(217 70 239);" src="/About/avatar_neu.png"/>
</div><h2 id='work' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Work</h2> </div><h2 id='work' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Work</h2>
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
@ -676,7 +794,7 @@
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
ML-Specialist at <a href='https://jobware.de' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Jobware</a> (Paderborn; german Job-Advertising-Platform) ML-Specialist at <a href='https://jobware.de' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Jobware</a> (Paderborn; german Job-Advertising-Platform)
</li> </li>
</ul> </ul>
@ -708,7 +826,7 @@
</li> </li>
<li> <li>
<a href='Haskell/FFPiH' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkBranch'>Lecture "Intermediate Functional Programming in Haskell"</a> <a href='Coding/Haskell/FFPiH' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkBranch'>Lecture "Intermediate Functional Programming in Haskell"</a>
</li> </li>
<li> <li>
@ -821,6 +939,7 @@
</ul> </ul>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -866,7 +985,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -898,6 +1017,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -476,13 +518,13 @@
</svg> </svg>
<a class='hover:underline truncate' title='Haskell' href='Haskell'> <a class='hover:underline truncate' title='Coding' href='Coding'>
Haskell Coding
</a> </a>
<span class='text-gray-300' title='5 children inside'> <span class='text-gray-300' title='2 children inside'>
5 2
</span> </span>
@ -541,6 +583,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -698,55 +816,55 @@
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
<a href='https://github.com/Drezil/' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>My Profile</a> <a href='https://github.com/Drezil/' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>My Profile</a>
</li> </li>
<li> <li>
<a href='https://github.com/FFPiHaskell/' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Haskell-Lecture</a> <a href='https://github.com/FFPiHaskell/' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Haskell-Lecture</a>
</li> </li>
<li> <li>
<a href='https://github.com/DataHaskell' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Co-Founder of DataHaskell</a> <a href='https://github.com/DataHaskell' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Co-Founder of DataHaskell</a>
</li> </li>
</ul> </ul>
<h2 id='gitea' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>gitea</h2> <h2 id='gitea' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>gitea</h2>
<p class='mb-3'> <p class='mb-3'>
I also have a <a href='https://gitea.dresselhaus.cloud/explore/repos' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>gitea-instance</a> where one can finde more current things and backups of old. I also have a <a href='https://gitea.dresselhaus.cloud/explore/repos' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>gitea-instance</a> where one can finde more current things and backups of old.
</p> </p>
<h3 id='highlights' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Highlights</h3> <h3 id='highlights' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Highlights</h3>
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
<strong>Author</strong> of Eve-Online-Interface in <a href='https://github.com/thoughtbot/yesod-auth-oauth2/pull/33' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>yesod-auth-oauth2</a> <strong>Author</strong> of Eve-Online-Interface in <a href='https://github.com/thoughtbot/yesod-auth-oauth2/pull/33' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>yesod-auth-oauth2</a>
</li> </li>
<li> <li>
<strong>Author</strong> of “New Eden Accounting Tool” (<a href='https://github.com/Drezil/neat' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>neat</a>), which is basically a ledger for Trading in the game Eve-Online <strong>Author</strong> of “New Eden Accounting Tool” (<a href='https://github.com/Drezil/neat' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>neat</a>), which is basically a ledger for Trading in the game Eve-Online
</li> </li>
<li> <li>
Driver behind getting <a href='' class='text-purple-600 mavenLinkBold hover:underline'><a href='https://github.com/jgm/pandoc/issues/168' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>https://github.com/jgm/pandoc/issues/168</a></a> implemented and merged, because we needed it for our slide-filters (see <a href='About/Work' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkBranch'>Work-Experience</a> -&gt; Development of Filters) Driver behind getting <a href='' class='text-purple-600 mavenLinkBold hover:underline'><a href='https://github.com/jgm/pandoc/issues/168' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>https://github.com/jgm/pandoc/issues/168</a></a> implemented and merged, because we needed it for our slide-filters (see <a href='About/Work' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkBranch'>Work-Experience</a> -&gt; Development of Filters)
</li> </li>
<li> <li>
<strong>Author</strong> of <a href='https://github.com/Drezil/img2ascii' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>img2ascii</a> - Small cli-tool for converting images into terminal-codes & ascii using JuicyPixels, because i always forget what is on the images over an ssh-connection -.- <strong>Author</strong> of <a href='https://github.com/Drezil/img2ascii' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>img2ascii</a> - Small cli-tool for converting images into terminal-codes & ascii using JuicyPixels, because i always forget what is on the images over an ssh-connection -.-
</li> </li>
<li> <li>
<strong>Implemented Array-Fusion and Recycling</strong> for <a href='https://github.com/mikeizbicki/subhask/pull/57' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>subhask</a> as layed out in <a href='https://doi.org/10.1007/978-3-540-92995-6_15' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Recycle your Arrays</a> by Roman Leshchinskiy <strong>Implemented Array-Fusion and Recycling</strong> for <a href='https://github.com/mikeizbicki/subhask/pull/57' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>subhask</a> as layed out in <a href='https://doi.org/10.1007/978-3-540-92995-6_15' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Recycle your Arrays</a> by Roman Leshchinskiy
</li> </li>
<li> <li>
<a href='https://github.com/Drezil/htrace' class='text-purple-600 hover:underline' target='_blank' rel='noopener'><strong>Raytracer</strong> in Haskell for my Computergraphics-Course</a> <a href='https://github.com/Drezil/htrace' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'><strong>Raytracer</strong> in Haskell for my Computergraphics-Course</a>
</li> </li>
<li> <li>
<strong>implementation of <a href='https://github.com/Drezil/hgraph' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Densely Connected Bi-Clusters</a>-Algorithm</strong> in Haskell (<a href='https://www.researchgate.net/profile/Recep_Colak/publication/267918524_DENSELY-CONNECTED_BI-CLUSTERING/links/560f1aff08ae483375178a03.pdf' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Paper</a>) <strong>implementation of <a href='https://github.com/Drezil/hgraph' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Densely Connected Bi-Clusters</a>-Algorithm</strong> in Haskell (<a href='https://www.researchgate.net/profile/Recep_Colak/publication/267918524_DENSELY-CONNECTED_BI-CLUSTERING/links/560f1aff08ae483375178a03.pdf' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Paper</a>)
</li> </li>
<li> <li>
<a href='https://gitea.dresselhaus.cloud/Drezil/chemodiversity' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Chemodiversity-Project</a> at University during my masters. Complete with slideshow explaining everything. <a href='https://gitea.dresselhaus.cloud/Drezil/chemodiversity' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Chemodiversity-Project</a> at University during my masters. Complete with slideshow explaining everything.
</li> </li>
<li> <li>
@ -755,6 +873,7 @@
</ul> </ul>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -822,7 +941,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -854,6 +973,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -476,13 +518,13 @@
</svg> </svg>
<a class='hover:underline truncate' title='Haskell' href='Haskell'> <a class='hover:underline truncate' title='Coding' href='Coding'>
Haskell Coding
</a> </a>
<span class='text-gray-300' title='5 children inside'> <span class='text-gray-300' title='2 children inside'>
5 2
</span> </span>
@ -541,6 +583,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -701,7 +819,7 @@
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
ML-Specialist at <a href='https://jobware.de' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Jobware</a> (Paderborn; german Job-Advertising-Platform) ML-Specialist at <a href='https://jobware.de' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Jobware</a> (Paderborn; german Job-Advertising-Platform)
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
@ -833,7 +951,7 @@
</li> </li>
<li> <li>
Lecture “<a href='Haskell/FFPiH' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkNormal'>Intermediate Functional Programming in Haskell</a> Lecture “<a href='Coding/Haskell/FFPiH' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkNormal'>Intermediate Functional Programming in Haskell</a>
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
@ -873,15 +991,15 @@
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
Framework: <a href='https://github.com/mbotsch/revealSlides' class='text-purple-600 hover:underline' target='_blank' rel='noopener'><a href='https://github.com/mbotsch/revealSlides' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>https://github.com/mbotsch/revealSlides</a></a> Framework: <a href='https://github.com/mbotsch/revealSlides' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'><a href='https://github.com/mbotsch/revealSlides' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>https://github.com/mbotsch/revealSlides</a></a>
</li> </li>
<li> <li>
Example: <a href='https://github.com/mbotsch/eLearning' class='text-purple-600 hover:underline' target='_blank' rel='noopener'><a href='https://github.com/mbotsch/eLearning' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>https://github.com/mbotsch/eLearning</a></a> Example: <a href='https://github.com/mbotsch/eLearning' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'><a href='https://github.com/mbotsch/eLearning' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>https://github.com/mbotsch/eLearning</a></a>
</li> </li>
<li> <li>
Pandoc-Filters: <a href='https://github.com/mbotsch/pandoc-slide-filter' class='text-purple-600 hover:underline' target='_blank' rel='noopener'><a href='https://github.com/mbotsch/pandoc-slide-filter' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>https://github.com/mbotsch/pandoc-slide-filter</a></a> Pandoc-Filters: <a href='https://github.com/mbotsch/pandoc-slide-filter' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'><a href='https://github.com/mbotsch/pandoc-slide-filter' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>https://github.com/mbotsch/pandoc-slide-filter</a></a>
</li> </li>
</ul> </ul>
@ -898,6 +1016,7 @@
</ul> </ul>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -927,7 +1046,7 @@
<div class='mb-4 overflow-auto text-sm text-gray-500'> <div class='mb-4 overflow-auto text-sm text-gray-500'>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'> <div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div>Driver behind getting <a href='' class='text-gray-600 font-bold hover:bg-gray-50'><a href='https://github.com/jgm/pandoc/issues/168' class='text-gray-600 hover:underline' target='_blank' rel='noopener'>https://github.com/jgm/pandoc/issues/168</a></a> implemented and merged, because we needed it for our slide-filters (see <a href='About/Work' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkBranch'>Work-Experience</a> -&gt; Development of Filters)</div> <div>Driver behind getting <a href='' class='text-gray-600 font-bold hover:bg-gray-50'><a href='https://github.com/jgm/pandoc/issues/168' class='text-gray-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>https://github.com/jgm/pandoc/issues/168</a></a> implemented and merged, because we needed it for our slide-filters (see <a href='About/Work' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkBranch'>Work-Experience</a> -&gt; Development of Filters)</div>
</div> </div>
</div> </div>
@ -980,7 +1099,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -1012,6 +1131,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -391,13 +433,13 @@
</svg> </svg>
<a class='hover:underline truncate' title='Haskell' href='Haskell'> <a class='hover:underline truncate' title='Coding' href='Coding'>
Haskell Coding
</a> </a>
<span class='text-gray-300' title='5 children inside'> <span class='text-gray-300' title='2 children inside'>
5 2
</span> </span>
@ -456,6 +498,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -565,26 +683,31 @@
<!-- What goes in this file will appear on top of note body--> <!-- What goes in this file will appear on top of note body-->
<nav> <nav>
<div class='mb-8'> <div class='mb-8'>
<header class='pb-2 mb-2 font-semibold text-gray-600'> <header data-nosnippet class='pb-2 mb-2 font-semibold text-gray-600'>
Pages matching path './*' Pages matching path './*'
</header> </header>
<ul>
<li>
<div class='flex flex-wrap my-2'> <div class='flex flex-wrap my-2'>
<span class='mr-2 text-right text-gray-600'> <span data-nosnippet class='mr-2 text-right text-gray-600'>
</span> </span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Android/Einrichtung'> <a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Android/Einrichtung'>
Einrichtung Android-Smartphones Einrichtung Android-Smartphones
</a> </a>
</div> </div>
</li>
</ul>
</div> </div>
</nav><div class='text-gray-400 border-t-2 inline-block pt-0.5'> </nav><div class='text-gray-400 border-t-2 inline-block pt-0.5'>
<p class='mb-3'> <p class='mb-3'>
Note: To override the auto-generated content here, create a file named one of: <span class='font-mono text-sm'>Android.md, Android.org</span> Note: To override the auto-generated content here, create a file named one of: <span class='font-mono text-sm'>Android.md, Android.org</span>
</p> </p>
</div> </div>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -630,7 +753,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -662,6 +785,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -402,13 +444,13 @@
</svg> </svg>
<a class='hover:underline truncate' title='Haskell' href='Haskell'> <a class='hover:underline truncate' title='Coding' href='Coding'>
Haskell Coding
</a> </a>
<span class='text-gray-300' title='5 children inside'> <span class='text-gray-300' title='2 children inside'>
5 2
</span> </span>
@ -467,6 +509,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -599,7 +717,7 @@
</p> </p>
<h2 id='rom' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>ROM</h2> <h2 id='rom' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>ROM</h2>
<p class='mb-3'> <p class='mb-3'>
Ich benutze <a href='http://forum.xda-developers.com/showthread.php?t=840040' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Android Revolution HD</a> - die auf dem Original von HTC aufsetzt und für mich extrem stabil läuft (kein Absturz bisher). Bei anderen ROMs (CyanogenMod, ..) hab ich bei anderen Leuten mäßige Erfahrungen gemacht, die ein weiteres Patchen etc. notwendig gemacht haben. Allerdings kann man hier auch durchaus flexibel sein. Ich benutze <a href='http://forum.xda-developers.com/showthread.php?t=840040' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Android Revolution HD</a> - die auf dem Original von HTC aufsetzt und für mich extrem stabil läuft (kein Absturz bisher). Bei anderen ROMs (CyanogenMod, ..) hab ich bei anderen Leuten mäßige Erfahrungen gemacht, die ein weiteres Patchen etc. notwendig gemacht haben. Allerdings kann man hier auch durchaus flexibel sein.
</p> </p>
<h2 id='interface' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Interface</h2> <h2 id='interface' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Interface</h2>
<p class='mb-3'> <p class='mb-3'>
@ -607,7 +725,7 @@
</p> </p>
<p class='mb-3'> <p class='mb-3'>
Daher nutze ich den <a href='https://play.google.com/store/apps/details?id=ginlemon.flowerfree' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>SmartLauncher</a> (<a href='http://www.youtube.com/watch?v=DdJLYqNi7dY' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>YouTube-Preview</a>) mit <a href='https://play.google.com/store/apps/details?id=ginlemon.sltheme.oxygen' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>KDE-Theme</a> und <a href='https://play.google.com/store/apps/details?id=ginlemon.smartlauncher.notifier' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Notify-App</a> Daher nutze ich den <a href='https://play.google.com/store/apps/details?id=ginlemon.flowerfree' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>SmartLauncher</a> (<a href='http://www.youtube.com/watch?v=DdJLYqNi7dY' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>YouTube-Preview</a>) mit <a href='https://play.google.com/store/apps/details?id=ginlemon.sltheme.oxygen' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>KDE-Theme</a> und <a href='https://play.google.com/store/apps/details?id=ginlemon.smartlauncher.notifier' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Notify-App</a>
</p> </p>
<p class='mb-3'> <p class='mb-3'>
@ -615,11 +733,11 @@
</p> </p>
<h2 id='kalenderkontakte' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Kalender/Kontakte</h2> <h2 id='kalenderkontakte' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Kalender/Kontakte</h2>
<p class='mb-3'> <p class='mb-3'>
Kürzlich habe ich meinen Kalender eingerichtet. Ich wollte, dass dieser synchron ist mit meiner (<a href='http://owncloud.org/' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>owncloud</a>), welche auf meinem Server läuft. Dies kann man sich auch selbst zu Haus einrichten (z.b. auf einem Raspberry Pi und per dyndns nach außen freigeben). Ich gebe meine Kalender und Kontaktdaten ungerne an Google, Yahoo, Facebook, etc. pp. Kürzlich habe ich meinen Kalender eingerichtet. Ich wollte, dass dieser synchron ist mit meiner (<a href='http://owncloud.org/' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>owncloud</a>), welche auf meinem Server läuft. Dies kann man sich auch selbst zu Haus einrichten (z.b. auf einem Raspberry Pi und per dyndns nach außen freigeben). Ich gebe meine Kalender und Kontaktdaten ungerne an Google, Yahoo, Facebook, etc. pp.
</p> </p>
<p class='mb-3'> <p class='mb-3'>
<a href='https://play.google.com/store/apps/details?id=net.daum.android.solcalendar' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>SolCalendar</a> ist einer der wenigen, welche das CalDav-Format frei konfigurierbar unterstützten. Bei vielen anderen hat man dort Google oder Yahoo zur Auswahl - aber kann keinen eigenen Server eingeben. Dies synchronisiert auch in den Android-Eigenen Kalender hinein (Vorsicht: Google-Kalender-Synchronisation ausschalten! Sonst hat man wieder alles da..) und kann somit z.b. vom Standard “Sperrbildschirm” angezeigt werden. <a href='https://play.google.com/store/apps/details?id=net.daum.android.solcalendar' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>SolCalendar</a> ist einer der wenigen, welche das CalDav-Format frei konfigurierbar unterstützten. Bei vielen anderen hat man dort Google oder Yahoo zur Auswahl - aber kann keinen eigenen Server eingeben. Dies synchronisiert auch in den Android-Eigenen Kalender hinein (Vorsicht: Google-Kalender-Synchronisation ausschalten! Sonst hat man wieder alles da..) und kann somit z.b. vom Standard “Sperrbildschirm” angezeigt werden.
</p> </p>
<p class='mb-3'> <p class='mb-3'>
@ -627,7 +745,7 @@
</p> </p>
<p class='mb-3'> <p class='mb-3'>
Für die Kontakte lege ich jedem diesen Programmierer ans Herz: <a href='https://play.google.com/store/apps/developer?id=Marten+Gajda' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Marten Gajda</a> - sämtliche Apps funktionieren miteinander, sind aber zum Teil kostenbehaftet. CardDav Sync free synchronisiert Kontakte allerdings tadellos. Für den Kalender (mit ähnlichen Features wie beim SolCalendar) werden aber 2,59€ fällig. Langfristig soll dieser aber auch OpenSource (und damit kostenfrei) werden. Für die Kontakte lege ich jedem diesen Programmierer ans Herz: <a href='https://play.google.com/store/apps/developer?id=Marten+Gajda' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Marten Gajda</a> - sämtliche Apps funktionieren miteinander, sind aber zum Teil kostenbehaftet. CardDav Sync free synchronisiert Kontakte allerdings tadellos. Für den Kalender (mit ähnlichen Features wie beim SolCalendar) werden aber 2,59€ fällig. Langfristig soll dieser aber auch OpenSource (und damit kostenfrei) werden.
</p> </p>
<h2 id='nützliche-apps' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Nützliche Apps</h2> <h2 id='nützliche-apps' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Nützliche Apps</h2>
<p class='mb-3'> <p class='mb-3'>
@ -637,51 +755,52 @@
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
<a href='https://play.google.com/store/apps/details?id=com.estrongs.android.pop' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>ES Datei Explorer</a> Dateien öffnen, verschieben, suchen, … Inkl. Media-Player etc. <a href='https://play.google.com/store/apps/details?id=com.estrongs.android.pop' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>ES Datei Explorer</a> Dateien öffnen, verschieben, suchen, … Inkl. Media-Player etc.
</li> </li>
<li> <li>
<a href='https://play.google.com/store/apps/details?id=com.suishouxie.freenote' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Free Note</a> Kurze Notizen <a href='https://play.google.com/store/apps/details?id=com.suishouxie.freenote' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Free Note</a> Kurze Notizen
</li> </li>
<li> <li>
<a href='https://play.google.com/store/apps/details?id=com.aldiko.android' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Alkido</a> eBook-Reader (auch für pdf) <a href='https://play.google.com/store/apps/details?id=com.aldiko.android' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Alkido</a> eBook-Reader (auch für pdf)
</li> </li>
<li> <li>
<a href='https://play.google.com/store/apps/details?id=dk.tacit.android.foldersync.lite' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Folder Sync</a> Sync von Dateien mit meiner ownCloud (z.Zt. nur manueller batch-upload von Fotos bei mir) <a href='https://play.google.com/store/apps/details?id=dk.tacit.android.foldersync.lite' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Folder Sync</a> Sync von Dateien mit meiner ownCloud (z.Zt. nur manueller batch-upload von Fotos bei mir)
</li> </li>
<li> <li>
<a href='https://play.google.com/store/apps/details?id=com.flipdog.crypto.plugin' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>GnuPG-Client</a> <a href='https://play.google.com/store/apps/details?id=com.flipdog.crypto.plugin' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>GnuPG-Client</a>
</li> </li>
<li> <li>
<a href='https://play.google.com/store/apps/details?id=com.fsck.k9' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Mail</a> <a href='https://play.google.com/store/apps/details?id=com.fsck.k9' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Mail</a>
</li> </li>
<li> <li>
<a href='https://play.google.com/store/apps/details?id=org.videolan.vlc.betav7neon' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>VLC</a> Alternativer Media-Player für “komische” Formate, kaputte Dateien etc. <a href='https://play.google.com/store/apps/details?id=org.videolan.vlc.betav7neon' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>VLC</a> Alternativer Media-Player für “komische” Formate, kaputte Dateien etc.
</li> </li>
<li> <li>
<a href='https://play.google.com/store/apps/details?id=com.rootuninstaller.free' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Root Uninstaller</a> Entfernen von Applikationen auf der Systempartition (z.b. Facebook, Chromium, …) Vorsicht: KANN eine Neuinstallation nötig machen, wenn wichtige Dinge gelöscht werden! <a href='https://play.google.com/store/apps/details?id=com.rootuninstaller.free' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Root Uninstaller</a> Entfernen von Applikationen auf der Systempartition (z.b. Facebook, Chromium, …) Vorsicht: KANN eine Neuinstallation nötig machen, wenn wichtige Dinge gelöscht werden!
</li> </li>
<li> <li>
<a href='https://play.google.com/store/apps/details?id=com.ichi2.anki' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>AnkiDroid</a> Vokabeln/Sprachen etc. lernen unterwegs. <a href='https://play.google.com/store/apps/details?id=com.ichi2.anki' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>AnkiDroid</a> Vokabeln/Sprachen etc. lernen unterwegs.
</li> </li>
</ul> </ul>
<h2 id='lmt' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>LMT</h2> <h2 id='lmt' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>LMT</h2>
<p class='mb-3'> <p class='mb-3'>
Der letzte Schrei auf gerooteten Smartphones ist LMT: <a href='http://www.youtube.com/watch?v=oha8ijaD9dc' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>YouTube-Demo</a>. Der letzte Schrei auf gerooteten Smartphones ist LMT: <a href='http://www.youtube.com/watch?v=oha8ijaD9dc' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>YouTube-Demo</a>.
</p> </p>
<p class='mb-3'> <p class='mb-3'>
<a href='http://pocketnow.com/2013/02/05/lmt-launcher-for-android' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Installations-Anleitung</a> <a href='http://pocketnow.com/2013/02/05/lmt-launcher-for-android' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Installations-Anleitung</a>
</p> </p>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -727,7 +846,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -759,6 +878,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

844
static_gen/Coding.html Normal file
View File

@ -0,0 +1,844 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8' />
<meta name='viewport' content='width=device-width, initial-scale=1' />
<title>
Coding Home
</title>
<meta property='og:description' content />
<meta property='og:site_name' content='Home' />
<meta property='og:image' content />
<meta property='og:type' content='website' />
<meta property='og:title' content='Coding' />
<base href='/' />
<link href='favicon.svg' rel='icon' />
<script>
window.MathJax = {
startup: {
ready: () => {
MathJax.startup.defaultReady();
}
}
};
</script>
<script async id='MathJax-script' src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js'></script>
<!-- mermaid.js --><script src='https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js'></script>
<script>
mermaid.initialize({startOnLoad:false});
mermaid.init(undefined,document.querySelectorAll(".mermaid"));
</script>
<!-- highlight.js -->
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/styles/hybrid.min.css' />
<script src='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js'></script>
<!-- Include languages that Emanote itself uses -->
<script src='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/languages/haskell.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/languages/nix.min.js'></script>
<script>hljs.highlightAll();</script>
<link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<style>
/* Heist error element */
strong.error {
color: lightcoral;
font-size: 90%;
font-family: monospace;
}
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style>
@font-face {
font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap;
}
body {
font-family: 'WorkSans', sans-serif;
font-variation-settings: 'wght' 350;
}
a.mavenLinkBold {
font-variation-settings: 'wght' 400;
}
strong {
font-variation-settings: 'wght' 500;
}
h1,
h2,
h3,
h4,
h5,
h6,
header,
.header-font {
font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
}
</style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote -->
<style>
#stork-search-container {
z-index: 1000;
background-color: rgb(15 23 42/.8);
}
.stork-overflow-hidden-important {
overflow: hidden !important;
}
</style>
<script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'>
window.emanote = {};
window.emanote.stork = {
searchShown: false,
toggleSearch: function () {
document.getElementById('stork-search-container').classList.toggle('hidden');
window.emanote.stork.searchShown = document.body.classList.toggle('stork-overflow-hidden-important');
if (window.emanote.stork.searchShown) {
document.getElementById('stork-search-input').focus();
}
},
clearSearch: function () {
document.getElementById('stork-search-container').classList.add('hidden');
document.body.classList.remove('stork-overflow-hidden-important');
window.emanote.stork.searchShown = false;
},
init: function () {
const indexName = 'emanote-search'; // used to match input[data-stork] attribute value
const baseUrl = document.currentScript.getAttribute('data-emanote-base-url') || '/';
const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') {
window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl);
});
document.addEventListener('keydown', event => {
if (window.emanote.stork.searchShown && event.key === 'Escape') {
window.emanote.stork.clearSearch();
event.preventDefault();
} else if ((event.key == 'k' || event.key == 'K') && (event.ctrlKey || event.metaKey)) {
window.emanote.stork.toggleSearch();
event.preventDefault();
}
});
} else {
// Override existing on Ema's hot-reload
stork.register(indexName, indexUrl, { forceOverwrite: true });
}
}
};
window.emanote.stork.init();
</script>
</head>
<!-- DoNotFormat -->
<!-- DoNotFormat -->
<body class='bg-gray-400 overflow-y-scroll'>
<div class='container mx-auto'>
<nav id='breadcrumbs' class='w-full text-gray-700 md:hidden'>
<div class='flex justify-left'>
<div class='w-full px-2 py-2 bg-gray-50'>
<ul class='flex flex-wrap text-lg'>
<li class='inline-flex items-center'>
<img style='width: 1rem;' src='favicon.svg' />
</li>
<li class='inline-flex items-center'>
<a class='px-1 font-bold' href=''>
Home
</a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
<path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path>
</svg>
</li>
</ul>
</div>
<button class='inline px-2 py-1 bg-gray-50 outline-none cursor-pointer focus:outline-none' title='Search (Ctrl+K)' type='button' onclick='window.emanote.stork.toggleSearch()'>
<svg xmlns='http://www.w3.org/2000/svg' style='width: 1rem;' class='hover:text-purple-700' f
fill='none' viewBox='0 0 24 24' stroke='currentColor' stroke-width='2'>
<path stroke-linecap='round' stroke-linejoin='round' d='M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z'></path>
</svg>
</button>
<button class='inline px-2 py-1 text-white bg-purple-600 outline-none cursor-pointer focus:outline-none' title='Toggle sidebar' type='button' onclick="toggleHidden('sidebar')">
<svg xmlns='http://www.w3.org/2000/svg' class='w-4' fill='none' viewBox='0 0 24 24' stroke='currentColor'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 6h16M4 12h16M4 18h16'></path>
</svg>
</button>
<script>
function toggleHidden(elemId) {
document.getElementById(elemId).classList.toggle("hidden");
}
</script>
</div>
</nav>
<div id='container' class='flex flex-nowrap flex-col md:flex-row bg-gray-50 md:mt-8 md:shadow-2xl md:mb-8'>
<!-- Sidebar column -->
<nav id='sidebar' class='flex-shrink hidden leading-relaxed md:block md:sticky md:top-0 md:h-full md:w-48 xl:w-64'>
<div class='px-2 py-2 text-gray-800'>
<div id='indexing-links' class='flex flex-row float-right p-2 space-x-2 text-gray-500'>
<a href='-/tags' title='View tags'>
<svg style='width: 1rem;' class='hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z'>
</path>
</svg>
</a>
<a href='-/all' title='Expand full tree'>
<svg style='width: 1rem;' class='hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4'>
</path>
</svg>
</a>
<a title='Search (Ctrl+K)' class='cursor-pointer' onclick='window.emanote.stork.toggleSearch()'>
<svg xmlns='http://www.w3.org/2000/svg' style='width: 1rem;' class='hover:text-purple-700' f
fill='none' viewBox='0 0 24 24' stroke='currentColor' stroke-width='2'>
<path stroke-linecap='round' stroke-linejoin='round' d='M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z'></path>
</svg>
</a>
</div>
<div id='site-logo' class='pl-2'>
<div class='flex items-center my-2 space-x-2 justify-left'>
<a href='' title='Go to Home'>
<!-- The style width attribute here is to prevent huge
icon from displaying at those rare occasions when Tailwind
hasn't kicked in immediately on page load
-->
<img style='width: 1rem;' class='transition transform hover:scale-110 hover:opacity-80' src='favicon.svg' />
</a>
<a class='font-bold truncate' title='Go to Home' href=''>
Home
</a>
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='About' href='About'>
About
</a>
<span class='text-gray-300' title='3 children inside'>
3
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Android' href='Android'>
Android
</a>
<span class='text-gray-300' title='1 children inside'>
1
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-700' viewBox='0 0 20 20' fill='currentColor'>
<path fill-rule='evenodd' d='M2 6a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1H8a3 3 0 00-3 3v1.5a1.5 1.5 0 01-3 0V6z' clip-rule='evenodd'></path>
<path d='M6 12a2 2 0 012-2h8a2 2 0 012 2v2a2 2 0 01-2 2H2h2a2 2 0 002-2v-2z'></path>
</svg>
<a class='font-bold text-purple-600 hover:underline truncate' title='Coding' href='Coding'>
Coding
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Haskell' href='Coding/Haskell'>
Haskell
</a>
<span class='text-gray-300' title='5 children inside'>
5
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Openapi-generator' href='Coding/OpenAPI'>
Openapi-generator
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Logik für Dummies' href='Logik'>
Logik für Dummies
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Uni' href='Uni'>
Uni
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Unix' href='Unix'>
Unix
</a>
<span class='text-gray-300' title='1 children inside'>
1
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
</nav>
<!-- Main body column -->
<div class='flex-1 w-full overflow-x-auto bg-white'>
<main class='px-4 py-4'>
<!-- DoNotFormat -->
<!-- DoNotFormat -->
<nav id='uptree' class='flipped tree' style='transform-origin: 50%;'>
<ul class='root'>
<li>
<ul>
<li>
<div class='text-gray-900 forest-link'>
<a href=''>
Home
</a>
</div>
</li>
</ul>
</li>
</ul>
</nav>
<h1 class='flex items-end justify-center mb-4 p-3 bg-purple-100 text-5xl font-extrabold text-black rounded'>
<a class='z-40 tracking-tighter '>
Coding
</a>
</h1>
<article class='overflow-auto'>
<!-- What goes in this file will appear on top of note body-->
<nav>
<div class='mb-8'>
<header data-nosnippet class='pb-2 mb-2 font-semibold text-gray-600'>
Pages matching path './*'
</header>
<ul>
<li>
<div class='flex flex-wrap my-2'>
<span data-nosnippet class='mr-2 text-right text-gray-600'>
</span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Coding/Haskell'>
Haskell
</a>
</div>
</li>
<li>
<div class='flex flex-wrap my-2'>
<span data-nosnippet class='mr-2 text-right text-gray-600'>
</span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Coding/OpenAPI'>
Openapi-generator
</a>
</div>
</li>
</ul>
</div>
</nav><div class='text-gray-400 border-t-2 inline-block pt-0.5'>
<p class='mb-3'>
Note: To override the auto-generated content here, create a file named one of: <span class='font-mono text-sm'>Coding.md, Coding.org</span>
</p>
</div>
<!-- div class="flex items-center justify-center mt-2">
<ema:metadata>
<with var="template">
<a class="text-gray-300 hover:text-${theme}-600 text-sm" title="Edit this page on GitHub"
href="${value:editBaseUrl}/${ema:note:source-path}">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" />
</svg>
</a>
</with>
</ema:metadata>
</div -->
</article>
<div class='flex flex-col lg:flex-row lg:space-x-2'>
</div>
<section class='flex flex-wrap items-end justify-center my-4 space-x-2 space-y-2 font-mono text-sm'>
</section>
<!-- What goes in this file will at the very end of the main div -->
</main>
</div>
</div>
<footer class='flex items-center justify-center mt-2 mb-8 space-x-4 text-center text-gray-800'>
<div>
<a href='' title='Go to Home page'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-6 h-6 hover:text-purple-700' fill='none' viewBox='0 0 24 24' stroke='currentColor'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6'></path>
</svg>
</a>
</div>
<div>
<a href='-/all' title='View Index'>
<svg class='w-6 h-6 hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4'>
</path>
</svg>
</a>
</div>
<div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a>
</div>
<div>
<a href='-/tags' title='View tags'>
<svg class='w-6 h-6 hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z'>
</path>
</svg>
</a>
</div>
<div>
<a href='-/tasks' title='View tasks'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-6 h-6 hover:text-purple-700' fill='none' viewBox='0 0 24 24' stroke='currentColor'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z'></path>
</svg>
</a>
</div>
</footer>
</div>
<div id='stork-search-container' class='hidden fixed w-screen h-screen inset-0 backdrop-filter backdrop-blur-sm'>
<div class='fixed w-screen h-screen inset-0' onclick='window.emanote.stork.toggleSearch()'></div>
<div class='container mx-auto p-10 mt-10'>
<div class='stork-wrapper-flat container mx-auto'>
<input id='stork-search-input' data-stork='emanote-search' class='stork-input' placeholder='Search (Ctrl+K) ...' />
<div data-stork='emanote-search-output' class='stork-output'></div>
</div>
</div>
</div>
</body>
</html>

View File

@ -5,15 +5,15 @@
<meta charset='UTF-8' /> <meta charset='UTF-8' />
<meta name='viewport' content='width=device-width, initial-scale=1' /> <meta name='viewport' content='width=device-width, initial-scale=1' />
<title> <title>
Talks und Posts zu Haskell Home Haskell Home
</title> </title>
<meta property='og:description' content='Gründe Haskell zu nutzen und wo Vorteile liegen.' /> <meta property='og:description' content />
<meta property='og:site_name' content='Home' /> <meta property='og:site_name' content='Home' />
<meta property='og:image' content /> <meta property='og:image' content />
<meta property='og:type' content='website' /> <meta property='og:type' content='website' />
<meta property='og:title' content='Talks und Posts zu Haskell' /> <meta property='og:title' content='Haskell' />
<base href='/' /> <base href='/' />
@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -193,8 +235,8 @@
</li> </li>
<li class='inline-flex items-center'> <li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Haskell'> <a class='px-1 font-bold' href='Coding'>
Haskell Coding
</a> </a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'> <svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
<path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path> <path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path>
@ -370,7 +412,39 @@
</svg> </svg>
<a class='font-bold hover:underline truncate' title='Haskell' href='Haskell'> <a class='font-bold hover:underline truncate' title='Coding' href='Coding'>
Coding
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-700' viewBox='0 0 20 20' fill='currentColor'>
<path fill-rule='evenodd' d='M2 6a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1H8a3 3 0 00-3 3v1.5a1.5 1.5 0 01-3 0V6z' clip-rule='evenodd'></path>
<path d='M6 12a2 2 0 012-2h8a2 2 0 012 2v2a2 2 0 01-2 2H2h2a2 2 0 002-2v-2z'></path>
</svg>
<a class='font-bold text-purple-600 hover:underline truncate' title='Haskell' href='Coding/Haskell'>
Haskell Haskell
</a> </a>
@ -392,6 +466,43 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Coding/Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -403,7 +514,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Code-Snippets' href='Haskell/Code%20Snippets'> <a class='hover:underline truncate' title='Code-Snippets' href='Coding/Haskell/Code%20Snippets'>
Code-Snippets Code-Snippets
</a> </a>
@ -443,7 +554,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Haskell/FFPiH'> <a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Coding/Haskell/FFPiH'>
Fortgeschrittene funktionale Programmierung in Haskell Fortgeschrittene funktionale Programmierung in Haskell
</a> </a>
@ -480,7 +591,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Lenses' href='Haskell/Lenses'> <a class='hover:underline truncate' title='Lenses' href='Coding/Haskell/Lenses'>
Lenses Lenses
</a> </a>
@ -503,41 +614,6 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z'>
</path>
</svg>
<a class='font-bold text-purple-600 hover:underline truncate' title='Talks und Posts zu Haskell' href='Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
@ -551,7 +627,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Webapp-Development in Haskell' href='Haskell/Webapp-Example'> <a class='hover:underline truncate' title='Webapp-Development in Haskell' href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell Webapp-Development in Haskell
</a> </a>
@ -582,6 +658,46 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Openapi-generator' href='Coding/OpenAPI'>
Openapi-generator
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -619,6 +735,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -706,8 +898,8 @@
<li> <li>
<div class='text-gray-900 forest-link'> <div class='text-gray-900 forest-link'>
<a href='Haskell'> <a href='Coding'>
Haskell Coding
</a> </a>
</div> </div>
@ -736,131 +928,85 @@
</nav> </nav>
<h1 class='flex items-end justify-center mb-4 p-3 bg-purple-100 text-5xl font-extrabold text-black rounded'> <h1 class='flex items-end justify-center mb-4 p-3 bg-purple-100 text-5xl font-extrabold text-black rounded'>
<a class='z-40 tracking-tighter '> <a class='z-40 tracking-tighter '>
Talks und Posts zu Haskell Haskell
</a> </a>
</h1> </h1>
<article class='overflow-auto'> <article class='overflow-auto'>
<!-- What goes in this file will appear on top of note body--> <!-- What goes in this file will appear on top of note body-->
<nav>
<div class='mb-8'>
<header data-nosnippet class='pb-2 mb-2 font-semibold text-gray-600'>
Pages matching path './*'
</header>
<ul>
<li>
<div class='flex flex-wrap my-2'>
<span data-nosnippet class='mr-2 text-right text-gray-600'>
</span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Coding/Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
</li>
<li>
<div class='flex flex-wrap my-2'>
<span data-nosnippet class='mr-2 text-right text-gray-600'>
</span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Coding/Haskell/Code%20Snippets'>
Code-Snippets
</a>
</div>
</li>
<li>
<div class='flex flex-wrap my-2'>
<span data-nosnippet class='mr-2 text-right text-gray-600'>
</span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Coding/Haskell/FFPiH'>
Fortgeschrittene funktionale Programmierung in Haskell
</a>
</div>
</li>
<li>
<div class='flex flex-wrap my-2'>
<span data-nosnippet class='mr-2 text-right text-gray-600'>
</span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Coding/Haskell/Lenses'>
Lenses
</a>
</div>
</li>
<li>
<div class='flex flex-wrap my-2'>
<span data-nosnippet class='mr-2 text-right text-gray-600'>
</span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell
</a>
</div>
</li>
</ul>
</div>
</nav><div class='text-gray-400 border-t-2 inline-block pt-0.5'>
<p class='mb-3'> <p class='mb-3'>
Gründe Haskell zu nutzen und wo Vorteile liegen. Note: To override the auto-generated content here, create a file named one of: <span class='font-mono text-sm'>Coding/Haskell.md, Coding/Haskell.org</span>
</p> </p>
<h2 id='talks' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Talks</h2><h3 id='simon-peyton-jones' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Simon Peyton Jones</h3> </div>
<ul class='my-3 ml-6 space-y-1 list-disc'>
<li>
<a href='https://www.youtube.com/watch?v=hlyQjK1qjw8' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>The Future is parallel</a>
</li>
<li>
<a href='https://skillsmatter.com/skillscasts/4251-lenses-compositional-data-access-and-manipulation' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Lenses</a> (Registrierung nötig - kostenfrei), siehe auch: <a href='Haskell/Lenses' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkBranch'>Lenses</a>
</li>
</ul>
<h3 id='others' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Others</h3>
<ul class='my-3 ml-6 space-y-1 list-disc'>
<li>
<a href='https://www.youtube.com/watch?v=ZR3Jirqk6W8' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Running a Startup on Haskell</a>
</li>
<li>
<a href='https://www.youtube.com/watch?v=TS1lpKBMkgg' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Were doing it all wrong</a> - A Long-Term Scala-Compiler-Developer quits his job after years and tells why Scala is a mess.
</li>
<li>
<a href='https://www.youtube.com/watch?v=b0EF0VTs9Dc' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Monads explained in Javascript</a>
</li>
<li>
<a href='http://vimeo.com/95694918' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Vinyl Records</a> with <a href='https://github.com/VinylRecords/BayHac2014-Talk' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Slides</a>
</li>
<li>
<a href='http://begriffs.com/posts/2015-06-17-thinking-with-laziness.html' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Thinking with Laziness</a>
</li>
</ul>
<h2 id='bücherpaper' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Bücher/Paper</h2><h3 id='simon-peyton-jones-1' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Simon Peyton Jones</h3>
<ul class='my-3 ml-6 space-y-1 list-disc'>
<li>
<a href='https://research.microsoft.com/en-us/um/people/simonpj/papers/stm/' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Papers on STM</a>
</li>
<li>
<a href='https://research.microsoft.com/en-us/um/people/simonpj/papers/marktoberdorf/' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Tackling the awkward squad</a>
</li>
</ul>
<h3 id='others-1' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Others</h3>
<ul class='my-3 ml-6 space-y-1 list-disc'>
<li>
<a href='http://chimera.labs.oreilly.com/books/1230000000929/pr01.html' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Parallel and Concurrent Programming in Haskell</a>
</li>
<li>
<a href='http://scholar.google.de/scholar?cluster=7602244452224287116&hl=de&as_sdt=0,5' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Slides of a Quickcheck-Talk</a>
</li>
<li>
<a href='https://www.fpcomplete.com/user/bartosz/understanding-algebras' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Understanding F-Algebras</a> schöne Erklärung. Man könnte danach anfangen den <a href='Haskell/Code%20Snippets/Morphisms' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkBranch'>Morphismen-zoo</a> zu verstehen…
</li>
<li>
<a href='https://github.com/kqr/gists/blob/master/articles/gentle-introduction-monad-transformers.md' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Monad Transformers</a>
</li>
</ul>
<h2 id='funny-talks' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Funny Talks</h2>
<ul class='my-3 ml-6 space-y-1 list-disc'>
<li>
<a href='https://www.youtube.com/watch?v=o6L6XeNdd_k' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Tom LaGatta on Category-Theory</a>
</li>
<li>
<a href='https://www.youtube.com/watch?v=9EGYSb9vov8' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Unifying Structured Recursion Schemes</a> aka. <a href='Haskell/Code%20Snippets/Morphisms' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkNormal'>The Morphism-Zoo</a>
</li>
<li>
<a href='https://www.youtube.com/watch?v=IRGKkiGG5CY' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Hole-Driven-Development Teaser (Enthusiasticon, raichoo)</a>
</li>
</ul>
<h2 id='unsortedunseen' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Unsorted/Unseen</h2>
<ul class='my-3 ml-6 space-y-1 list-disc'>
<li>
<a href='http://insights.pwning.de/_edit/Haskell/Why_Haskell_is_superior' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Functional Reactive Programming</a>
</li>
<li>
<a href='http://vimeo.com/84104226' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Diagrams: Declarative Vector Graphics in Haskell</a>
</li>
<li>
<a href='https://www.youtube.com/watch?v=cefnmjtAolY' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Lenses, Folds & Traversels by Edward Kmett</a>
</li>
<li>
<a href='https://www.youtube.com/watch?v=cB8DapKQz-I&list=WL&index=10' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Discrimination is Wrong by Edward Kmett</a>
</li>
</ul>
<h2 id='tutorials' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Tutorials</h2>
<ul class='my-3 ml-6 space-y-1 list-disc'>
<li>
<a href='https://www.fpcomplete.com/school/starting-with-haskell/haskell-fast-hard/haskell-fast-hard-part-1' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Haskell fast and hard</a>
</li>
<li>
<a href='http://blog.functorial.com/posts/2015-12-06-Counterexamples.html' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Counterexamples for Typeclasses</a>
</li>
</ul>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
@ -907,7 +1053,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -939,6 +1085,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

File diff suppressed because it is too large Load Diff

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -193,7 +235,16 @@
</li> </li>
<li class='inline-flex items-center'> <li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Haskell'> <a class='px-1 font-bold' href='Coding'>
Coding
</a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
<path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path>
</svg>
</li>
<li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Coding/Haskell'>
Haskell Haskell
</a> </a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'> <svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
@ -370,7 +421,43 @@
</svg> </svg>
<a class='font-bold hover:underline truncate' title='Haskell' href='Haskell'> <a class='font-bold hover:underline truncate' title='Coding' href='Coding'>
Coding
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-700' viewBox='0 0 20 20' fill='currentColor'>
<path fill-rule='evenodd' d='M2 6a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1H8a3 3 0 00-3 3v1.5a1.5 1.5 0 01-3 0V6z' clip-rule='evenodd'></path>
<path d='M6 12a2 2 0 012-2h8a2 2 0 012 2v2a2 2 0 01-2 2H2h2a2 2 0 002-2v-2z'></path>
</svg>
<a class='font-bold hover:underline truncate' title='Haskell' href='Coding/Haskell'>
Haskell Haskell
</a> </a>
@ -390,6 +477,43 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Coding/Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -402,7 +526,7 @@
</svg> </svg>
<a class='font-bold text-purple-600 hover:underline truncate' title='Code-Snippets' href='Haskell/Code%20Snippets'> <a class='font-bold text-purple-600 hover:underline truncate' title='Code-Snippets' href='Coding/Haskell/Code%20Snippets'>
Code-Snippets Code-Snippets
</a> </a>
@ -436,50 +560,50 @@
</svg> </svg>
<a class='hover:underline truncate' title='*-Morpisms' href='Haskell/Code%20Snippets/Morphisms'> <a class='hover:underline truncate' title='Monoid? Da war doch was…' href='Coding/Haskell/Code%20Snippets/Monoid'>
*-Morpisms
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Monoid? Da war doch was…' href='Haskell/Code%20Snippets/Monoid'>
Monoid? Da war doch was… Monoid? Da war doch was…
</a> </a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='*-Morpisms' href='Coding/Haskell/Code%20Snippets/Morphisms'>
*-Morpisms
</a>
</div> </div>
<!-- Node's children forest, displayed only on active trees <!-- Node's children forest, displayed only on active trees
@ -513,7 +637,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Haskell/FFPiH'> <a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Coding/Haskell/FFPiH'>
Fortgeschrittene funktionale Programmierung in Haskell Fortgeschrittene funktionale Programmierung in Haskell
</a> </a>
@ -550,7 +674,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Lenses' href='Haskell/Lenses'> <a class='hover:underline truncate' title='Lenses' href='Coding/Haskell/Lenses'>
Lenses Lenses
</a> </a>
@ -575,43 +699,6 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -623,7 +710,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Webapp-Development in Haskell' href='Haskell/Webapp-Example'> <a class='hover:underline truncate' title='Webapp-Development in Haskell' href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell Webapp-Development in Haskell
</a> </a>
@ -654,6 +741,46 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Openapi-generator' href='Coding/OpenAPI'>
Openapi-generator
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -691,6 +818,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -778,12 +981,23 @@
<li> <li>
<div class='text-gray-900 forest-link'> <div class='text-gray-900 forest-link'>
<a href='Haskell'> <a href='Coding/Haskell'>
Haskell Haskell
</a> </a>
</div> </div>
<ul>
<li>
<div class='text-gray-900 forest-link'>
<a href='Coding'>
Coding
</a>
</div>
<ul> <ul>
<li> <li>
@ -799,6 +1013,10 @@
</ul> </ul>
</li>
</ul>
</li> </li>
</ul> </ul>
@ -819,32 +1037,39 @@
</p> </p>
<nav> <nav>
<div class='mb-8'> <div class='mb-8'>
<header class='pb-2 mb-2 font-semibold text-gray-600'> <header data-nosnippet class='pb-2 mb-2 font-semibold text-gray-600'>
Pages matching path './*' Pages matching path './*'
</header> </header>
<ul>
<li>
<div class='flex flex-wrap my-2'> <div class='flex flex-wrap my-2'>
<span class='mr-2 text-right text-gray-600'> <span data-nosnippet class='mr-2 text-right text-gray-600'>
</span> </span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Haskell/Code%20Snippets/Morphisms'> <a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Coding/Haskell/Code%20Snippets/Monoid'>
*-Morpisms
</a>
</div>
<div class='flex flex-wrap my-2'>
<span class='mr-2 text-right text-gray-600'>
</span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Haskell/Code%20Snippets/Monoid'>
Monoid? Da war doch was… Monoid? Da war doch was…
</a> </a>
</div> </div>
</li>
<li>
<div class='flex flex-wrap my-2'>
<span data-nosnippet class='mr-2 text-right text-gray-600'>
</span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Coding/Haskell/Code%20Snippets/Morphisms'>
*-Morpisms
</a>
</div>
</li>
</ul>
</div> </div>
</nav> </nav>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -890,7 +1115,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -922,6 +1147,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -193,7 +235,16 @@
</li> </li>
<li class='inline-flex items-center'> <li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Haskell'> <a class='px-1 font-bold' href='Coding'>
Coding
</a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
<path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path>
</svg>
</li>
<li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Coding/Haskell'>
Haskell Haskell
</a> </a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'> <svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
@ -202,7 +253,7 @@
</li> </li>
<li class='inline-flex items-center'> <li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Haskell/Code%20Snippets'> <a class='px-1 font-bold' href='Coding/Haskell/Code%20Snippets'>
Code-Snippets Code-Snippets
</a> </a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'> <svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
@ -379,8 +430,8 @@
</svg> </svg>
<a class='font-bold hover:underline truncate' title='Haskell' href='Haskell'> <a class='font-bold hover:underline truncate' title='Coding' href='Coding'>
Haskell Coding
</a> </a>
@ -415,8 +466,8 @@
</svg> </svg>
<a class='font-bold hover:underline truncate' title='Code-Snippets' href='Haskell/Code%20Snippets'> <a class='font-bold hover:underline truncate' title='Haskell' href='Coding/Haskell'>
Code-Snippets Haskell
</a> </a>
@ -449,8 +500,8 @@
</svg> </svg>
<a class='hover:underline truncate' title='*-Morpisms' href='Haskell/Code%20Snippets/Morphisms'> <a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Coding/Haskell/Advantages'>
*-Morpisms Talks und Posts zu Haskell
</a> </a>
@ -472,6 +523,42 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-700' viewBox='0 0 20 20' fill='currentColor'>
<path fill-rule='evenodd' d='M2 6a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1H8a3 3 0 00-3 3v1.5a1.5 1.5 0 01-3 0V6z' clip-rule='evenodd'></path>
<path d='M6 12a2 2 0 012-2h8a2 2 0 012 2v2a2 2 0 01-2 2H2h2a2 2 0 002-2v-2z'></path>
</svg>
<a class='font-bold hover:underline truncate' title='Code-Snippets' href='Coding/Haskell/Code%20Snippets'>
Code-Snippets
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -484,7 +571,7 @@
</svg> </svg>
<a class='font-bold text-purple-600 hover:underline truncate' title='Monoid? Da war doch was…' href='Haskell/Code%20Snippets/Monoid'> <a class='font-bold text-purple-600 hover:underline truncate' title='Monoid? Da war doch was…' href='Coding/Haskell/Code%20Snippets/Monoid'>
Monoid? Da war doch was… Monoid? Da war doch was…
</a> </a>
@ -497,6 +584,43 @@
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='*-Morpisms' href='Coding/Haskell/Code%20Snippets/Morphisms'>
*-Morpisms
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div> </div>
@ -524,7 +648,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Haskell/FFPiH'> <a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Coding/Haskell/FFPiH'>
Fortgeschrittene funktionale Programmierung in Haskell Fortgeschrittene funktionale Programmierung in Haskell
</a> </a>
@ -561,7 +685,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Lenses' href='Haskell/Lenses'> <a class='hover:underline truncate' title='Lenses' href='Coding/Haskell/Lenses'>
Lenses Lenses
</a> </a>
@ -586,43 +710,6 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -634,7 +721,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Webapp-Development in Haskell' href='Haskell/Webapp-Example'> <a class='hover:underline truncate' title='Webapp-Development in Haskell' href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell Webapp-Development in Haskell
</a> </a>
@ -665,6 +752,46 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Openapi-generator' href='Coding/OpenAPI'>
Openapi-generator
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -702,6 +829,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -789,7 +992,7 @@
<li> <li>
<div class='text-gray-900 forest-link'> <div class='text-gray-900 forest-link'>
<a href='Haskell/Code%20Snippets'> <a href='Coding/Haskell/Code%20Snippets'>
Code-Snippets Code-Snippets
</a> </a>
</div> </div>
@ -800,12 +1003,23 @@
<li> <li>
<div class='text-gray-900 forest-link'> <div class='text-gray-900 forest-link'>
<a href='Haskell'> <a href='Coding/Haskell'>
Haskell Haskell
</a> </a>
</div> </div>
<ul>
<li>
<div class='text-gray-900 forest-link'>
<a href='Coding'>
Coding
</a>
</div>
<ul> <ul>
<li> <li>
@ -825,6 +1039,10 @@
</ul> </ul>
</li>
</ul>
</li> </li>
</ul> </ul>
@ -998,6 +1216,7 @@ f' &lt;$&gt; a</code></pre></div>
<div class='py-0.5 mb-3 text-sm'><pre><code class='haskell language-haskell'>f'' a -- error <div class='py-0.5 mb-3 text-sm'><pre><code class='haskell language-haskell'>f'' a -- error
f'' &lt;$&gt; a -- error f'' &lt;$&gt; a -- error
fmap f'' &lt;$&gt; a</code></pre></div> fmap f'' &lt;$&gt; a</code></pre></div>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -1043,7 +1262,7 @@ fmap f'' &lt;$&gt; a</code></pre></div>
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -1075,6 +1294,9 @@ fmap f'' &lt;$&gt; a</code></pre></div>
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -193,7 +235,16 @@
</li> </li>
<li class='inline-flex items-center'> <li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Haskell'> <a class='px-1 font-bold' href='Coding'>
Coding
</a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
<path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path>
</svg>
</li>
<li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Coding/Haskell'>
Haskell Haskell
</a> </a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'> <svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
@ -202,7 +253,7 @@
</li> </li>
<li class='inline-flex items-center'> <li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Haskell/Code%20Snippets'> <a class='px-1 font-bold' href='Coding/Haskell/Code%20Snippets'>
Code-Snippets Code-Snippets
</a> </a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'> <svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
@ -379,8 +430,8 @@
</svg> </svg>
<a class='font-bold hover:underline truncate' title='Haskell' href='Haskell'> <a class='font-bold hover:underline truncate' title='Coding' href='Coding'>
Haskell Coding
</a> </a>
@ -415,7 +466,80 @@
</svg> </svg>
<a class='font-bold hover:underline truncate' title='Code-Snippets' href='Haskell/Code%20Snippets'> <a class='font-bold hover:underline truncate' title='Haskell' href='Coding/Haskell'>
Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Coding/Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-700' viewBox='0 0 20 20' fill='currentColor'>
<path fill-rule='evenodd' d='M2 6a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1H8a3 3 0 00-3 3v1.5a1.5 1.5 0 01-3 0V6z' clip-rule='evenodd'></path>
<path d='M6 12a2 2 0 012-2h8a2 2 0 012 2v2a2 2 0 01-2 2H2h2a2 2 0 002-2v-2z'></path>
</svg>
<a class='font-bold hover:underline truncate' title='Code-Snippets' href='Coding/Haskell/Code%20Snippets'>
Code-Snippets Code-Snippets
</a> </a>
@ -435,6 +559,43 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Monoid? Da war doch was…' href='Coding/Haskell/Code%20Snippets/Monoid'>
Monoid? Da war doch was…
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -447,7 +608,7 @@
</svg> </svg>
<a class='font-bold text-purple-600 hover:underline truncate' title='*-Morpisms' href='Haskell/Code%20Snippets/Morphisms'> <a class='font-bold text-purple-600 hover:underline truncate' title='*-Morpisms' href='Coding/Haskell/Code%20Snippets/Morphisms'>
*-Morpisms *-Morpisms
</a> </a>
@ -460,43 +621,6 @@
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Monoid? Da war doch was…' href='Haskell/Code%20Snippets/Monoid'>
Monoid? Da war doch was…
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div> </div>
@ -524,7 +648,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Haskell/FFPiH'> <a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Coding/Haskell/FFPiH'>
Fortgeschrittene funktionale Programmierung in Haskell Fortgeschrittene funktionale Programmierung in Haskell
</a> </a>
@ -561,7 +685,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Lenses' href='Haskell/Lenses'> <a class='hover:underline truncate' title='Lenses' href='Coding/Haskell/Lenses'>
Lenses Lenses
</a> </a>
@ -586,43 +710,6 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -634,7 +721,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Webapp-Development in Haskell' href='Haskell/Webapp-Example'> <a class='hover:underline truncate' title='Webapp-Development in Haskell' href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell Webapp-Development in Haskell
</a> </a>
@ -665,6 +752,46 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Openapi-generator' href='Coding/OpenAPI'>
Openapi-generator
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -702,6 +829,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -789,7 +992,7 @@
<li> <li>
<div class='text-gray-900 forest-link'> <div class='text-gray-900 forest-link'>
<a href='Haskell/Advantages'> <a href='Coding/Haskell/Advantages'>
Talks und Posts zu Haskell Talks und Posts zu Haskell
</a> </a>
</div> </div>
@ -800,12 +1003,23 @@
<li> <li>
<div class='text-gray-900 forest-link'> <div class='text-gray-900 forest-link'>
<a href='Haskell'> <a href='Coding/Haskell'>
Haskell Haskell
</a> </a>
</div> </div>
<ul>
<li>
<div class='text-gray-900 forest-link'>
<a href='Coding'>
Coding
</a>
</div>
<ul> <ul>
<li> <li>
@ -825,12 +1039,16 @@
</ul> </ul>
</li>
</ul>
</li> </li>
<li> <li>
<div class='text-gray-900 forest-link'> <div class='text-gray-900 forest-link'>
<a href='Haskell/Code%20Snippets'> <a href='Coding/Haskell/Code%20Snippets'>
Code-Snippets Code-Snippets
</a> </a>
</div> </div>
@ -954,7 +1172,7 @@ example3 = mergeSort [5,2,7,9,1,4] == [1,2,4,5,7,9] </code></pre></div>
</p> </p>
<p class='mb-3'> <p class='mb-3'>
We have implemented a MergeSort variant in 9 lines of code, not counting the <code class='py-0.5 px-0.5 bg-gray-100'>mergeLists</code> function below. Not bad, but <a href='http://en.literateprograms.org/Merge_sort_(Haskell)' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>this implementation</a> is not much longer. We have implemented a MergeSort variant in 9 lines of code, not counting the <code class='py-0.5 px-0.5 bg-gray-100'>mergeLists</code> function below. Not bad, but <a href='http://en.literateprograms.org/Merge_sort_(Haskell)' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>this implementation</a> is not much longer.
</p> </p>
<p class='mb-3'> <p class='mb-3'>
@ -1060,19 +1278,19 @@ instance Foldable (Tree c) where
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
<a href='https://www.fpcomplete.com/user/bartosz/understanding-algebras' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Understanding F-Algebras</a> <a href='https://www.fpcomplete.com/user/bartosz/understanding-algebras' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Understanding F-Algebras</a>
</li> </li>
<li> <li>
<a href='http://www.timphilipwilliams.com/slides.html' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Recursion Schemes by Example</a> <a href='http://www.timphilipwilliams.com/slides.html' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Recursion Schemes by Example</a>
</li> </li>
<li> <li>
<a href='http://comonad.com/reader/2009/recursion-schemes/' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Recursion Schemes: A Field Guide</a> <a href='http://comonad.com/reader/2009/recursion-schemes/' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Recursion Schemes: A Field Guide</a>
</li> </li>
<li> <li>
<a href='http://stackoverflow.com/questions/6941904/recursion-schemes-for-dummies' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>This StackOverflow question</a> <a href='http://stackoverflow.com/questions/6941904/recursion-schemes-for-dummies' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>This StackOverflow question</a>
</li> </li>
</ul> </ul>
@ -1089,6 +1307,7 @@ mergeLists = curry $ unfoldr c where
c (x:xs, []) = Just (x, (xs, [])) c (x:xs, []) = Just (x, (xs, []))
c (x:xs, y:ys) | x &lt;= y = Just (x, (xs, y:ys)) c (x:xs, y:ys) | x &lt;= y = Just (x, (xs, y:ys))
| x &gt; y = Just (y, (x:xs, ys))</code></pre></div> | x &gt; y = Just (y, (x:xs, ys))</code></pre></div>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -1111,18 +1330,18 @@ mergeLists = curry $ unfoldr c where
<ul class='space-y-1'> <ul class='space-y-1'>
<li> <li>
<a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Haskell/Advantages'> <a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Coding/Haskell/Advantages'>
Talks und Posts zu Haskell Talks und Posts zu Haskell
</a> </a>
<div class='mb-4 overflow-auto text-sm text-gray-500'> <div class='mb-4 overflow-auto text-sm text-gray-500'>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'> <div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div><a href='https://www.youtube.com/watch?v=9EGYSb9vov8' class='text-gray-600 hover:underline' target='_blank' rel='noopener'>Unifying Structured Recursion Schemes</a> aka. <a href='Haskell/Code%20Snippets/Morphisms' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkNormal'>The Morphism-Zoo</a></div> <div><a href='https://www.youtube.com/watch?v=9EGYSb9vov8' class='text-gray-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Unifying Structured Recursion Schemes</a> aka. <a href='Coding/Haskell/Code%20Snippets/Morphisms' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkNormal'>The Morphism-Zoo</a></div>
</div> </div>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'> <div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div><a href='https://www.fpcomplete.com/user/bartosz/understanding-algebras' class='text-gray-600 hover:underline' target='_blank' rel='noopener'>Understanding F-Algebras</a> schöne Erklärung. Man könnte danach anfangen den <a href='Haskell/Code%20Snippets/Morphisms' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkBranch'>Morphismen-zoo</a> zu verstehen…</div> <div><a href='https://www.fpcomplete.com/user/bartosz/understanding-algebras' class='text-gray-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Understanding F-Algebras</a> schöne Erklärung. Man könnte danach anfangen den <a href='Coding/Haskell/Code%20Snippets/Morphisms' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkBranch'>Morphismen-zoo</a> zu verstehen…</div>
</div> </div>
</div> </div>
@ -1160,7 +1379,7 @@ mergeLists = curry $ unfoldr c where
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -1192,6 +1411,9 @@ mergeLists = curry $ unfoldr c where
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -193,7 +235,16 @@
</li> </li>
<li class='inline-flex items-center'> <li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Haskell'> <a class='px-1 font-bold' href='Coding'>
Coding
</a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
<path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path>
</svg>
</li>
<li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Coding/Haskell'>
Haskell Haskell
</a> </a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'> <svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
@ -370,7 +421,43 @@
</svg> </svg>
<a class='font-bold hover:underline truncate' title='Haskell' href='Haskell'> <a class='font-bold hover:underline truncate' title='Coding' href='Coding'>
Coding
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-700' viewBox='0 0 20 20' fill='currentColor'>
<path fill-rule='evenodd' d='M2 6a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1H8a3 3 0 00-3 3v1.5a1.5 1.5 0 01-3 0V6z' clip-rule='evenodd'></path>
<path d='M6 12a2 2 0 012-2h8a2 2 0 012 2v2a2 2 0 01-2 2H2h2a2 2 0 002-2v-2z'></path>
</svg>
<a class='font-bold hover:underline truncate' title='Haskell' href='Coding/Haskell'>
Haskell Haskell
</a> </a>
@ -392,6 +479,43 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Coding/Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -403,7 +527,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Code-Snippets' href='Haskell/Code%20Snippets'> <a class='hover:underline truncate' title='Code-Snippets' href='Coding/Haskell/Code%20Snippets'>
Code-Snippets Code-Snippets
</a> </a>
@ -441,7 +565,7 @@
</svg> </svg>
<a class='font-bold text-purple-600 hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Haskell/FFPiH'> <a class='font-bold text-purple-600 hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Coding/Haskell/FFPiH'>
Fortgeschrittene funktionale Programmierung in Haskell Fortgeschrittene funktionale Programmierung in Haskell
</a> </a>
@ -478,7 +602,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Lenses' href='Haskell/Lenses'> <a class='hover:underline truncate' title='Lenses' href='Coding/Haskell/Lenses'>
Lenses Lenses
</a> </a>
@ -503,43 +627,6 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -551,7 +638,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Webapp-Development in Haskell' href='Haskell/Webapp-Example'> <a class='hover:underline truncate' title='Webapp-Development in Haskell' href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell Webapp-Development in Haskell
</a> </a>
@ -582,6 +669,46 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Openapi-generator' href='Coding/OpenAPI'>
Openapi-generator
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -619,6 +746,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -773,12 +976,27 @@
<li> <li>
<div class='text-gray-900 forest-link'> <div class='text-gray-900 forest-link'>
<a href='Haskell'> <a href='Coding/Haskell'>
Haskell Haskell
</a> </a>
</div> </div>
<ul>
<li>
<div class='text-gray-900 forest-link'>
<a href='Coding'>
Coding
</a>
</div>
</li>
</ul>
</li> </li>
</ul> </ul>
@ -803,7 +1021,7 @@
</p> </p>
<p class='mb-3'> <p class='mb-3'>
Die gesamten Übungen sind unter anderem in der FFPiH-Organisation in meinem gitea hinterlegt: <a href='https://gitea.dresselhaus.cloud/FFPiH' class='text-purple-600 hover:underline' target='_blank' rel='noopener'><a href='https://gitea.dresselhaus.cloud/FFPiH' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>https://gitea.dresselhaus.cloud/FFPiH</a></a> Die gesamten Übungen sind unter anderem in der FFPiH-Organisation in meinem gitea hinterlegt: <a href='https://gitea.dresselhaus.cloud/FFPiH' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'><a href='https://gitea.dresselhaus.cloud/FFPiH' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>https://gitea.dresselhaus.cloud/FFPiH</a></a>
</p> </p>
<p class='mb-3'> <p class='mb-3'>
@ -835,11 +1053,11 @@
</p> </p>
<p class='mb-3'> <p class='mb-3'>
<a href='https://gitea.dresselhaus.cloud/FFPiH/uebung2017_2/src/branch/master/src/Aufgabe2.hs' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Übung 2, Aufgabe 2</a>, weil hier durch “einfaches” umformen hin zu Abstraktionen und mit den Regeln dieser im ersten Fall die Laufzeit (vor Compileroptimierungen) von O(n²) auf O(0) ändert. <a href='https://gitea.dresselhaus.cloud/FFPiH/uebung2017_2/src/branch/master/src/Aufgabe2.hs' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Übung 2, Aufgabe 2</a>, weil hier durch “einfaches” umformen hin zu Abstraktionen und mit den Regeln dieser im ersten Fall die Laufzeit (vor Compileroptimierungen) von O(n²) auf O(0) ändert.
</p> </p>
<p class='mb-3'> <p class='mb-3'>
<a href='https://gitea.dresselhaus.cloud/FFPiH/uebung2017-4' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Übung 4</a>, welche ein komplett fertigen (sehr rudimentären und simplen) Dungeon-Crawler bereitstellt, der “nur” 1-2 bugs hat und “wie ein echtes Projekt” erweitert werden muss. Diese Übung hat sich dann über 4 weitere Übungen gestreckt, wobei folgende Aufgaben gelöst werden müssen: <a href='https://gitea.dresselhaus.cloud/FFPiH/uebung2017-4' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Übung 4</a>, welche ein komplett fertigen (sehr rudimentären und simplen) Dungeon-Crawler bereitstellt, der “nur” 1-2 bugs hat und “wie ein echtes Projekt” erweitert werden muss. Diese Übung hat sich dann über 4 weitere Übungen gestreckt, wobei folgende Aufgaben gelöst werden müssen:
</p> </p>
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
@ -849,7 +1067,7 @@
</li> </li>
<li> <li>
Umschreiben von explizitem Argument-Passing hin zu Monad-Transformers mit stateful <a href='Haskell/Lenses' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkBranch'>lenses</a> Umschreiben von explizitem Argument-Passing hin zu Monad-Transformers mit stateful <a href='Coding/Haskell/Lenses' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkBranch'>lenses</a>
</li> </li>
<li> <li>
@ -870,6 +1088,7 @@
</ul> </ul>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -899,7 +1118,7 @@
<div class='mb-4 overflow-auto text-sm text-gray-500'> <div class='mb-4 overflow-auto text-sm text-gray-500'>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'> <div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div>Lecture “<a href='Haskell/FFPiH' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkNormal'>Intermediate Functional Programming in Haskell</a></div> <div>Lecture “<a href='Coding/Haskell/FFPiH' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkNormal'>Intermediate Functional Programming in Haskell</a></div>
</div> </div>
</div> </div>
@ -914,7 +1133,7 @@
<div class='mb-4 overflow-auto text-sm text-gray-500'> <div class='mb-4 overflow-auto text-sm text-gray-500'>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'> <div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div><a href='Haskell/FFPiH' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkBranch'>more details on the lecture</a></div> <div><a href='Coding/Haskell/FFPiH' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkBranch'>more details on the lecture</a></div>
</div> </div>
</div> </div>
@ -929,7 +1148,7 @@
<div class='mb-4 overflow-auto text-sm text-gray-500'> <div class='mb-4 overflow-auto text-sm text-gray-500'>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'> <div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div><a href='Haskell/FFPiH' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkBranch'>Lecture "Intermediate Functional Programming in Haskell"</a></div> <div><a href='Coding/Haskell/FFPiH' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkBranch'>Lecture "Intermediate Functional Programming in Haskell"</a></div>
</div> </div>
</div> </div>
@ -967,7 +1186,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -999,6 +1218,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -193,7 +235,16 @@
</li> </li>
<li class='inline-flex items-center'> <li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Haskell'> <a class='px-1 font-bold' href='Coding'>
Coding
</a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
<path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path>
</svg>
</li>
<li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Coding/Haskell'>
Haskell Haskell
</a> </a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'> <svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
@ -370,7 +421,43 @@
</svg> </svg>
<a class='font-bold hover:underline truncate' title='Haskell' href='Haskell'> <a class='font-bold hover:underline truncate' title='Coding' href='Coding'>
Coding
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-700' viewBox='0 0 20 20' fill='currentColor'>
<path fill-rule='evenodd' d='M2 6a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1H8a3 3 0 00-3 3v1.5a1.5 1.5 0 01-3 0V6z' clip-rule='evenodd'></path>
<path d='M6 12a2 2 0 012-2h8a2 2 0 012 2v2a2 2 0 01-2 2H2h2a2 2 0 002-2v-2z'></path>
</svg>
<a class='font-bold hover:underline truncate' title='Haskell' href='Coding/Haskell'>
Haskell Haskell
</a> </a>
@ -392,6 +479,43 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Coding/Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -403,7 +527,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Code-Snippets' href='Haskell/Code%20Snippets'> <a class='hover:underline truncate' title='Code-Snippets' href='Coding/Haskell/Code%20Snippets'>
Code-Snippets Code-Snippets
</a> </a>
@ -443,7 +567,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Haskell/FFPiH'> <a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Coding/Haskell/FFPiH'>
Fortgeschrittene funktionale Programmierung in Haskell Fortgeschrittene funktionale Programmierung in Haskell
</a> </a>
@ -478,7 +602,7 @@
</svg> </svg>
<a class='font-bold text-purple-600 hover:underline truncate' title='Lenses' href='Haskell/Lenses'> <a class='font-bold text-purple-600 hover:underline truncate' title='Lenses' href='Coding/Haskell/Lenses'>
Lenses Lenses
</a> </a>
@ -503,43 +627,6 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -551,7 +638,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Webapp-Development in Haskell' href='Haskell/Webapp-Example'> <a class='hover:underline truncate' title='Webapp-Development in Haskell' href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell Webapp-Development in Haskell
</a> </a>
@ -582,6 +669,46 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Openapi-generator' href='Coding/OpenAPI'>
Openapi-generator
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -619,6 +746,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -706,7 +909,7 @@
<li> <li>
<div class='text-gray-900 forest-link'> <div class='text-gray-900 forest-link'>
<a href='Haskell/Advantages'> <a href='Coding/Haskell/Advantages'>
Talks und Posts zu Haskell Talks und Posts zu Haskell
</a> </a>
</div> </div>
@ -717,12 +920,23 @@
<li> <li>
<div class='text-gray-900 forest-link'> <div class='text-gray-900 forest-link'>
<a href='Haskell'> <a href='Coding/Haskell'>
Haskell Haskell
</a> </a>
</div> </div>
<ul>
<li>
<div class='text-gray-900 forest-link'>
<a href='Coding'>
Coding
</a>
</div>
<ul> <ul>
<li> <li>
@ -742,12 +956,16 @@
</ul> </ul>
</li>
</ul>
</li> </li>
<li> <li>
<div class='text-gray-900 forest-link'> <div class='text-gray-900 forest-link'>
<a href='Haskell/FFPiH'> <a href='Coding/Haskell/FFPiH'>
Fortgeschrittene funktionale Programmierung in Haskell Fortgeschrittene funktionale Programmierung in Haskell
</a> </a>
</div> </div>
@ -1339,6 +1557,7 @@ traverseOf :: Over p f s t a b -&gt; p a (f b) -&gt; s -&gt; f t</code></pre></d
dafuq? dafuq?
</p> </p>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -1361,14 +1580,14 @@ traverseOf :: Over p f s t a b -&gt; p a (f b) -&gt; s -&gt; f t</code></pre></d
<ul class='space-y-1'> <ul class='space-y-1'>
<li> <li>
<a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Haskell/Advantages'> <a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Coding/Haskell/Advantages'>
Talks und Posts zu Haskell Talks und Posts zu Haskell
</a> </a>
<div class='mb-4 overflow-auto text-sm text-gray-500'> <div class='mb-4 overflow-auto text-sm text-gray-500'>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'> <div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div><a href='https://skillsmatter.com/skillscasts/4251-lenses-compositional-data-access-and-manipulation' class='text-gray-600 hover:underline' target='_blank' rel='noopener'>Lenses</a> (Registrierung nötig - kostenfrei), siehe auch: <a href='Haskell/Lenses' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkBranch'>Lenses</a></div> <div><a href='https://skillsmatter.com/skillscasts/4251-lenses-compositional-data-access-and-manipulation' class='text-gray-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Lenses</a> (Registrierung nötig - kostenfrei), siehe auch: <a href='Coding/Haskell/Lenses' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkBranch'>Lenses</a></div>
</div> </div>
</div> </div>
@ -1376,14 +1595,14 @@ traverseOf :: Over p f s t a b -&gt; p a (f b) -&gt; s -&gt; f t</code></pre></d
</li> </li>
<li> <li>
<a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Haskell/FFPiH'> <a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Coding/Haskell/FFPiH'>
Fortgeschrittene funktionale Programmierung in Haskell Fortgeschrittene funktionale Programmierung in Haskell
</a> </a>
<div class='mb-4 overflow-auto text-sm text-gray-500'> <div class='mb-4 overflow-auto text-sm text-gray-500'>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'> <div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div>Umschreiben von explizitem Argument-Passing hin zu Monad-Transformers mit stateful <a href='Haskell/Lenses' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkBranch'>lenses</a></div> <div>Umschreiben von explizitem Argument-Passing hin zu Monad-Transformers mit stateful <a href='Coding/Haskell/Lenses' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkBranch'>lenses</a></div>
</div> </div>
</div> </div>
@ -1421,7 +1640,7 @@ traverseOf :: Over p f s t a b -&gt; p a (f b) -&gt; s -&gt; f t</code></pre></d
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -1453,6 +1672,9 @@ traverseOf :: Over p f s t a b -&gt; p a (f b) -&gt; s -&gt; f t</code></pre></d
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -193,7 +235,16 @@
</li> </li>
<li class='inline-flex items-center'> <li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Haskell'> <a class='px-1 font-bold' href='Coding'>
Coding
</a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
<path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path>
</svg>
</li>
<li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Coding/Haskell'>
Haskell Haskell
</a> </a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'> <svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
@ -370,7 +421,43 @@
</svg> </svg>
<a class='font-bold hover:underline truncate' title='Haskell' href='Haskell'> <a class='font-bold hover:underline truncate' title='Coding' href='Coding'>
Coding
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-700' viewBox='0 0 20 20' fill='currentColor'>
<path fill-rule='evenodd' d='M2 6a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1H8a3 3 0 00-3 3v1.5a1.5 1.5 0 01-3 0V6z' clip-rule='evenodd'></path>
<path d='M6 12a2 2 0 012-2h8a2 2 0 012 2v2a2 2 0 01-2 2H2h2a2 2 0 002-2v-2z'></path>
</svg>
<a class='font-bold hover:underline truncate' title='Haskell' href='Coding/Haskell'>
Haskell Haskell
</a> </a>
@ -392,6 +479,43 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Coding/Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -403,7 +527,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Code-Snippets' href='Haskell/Code%20Snippets'> <a class='hover:underline truncate' title='Code-Snippets' href='Coding/Haskell/Code%20Snippets'>
Code-Snippets Code-Snippets
</a> </a>
@ -443,7 +567,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Haskell/FFPiH'> <a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Coding/Haskell/FFPiH'>
Fortgeschrittene funktionale Programmierung in Haskell Fortgeschrittene funktionale Programmierung in Haskell
</a> </a>
@ -480,7 +604,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Lenses' href='Haskell/Lenses'> <a class='hover:underline truncate' title='Lenses' href='Coding/Haskell/Lenses'>
Lenses Lenses
</a> </a>
@ -503,43 +627,6 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -552,7 +639,7 @@
</svg> </svg>
<a class='font-bold text-purple-600 hover:underline truncate' title='Webapp-Development in Haskell' href='Haskell/Webapp-Example'> <a class='font-bold text-purple-600 hover:underline truncate' title='Webapp-Development in Haskell' href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell Webapp-Development in Haskell
</a> </a>
@ -586,7 +673,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Webapp-Example: Main.hs' href='Haskell/Webapp-Example/Main.hs'> <a class='hover:underline truncate' title='Webapp-Example: Main.hs' href='Coding/Haskell/Webapp-Example/Main.hs'>
Webapp-Example: Main.hs Webapp-Example: Main.hs
</a> </a>
@ -623,7 +710,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Webapp-Example: MyService/Types.hs' href='Haskell/Webapp-Example/MyService_Types.hs'> <a class='hover:underline truncate' title='Webapp-Example: MyService/Types.hs' href='Coding/Haskell/Webapp-Example/MyService_Types.hs'>
Webapp-Example: MyService/Types.hs Webapp-Example: MyService/Types.hs
</a> </a>
@ -654,6 +741,46 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Openapi-generator' href='Coding/OpenAPI'>
Openapi-generator
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -691,6 +818,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -778,8 +981,19 @@
<li> <li>
<div class='text-gray-900 forest-link'> <div class='text-gray-900 forest-link'>
<a href='Haskell'> <a href='Coding/OpenAPI'>
Haskell Openapi-generator
</a>
</div>
<ul>
<li>
<div class='text-gray-900 forest-link'>
<a href='Coding'>
Coding
</a> </a>
</div> </div>
@ -799,6 +1013,21 @@
</ul> </ul>
</li>
</ul>
</li>
<li>
<div class='text-gray-900 forest-link'>
<a href='Coding/Haskell'>
Haskell
</a>
</div>
</li> </li>
</ul> </ul>
@ -827,11 +1056,15 @@
</p> </p>
<p class='mb-3'> <p class='mb-3'>
Diese Definition läuft über openapi-v3 und kann z.b. mit Echtzeit-Vorschau im <a href='http://editor.swagger.io/' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>http://editor.swagger.io/</a> erspielen. Per Default ist der noch auf openapi-v2 (aka swagger), kann aber auch v3. Um die Anforderungen und Möglichkeiten des jeweiligen Services sauber zu erfassen und automatisiert zu prüfen, dummy-implementationen zu bekommen und vieles andere mehr, empfiehlt es sich den <a href='Coding/OpenAPI' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkTag'>openapi-generator</a> zu nutzen.
</p> </p>
<p class='mb-3'> <p class='mb-3'>
Nach der Definition, was man am Ende haben möchte, muss man sich entscheiden, in welcher Sprache man weiter entwickelt. Ich empfehle aus verschiedenen Gründen primär 2 Sprachen: Python-Microservices (weil die ML-Libraries sehr gut sind, allerdings Änderungen meist schwer sind und der Code wenig robust - meist nur 1 API-Endpunkt pro service) und Haskell (stabilität, performace, leicht zu ändern, gut anzupassen). Diese Definition läuft über openapi-v3 und kann z.b. mit Echtzeit-Vorschau im <a href='http://editor.swagger.io/' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>http://editor.swagger.io/</a> erspielen. Per Default ist der noch auf openapi-v2 (aka swagger), kann aber auch v3.
</p>
<p class='mb-3'>
Nach der Definition, was man am Ende haben möchte, muss man sich entscheiden, in welcher Sprache man weiter entwickelt. Ich empfehle aus verschiedenen Gründen primär 2 Sprachen: Python-Microservices (weil die ML-Libraries sehr gut sind, allerdings Änderungen meist schwer sind und der Code wenig robust - meist nur 1 API-Endpunkt pro service) und Haskell (Stabilität, Performace, leicht zu ändern, gut anzupassen).
</p> </p>
<p class='mb-3'> <p class='mb-3'>
@ -839,11 +1072,11 @@
</p> </p>
<h2 id='startprojekt-in-haskell' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Startprojekt in Haskell</h2><h3 id='erstellen-eines-neuen-projektes' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Erstellen eines neuen Projektes</h3> <h2 id='startprojekt-in-haskell' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Startprojekt in Haskell</h2><h3 id='erstellen-eines-neuen-projektes' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Erstellen eines neuen Projektes</h3>
<p class='mb-3'> <p class='mb-3'>
Zunächst erstellen wir in normales Haskell-Projekt ohne funktionalität & firlefanz: Zunächst erstellen wir in normales Haskell-Projekt ohne Funktionalität & Firlefanz:
</p> </p>
<div class='py-0.5 mb-3 text-sm'><pre><code class='bash language-bash'>stack new myservice</code></pre></div> <div class='py-0.5 mb-3 text-sm'><pre><code class='bash language-bash'>stack new myservice</code></pre></div>
<p class='mb-3'> <p class='mb-3'>
Dies erstellt ein neues Verzeichnis und das generelle scaffolding. Nach einer kurzen anpassung der stack.yaml (resolver auf unserer setzen; aktuell: lts-17.4) fügen wir am Ende der Datei Dies erstellt ein neues Verzeichnis und das generelle scaffolding. Nach einer kurzen Anpassung der <code class='py-0.5 px-0.5 bg-gray-100'>stack.yaml</code> (resolver auf unserer setzen; aktuell: <code class='py-0.5 px-0.5 bg-gray-100'>lts-17.4</code>) fügen wir am Ende der Datei
</p> </p>
<div class='py-0.5 mb-3 text-sm'><pre><code class='yaml language-yaml'>allow-newer: true <div class='py-0.5 mb-3 text-sm'><pre><code class='yaml language-yaml'>allow-newer: true
ghc-options: ghc-options:
@ -853,7 +1086,7 @@ ghc-options:
</p> </p>
<h3 id='generierung-der-api' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Generierung der API</h3> <h3 id='generierung-der-api' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Generierung der API</h3>
<p class='mb-3'> <p class='mb-3'>
Da die API immer wieder neu generiert werden kann (und sollte!) liegt sich in einem unterverzeichnis des Haputprojektes. Da die API immer wieder neu generiert werden kann (und sollte!) liegt sich in einem unterverzeichnis des Hauptprojektes.
</p> </p>
<p class='mb-3'> <p class='mb-3'>
@ -861,29 +1094,29 @@ ghc-options:
</p> </p>
<div class='py-0.5 mb-3 text-sm'><pre><code class='bash language-bash'>openapi-generator generate -g haskell -o . -i api-doc.yml</code></pre></div> <div class='py-0.5 mb-3 text-sm'><pre><code class='bash language-bash'>openapi-generator generate -g haskell -o . -i api-doc.yml</code></pre></div>
<p class='mb-3'> <p class='mb-3'>
Dieses erstellt einem dann eine komplette library inkl. Datentypen. Wichtig: Der Name in der api-doc sollte vom Namen des Services (oben myservice) abweichen - entweder in Casing oder im Namen direkt. Suffixe wie API schneidet der Generator hier leider ab. (Wieso das ganze? Es entstehen nachher 2 libraries, foo & fooAPI. Da der generator das API abschneidet endet man mit foo & foo und der compiler meckert, dass er nicht weiss, welche lib gemeint ist). Dieses erstellt einem dann eine komplette library inkl. Datentypen. Wichtig: Der Name in der <code class='py-0.5 px-0.5 bg-gray-100'>api-doc</code> sollte vom Namen des Services (oben <code class='py-0.5 px-0.5 bg-gray-100'>myservice</code>) abweichen - entweder in Casing oder im Namen direkt. Suffixe wie API schneidet der Generator hier leider ab. (Wieso das ganze? Es entstehen nachher 2 libraries, <code class='py-0.5 px-0.5 bg-gray-100'>foo</code> & <code class='py-0.5 px-0.5 bg-gray-100'>fooAPI</code>. Da der generator das API abschneidet endet man mit foo & foo und der compiler meckert, dass er nicht weiß, welche lib gemeint ist).
</p> </p>
<p class='mb-3'> <p class='mb-3'>
danach: wie gewohnt <code class='py-0.5 px-0.5 bg-gray-100'>git init; git add .; git commit -m "initial"</code>. Auf dem Server der Wahl (github, gitea, gitlab, …) nun ein Repository erstellen (am Besten: myserviceAPI - alles auf API endend ist autogeneriert!) und den Anweisungen nach ein remote hinzufügen & pushen. danach: wie gewohnt <code class='py-0.5 px-0.5 bg-gray-100'>git init; git add .; git commit -m "initial"</code>. Auf dem Server der Wahl (github, gitea, gitlab, …) nun ein Repository erstellen (am Besten: <code class='py-0.5 px-0.5 bg-gray-100'>myserviceAPI</code> - nach Konvention ist alles auf API endend autogeneriert!) und den Anweisungen nach ein remote hinzufügen & pushen.
</p> </p>
<h4 id='wieder-zurück-im-haskell-service' class='mt-6 mb-2 text-2xl font-bold text-gray-700'>Wieder zurück im Haskell-Service</h4> <h4 id='wieder-zurück-im-haskell-service' class='mt-6 mb-2 text-2xl font-bold text-gray-700'>Wieder zurück im Haskell-Service</h4>
<p class='mb-3'> <p class='mb-3'>
In unserem eigentlichen Service müssen wir nun die API einbinden. Dazu erstellen wir ein Verzeichnis <code class='py-0.5 px-0.5 bg-gray-100'>libs</code> (konvention) und machen ein <code class='py-0.5 px-0.5 bg-gray-100'>git submodule add &lt;repository-url&gt; libs/myserviceAPI</code> In unserem eigentlichen Service müssen wir nun die API einbinden. Dazu erstellen wir ein Verzeichnis <code class='py-0.5 px-0.5 bg-gray-100'>libs</code> (Konvention) und machen ein <code class='py-0.5 px-0.5 bg-gray-100'>git submodule add &lt;repository-url&gt; libs/myserviceAPI</code>
</p> </p>
<p class='mb-3'> <p class='mb-3'>
Git hat nun die API in das submodul gepackt und wir können das oben erstellte temporäre verzeichnis wieder löschen. Git hat nun die API in das submodul gepackt und wir können das oben erstellte temporäre Verzeichnis wieder löschen.
</p> </p>
<p class='mb-3'> <p class='mb-3'>
Anschließend müssen wir stack noch erklären, dass wir die API da nun liegen haben und passen wieder die stack.yaml an, indem wir das Verzeichnis unter packages hinzufügen. Anschließend müssen wir stack noch erklären, dass wir die API da nun liegen haben und passen wieder die <code class='py-0.5 px-0.5 bg-gray-100'>stack.yaml</code> an, indem wir das Verzeichnis unter packages hinzufügen.
</p> </p>
<div class='py-0.5 mb-3 text-sm'><pre><code class='yaml language-yaml'>packages: <div class='py-0.5 mb-3 text-sm'><pre><code class='yaml language-yaml'>packages:
- . - .
- libs/myserviceAPI # &lt;&lt;</code></pre></div> - libs/myserviceAPI # &lt;&lt;</code></pre></div>
<p class='mb-3'> <p class='mb-3'>
nun können wir in der <code class='py-0.5 px-0.5 bg-gray-100'>package.yaml</code> (oder <code class='py-0.5 px-0.5 bg-gray-100'>myservice.cabal</code>, falls kein hpack verwendet wird) unter den dependencies unsere api hinzufügen (name wie die cabal-datei in libs/myserviceAPI). Nun können wir in der <code class='py-0.5 px-0.5 bg-gray-100'>package.yaml</code> (oder <code class='py-0.5 px-0.5 bg-gray-100'>myservice.cabal</code>, falls kein <code class='py-0.5 px-0.5 bg-gray-100'>hpack</code> verwendet wird) unter den dependencies unsere API hinzufügen (name wie die cabal-Datei in <code class='py-0.5 px-0.5 bg-gray-100'>libs/myserviceAPI</code>).
</p> </p>
<h3 id='einbinden-anderer-microservices' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Einbinden anderer Microservices</h3> <h3 id='einbinden-anderer-microservices' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Einbinden anderer Microservices</h3>
<p class='mb-3'> <p class='mb-3'>
@ -898,7 +1131,7 @@ ghc-options:
</p> </p>
<h3 id='entfernen-von-anderen-technologienmicroservices' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Entfernen von anderen Technologien/Microservices</h3> <h3 id='entfernen-von-anderen-technologienmicroservices' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Entfernen von anderen Technologien/Microservices</h3>
<p class='mb-3'> <p class='mb-3'>
In git ist das entfernen von Submodules etwas frickelig, daher hier ein copy&paste der <a href='https://gist.github.com/myusuf3/7f645819ded92bda6677' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>GitHub-Antwort</a>: In git ist das entfernen von Submodules etwas frickelig, daher hier ein copy&paste der <a href='https://gist.github.com/myusuf3/7f645819ded92bda6677' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>GitHub-Antwort</a>:
</p> </p>
<div class='py-0.5 mb-3 text-sm'><pre><code class='bash language-bash'>## Remove the submodule entry from .git/config <div class='py-0.5 mb-3 text-sm'><pre><code class='bash language-bash'>## Remove the submodule entry from .git/config
git submodule deinit -f path/to/submodule git submodule deinit -f path/to/submodule
@ -933,7 +1166,7 @@ git rm-f path/to/submodule</code></pre></div>
</ul> </ul>
<p class='mb-3'> <p class='mb-3'>
Wenn man einen lokalen Webserver startet kann man mittels “s” auch die interaktive Suche öffnen (Suche nach Typen, Funktionen, Signaturen, etc.). In Bash mit python3 geht das z.b. einfach über: Wenn man einen lokalen Webserver startet kann man mittels “s” auch die interaktive Suche öffnen (Suche nach Typen, Funktionen, Signaturen, etc.). In Bash mit <code class='py-0.5 px-0.5 bg-gray-100'>python3</code> geht das z.b. einfach über:
</p> </p>
<div class='py-0.5 mb-3 text-sm'><pre><code class='bash language-bash'>cd $(stack path --local-doc-root) <div class='py-0.5 mb-3 text-sm'><pre><code class='bash language-bash'>cd $(stack path --local-doc-root)
python3 -m SimpleHTTPServer 8000 python3 -m SimpleHTTPServer 8000
@ -947,7 +1180,7 @@ firefox "http://localhost:8000"</code></pre></div><h3 id='implementation-des-ser
<li> <li>
<p class='mb-3'> <p class='mb-3'>
in app/Main.hs: Hier ist quasi immer nur eine Zeile drin: <code class='py-0.5 px-0.5 bg-gray-100'>main = myServiceMain</code> in <code class='py-0.5 px-0.5 bg-gray-100'>app/Main.hs</code>: Hier ist quasi immer nur eine Zeile drin: <code class='py-0.5 px-0.5 bg-gray-100'>main = myServiceMain</code>
</p> </p>
<p class='mb-3'> <p class='mb-3'>
@ -959,7 +1192,7 @@ firefox "http://localhost:8000"</code></pre></div><h3 id='implementation-des-ser
<li> <li>
<p class='mb-3'> <p class='mb-3'>
in src/MyService.hs: <code class='py-0.5 px-0.5 bg-gray-100'>myServiceMain :: IO ()</code> definieren in <code class='py-0.5 px-0.5 bg-gray-100'>src/MyService.hs</code>: <code class='py-0.5 px-0.5 bg-gray-100'>myServiceMain :: IO ()</code> definieren
</p> </p>
</li> </li>
@ -967,13 +1200,13 @@ firefox "http://localhost:8000"</code></pre></div><h3 id='implementation-des-ser
</ul> </ul>
<p class='mb-3'> <p class='mb-3'>
Für die Main kann man prinzipiell eine Main andere Services copy/pasten. Im folgenden eine Annotierte main-Funktion - zu den einzelnen Vorraussetzungen kommen wir im Anschluss. Für die Main kann man prinzipiell eine Main andere Services copy/pasten. Im folgenden eine Annotierte main-Funktion - zu den einzelnen Voraussetzungen kommen wir im Anschluss.
</p> </p>
<section title='Embedded note' class='p-4 mx-2 mb-2 bg-white border-2 rounded-lg shadow-inner'> <section title='Embedded note' class='p-4 mx-2 mb-2 bg-white border-2 rounded-lg shadow-inner'>
<details> <details>
<summary class='flex items-center justify-center text-2xl italic bg-purple-50 rounded py-1 px-2 mb-3'> <summary class='flex items-center justify-center text-2xl italic bg-purple-50 rounded py-1 px-2 mb-3'>
<header style='display:list-item'> <header style='display:list-item'>
<a href='Haskell/Webapp-Example/Main.hs'> <a href='Coding/Haskell/Webapp-Example/Main.hs'>
Webapp-Example: Main.hs Webapp-Example: Main.hs
</a> </a>
</header> </header>
@ -981,7 +1214,7 @@ firefox "http://localhost:8000"</code></pre></div><h3 id='implementation-des-ser
<div> <div>
<p class='mb-3'> <p class='mb-3'>
Wie man das verwendet, siehe <a href='Haskell/Webapp-Example' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkTag'>Webapp-Development in Haskell</a>. Wie man das verwendet, siehe <a href='Coding/Haskell/Webapp-Example' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkTag'>Webapp-Development in Haskell</a>.
</p> </p>
<div class='py-0.5 mb-3 text-sm'><pre><code class='haskell language-haskell'>{-# OPTIONS_GHC -Wno-name-shadowing #-} <div class='py-0.5 mb-3 text-sm'><pre><code class='haskell language-haskell'>{-# OPTIONS_GHC -Wno-name-shadowing #-}
{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleContexts #-}
@ -1165,22 +1398,23 @@ loggingMiddleware = liftIO $ mkRequestLogger $ def { outputFormat = CustomOutput
| statusCode status &gt; 399 && statusCode status &lt; 500 = "Error code "&lt;&gt;toLogStr (statusCode status) &lt;&gt;" sent. Request-Payload was: "&lt;&gt; mconcat (toLogStr &lt;$&gt; payload) &lt;&gt; "\n" | statusCode status &gt; 399 && statusCode status &lt; 500 = "Error code "&lt;&gt;toLogStr (statusCode status) &lt;&gt;" sent. Request-Payload was: "&lt;&gt; mconcat (toLogStr &lt;$&gt; payload) &lt;&gt; "\n"
| otherwise = toLogStr (show r) &lt;&gt; "\n" | otherwise = toLogStr (show r) &lt;&gt; "\n"
</code></pre></div> </code></pre></div>
</div> </div>
</details> </details>
</section> </section>
<h4 id='weitere-instanzen-und-definitionen-die-der-generator-noch-nicht-macht' class='mt-6 mb-2 text-2xl font-bold text-gray-700'>Weitere Instanzen und Definitionen, die der Generator (noch) nicht macht</h4> <h4 id='weitere-instanzen-und-definitionen-die-der-generator-noch-nicht-macht' class='mt-6 mb-2 text-2xl font-bold text-gray-700'>Weitere Instanzen und Definitionen, die der Generator (noch) nicht macht</h4>
<p class='mb-3'> <p class='mb-3'>
In der <code class='py-0.5 px-0.5 bg-gray-100'>Myservice.Types</code> werden ein paar hilfreiche Typen und Typinstanzen definiert. Im Folgenden geht es dabei um Dinge für: In der <code class='py-0.5 px-0.5 bg-gray-100'>Myservice.Types</code> werden ein paar hilfreiche Typen und Typ-Instanzen definiert. Im Folgenden geht es dabei um Dinge für:
</p> </p>
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
Envy <code class='py-0.5 px-0.5 bg-gray-100'>Envy</code>
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
Laden von $ENV_VAR in Datentypen Laden von <code class='py-0.5 px-0.5 bg-gray-100'>$ENV_VAR</code> in Datentypen
</li> </li>
<li> <li>
@ -1192,7 +1426,7 @@ loggingMiddleware = liftIO $ mkRequestLogger $ def { outputFormat = CustomOutput
</li> </li>
<li> <li>
ServerConfig <code class='py-0.5 px-0.5 bg-gray-100'>ServerConfig</code>
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
@ -1204,7 +1438,7 @@ loggingMiddleware = liftIO $ mkRequestLogger $ def { outputFormat = CustomOutput
</li> </li>
<li> <li>
ExtraTypes <code class='py-0.5 px-0.5 bg-gray-100'>ExtraTypes</code>
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
@ -1216,19 +1450,27 @@ loggingMiddleware = liftIO $ mkRequestLogger $ def { outputFormat = CustomOutput
</li> </li>
<li> <li>
Out/BSON-Instanzen <code class='py-0.5 px-0.5 bg-gray-100'>Out</code>/<code class='py-0.5 px-0.5 bg-gray-100'>BSON</code>-Instanzen
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
Der API-Generator generiert nur wenige Instanzen automatisch (z.B. Aeson), daher werden hier die fehlenden definiert. Der API-Generator generiert nur wenige Instanzen automatisch (z.B. <code class='py-0.5 px-0.5 bg-gray-100'>aeson</code>), daher werden hier die fehlenden definiert.
</li> </li>
<li> <li>
BSON: Kommunakation mit MongoDB <code class='py-0.5 px-0.5 bg-gray-100'>BSON</code>: Kommunikation mit <code class='py-0.5 px-0.5 bg-gray-100'>MongoDB</code>
</li> </li>
<li> <li>
Out: pretty-printing im Log <code class='py-0.5 px-0.5 bg-gray-100'>Out</code>: pretty-printing im Log
<ul class='my-3 ml-6 space-y-1 list-disc'>
<li>
Nur nötig, wenn man pretty-printing via <code class='py-0.5 px-0.5 bg-gray-100'>Out</code> statt über Generics wie z.b. <code class='py-0.5 px-0.5 bg-gray-100'>pretty-generic</code> oder die automatische Show-Instanz via <code class='py-0.5 px-0.5 bg-gray-100'>prerryShow</code> macht.
</li>
</ul>
</li> </li>
</ul> </ul>
@ -1240,7 +1482,7 @@ loggingMiddleware = liftIO $ mkRequestLogger $ def { outputFormat = CustomOutput
<details> <details>
<summary class='flex items-center justify-center text-2xl italic bg-purple-50 rounded py-1 px-2 mb-3'> <summary class='flex items-center justify-center text-2xl italic bg-purple-50 rounded py-1 px-2 mb-3'>
<header style='display:list-item'> <header style='display:list-item'>
<a href='Haskell/Webapp-Example/MyService_Types.hs'> <a href='Coding/Haskell/Webapp-Example/MyService_Types.hs'>
Webapp-Example: MyService/Types.hs Webapp-Example: MyService/Types.hs
</a> </a>
</header> </header>
@ -1248,7 +1490,7 @@ loggingMiddleware = liftIO $ mkRequestLogger $ def { outputFormat = CustomOutput
<div> <div>
<p class='mb-3'> <p class='mb-3'>
Anleitung siehe <a href='Haskell/Webapp-Example' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkTag'>Webapp-Development in Haskell</a>. Anleitung siehe <a href='Coding/Haskell/Webapp-Example' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkTag'>Webapp-Development in Haskell</a>.
</p> </p>
<div class='py-0.5 mb-3 text-sm'><pre><code class='haskell language-haskell'>{-# OPTIONS_GHC -Wno-orphans #-} <div class='py-0.5 mb-3 text-sm'><pre><code class='haskell language-haskell'>{-# OPTIONS_GHC -Wno-orphans #-}
{-# OPTIONS_GHC -Wno-name-shadowing #-} {-# OPTIONS_GHC -Wno-name-shadowing #-}
@ -1327,12 +1569,13 @@ instance Out ServerConfig
instance Out Response instance Out Response
instance FromBSON Repsonse -- FromBSON-Instanz geht immer davon aus, dass alle keys da sind (ggf. mit null bei Nothing).</code></pre></div> instance FromBSON Repsonse -- FromBSON-Instanz geht immer davon aus, dass alle keys da sind (ggf. mit null bei Nothing).</code></pre></div>
</div> </div>
</details> </details>
</section> </section>
<h4 id='was-noch-zu-tun-ist' class='mt-6 mb-2 text-2xl font-bold text-gray-700'>Was noch zu tun ist</h4> <h4 id='was-noch-zu-tun-ist' class='mt-6 mb-2 text-2xl font-bold text-gray-700'>Was noch zu tun ist</h4>
<p class='mb-3'> <p class='mb-3'>
Den Service implementieren. Einfach ein neues Modul aufmachen (z.B. <code class='py-0.5 px-0.5 bg-gray-100'>MyService.Handler</code> oder <code class='py-0.5 px-0.5 bg-gray-100'>MyService.DieserEndpunktbereich</code>/<code class='py-0.5 px-0.5 bg-gray-100'>MyService.JenerEndpunktbereich</code>) und dort die Funktion implementieren, die man in der <code class='py-0.5 px-0.5 bg-gray-100'>Main.hs</code> benutzt hat. In dem Handler habt ihr dann keinen Stress mehr mit validierung, networking, logging, etc. pp. weil alles in der Main abgehandelt wurde und ihr nur noch den “Happy-Case” implementieren müsst. Beispiel für unseren Handler oben: Den Service implementieren. Einfach ein neues Modul aufmachen (z.B. <code class='py-0.5 px-0.5 bg-gray-100'>MyService.Handler</code> oder <code class='py-0.5 px-0.5 bg-gray-100'>MyService.DieserEndpunktbereich</code>/<code class='py-0.5 px-0.5 bg-gray-100'>MyService.JenerEndpunktbereich</code>) und dort die Funktion implementieren, die man in der <code class='py-0.5 px-0.5 bg-gray-100'>Main.hs</code> benutzt hat. In dem Handler habt ihr dann keinen Stress mehr mit Validierung, networking, logging, etc. pp. weil alles in der Main abgehandelt wurde und ihr nur noch den “Happy-Case” implementieren müsst. Beispiel für unseren Handler oben:
</p> </p>
<div class='py-0.5 mb-3 text-sm'><pre><code class='haskell language-haskell'>myApiEndpointV1Post :: MonadIO m =&gt; ServerConfig -&gt; (ClientEnv,ClientEnv) -&gt; TQueue BS.ByteString -&gt; ([LogItem] -&gt; IO ()) -&gt; Request -&gt; m Response <div class='py-0.5 mb-3 text-sm'><pre><code class='haskell language-haskell'>myApiEndpointV1Post :: MonadIO m =&gt; ServerConfig -&gt; (ClientEnv,ClientEnv) -&gt; TQueue BS.ByteString -&gt; ([LogItem] -&gt; IO ()) -&gt; Request -&gt; m Response
myApiEndpointV1Post sc calls amqPost log req = do myApiEndpointV1Post sc calls amqPost log req = do
@ -1356,7 +1599,7 @@ myApiEndpointV1Post sc calls amqPost log req = do
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
Logging in die Dateien/stdout nach config Logging in die Dateien/<code class='py-0.5 px-0.5 bg-gray-100'>stdout</code> - je nach Konfiguration
</li> </li>
<li> <li>
@ -1374,11 +1617,11 @@ myApiEndpointV1Post sc calls amqPost log req = do
</ul> </ul>
<h4 id='tipps--tricks' class='mt-6 mb-2 text-2xl font-bold text-gray-700'>Tipps & Tricks</h4><h5 id='dateien-die-statisch-ausgeliefert-werden-sollen' class='mt-6 mb-2 text-xl font-bold text-gray-700'>Dateien, die statisch ausgeliefert werden sollen</h5> <h4 id='tipps--tricks' class='mt-6 mb-2 text-2xl font-bold text-gray-700'>Tipps & Tricks</h4><h5 id='dateien-die-statisch-ausgeliefert-werden-sollen' class='mt-6 mb-2 text-xl font-bold text-gray-700'>Dateien, die statisch ausgeliefert werden sollen</h5>
<p class='mb-3'> <p class='mb-3'>
Hierzu erstellt man ein Verzeichnis <code class='py-0.5 px-0.5 bg-gray-100'>static/</code> (konvention; ist im generator so generiert, dass das ausgeliefert wird). Packt man hier z.b. eine <code class='py-0.5 px-0.5 bg-gray-100'>index.html</code> rein, erscheint die, wenn man den Service ansurft. Hierzu erstellt man ein Verzeichnis <code class='py-0.5 px-0.5 bg-gray-100'>static/</code> (Konvention; ist im generator so generiert, dass das ausgeliefert wird). Packt man hier z.b. eine <code class='py-0.5 px-0.5 bg-gray-100'>index.html</code> rein, erscheint die, wenn man den Service ansurft.
</p> </p>
<h5 id='wie-bekomme-ich-diese-fancy-preview-hin' class='mt-6 mb-2 text-xl font-bold text-gray-700'>Wie bekomme ich diese fancy Preview hin?</h5> <h5 id='wie-bekomme-ich-diese-fancy-preview-hin' class='mt-6 mb-2 text-xl font-bold text-gray-700'>Wie bekomme ich diese fancy Preview hin?</h5>
<p class='mb-3'> <p class='mb-3'>
Der Editor, der ganz am Anfang zum Einsatz gekommen ist, braucht nur die <code class='py-0.5 px-0.5 bg-gray-100'>api-doc.yml</code> um diese Ansicht zu erzeugen. Daher empfielt sich hier ein angepasster Fork davon indem die Pfade in der index.html korrigiert sind. Am einfachsten (und von den meisten services so benutzt): In meiner Implementation liegt dann nach dem starten auf http://localhost:PORT/ui/ und kann direkt dort getestet werden. Der Editor, der ganz am Anfang zum Einsatz gekommen ist, braucht nur die <code class='py-0.5 px-0.5 bg-gray-100'>api-doc.yml</code> um diese Ansicht zu erzeugen. Daher empfiehlt sich hier ein angepasster Fork davon indem die Pfade in der index.html korrigiert sind. Am einfachsten (und von den meisten services so benutzt): In meiner Implementation liegt dann nach dem starten auf http://localhost:PORT/ui/ und kann direkt dort getestet werden.
</p> </p>
<h5 id='wie-sorge-ich-für-bessere-warnungen-damit-der-compiler-meine-bugs-fängt' class='mt-6 mb-2 text-xl font-bold text-gray-700'>Wie sorge ich für bessere Warnungen, damit der Compiler meine Bugs fängt?</h5><div class='py-0.5 mb-3 text-sm'><pre><code class='bash language-bash'>stack build --file-watch --ghc-options '-freverse-errors -W -Wall -Wcompat' --interleaved-output</code></pre></div> <h5 id='wie-sorge-ich-für-bessere-warnungen-damit-der-compiler-meine-bugs-fängt' class='mt-6 mb-2 text-xl font-bold text-gray-700'>Wie sorge ich für bessere Warnungen, damit der Compiler meine Bugs fängt?</h5><div class='py-0.5 mb-3 text-sm'><pre><code class='bash language-bash'>stack build --file-watch --ghc-options '-freverse-errors -W -Wall -Wcompat' --interleaved-output</code></pre></div>
<p class='mb-3'> <p class='mb-3'>
@ -1416,13 +1659,13 @@ myApiEndpointV1Post sc calls amqPost log req = do
</li> </li>
<li> <li>
<code class='py-0.5 px-0.5 bg-gray-100'>--interleaved-output</code>: stack-log direkt ausgeben & nicht in dateien schreiben und die dann am ende zusammen cat'en. <code class='py-0.5 px-0.5 bg-gray-100'>--interleaved-output</code>: stack-log direkt ausgeben & nicht in Dateien schreiben und die dann am ende zusammen cat'en.
</li> </li>
</ul> </ul>
<p class='mb-3'> <p class='mb-3'>
Um pro Datei Warnungen auszuschalten (z.B. weil man ganz sicher weiss, was man tut -.-): <code class='py-0.5 px-0.5 bg-gray-100'>{-# OPTIONS_GHC -Wno-whatsoever #-}</code> als Pragma in die Datei. Um pro Datei Warnungen auszuschalten (z.B. weil man ganz sicher weiss, was man tut -.-): <code class='py-0.5 px-0.5 bg-gray-100'>{-# OPTIONS_GHC -Wno-whatsoever #-}</code> als pragma in die Datei.
</p> </p>
<p class='mb-3'> <p class='mb-3'>
@ -1430,21 +1673,21 @@ myApiEndpointV1Post sc calls amqPost log req = do
</p> </p>
<h3 id='deployment' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Deployment</h3> <h3 id='deployment' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Deployment</h3>
<p class='mb-3'> <p class='mb-3'>
Als Beispiel sei hier ein einfaches Docker-Build mit Jenkins-CI gezeigt, weil ich das aus Gründen rumliegen hatte. Kann man analog in fast alle anderen CI übrsetzen. Als Beispiel sei hier ein einfaches Docker-Build mit Jenkins-CI gezeigt, weil ich das aus Gründen rumliegen hatte. Kann man analog in fast alle anderen CI übersetzen.
</p> </p>
<h4 id='docker' class='mt-6 mb-2 text-2xl font-bold text-gray-700'>Docker</h4> <h4 id='docker' class='mt-6 mb-2 text-2xl font-bold text-gray-700'>Docker</h4>
<p class='mb-3'> <p class='mb-3'>
Die angehängten Scripte gehen von einer Standard-Einrichtung aus (statische sachen in static, 2-3 händische Anpassungen auf das eigene Projekt nach auspacken). Nachher liegt dann auch unter static/version die gebaute Versionsnummer & kann abgerufen werden. In der Dockerfile.release und der Jenkinsfile müssen noch anpassungen gemacht werden. Konkret: Die angehängten Scripte gehen von einer Standard-Einrichtung aus (statische Sachen in static, 2-3 händische Anpassungen auf das eigene Projekt nach auspacken). Nachher liegt dann auch unter static/version die gebaute Versionsnummer & kann abgerufen werden. In der <code class='py-0.5 px-0.5 bg-gray-100'>Dockerfile.release</code> und der <code class='py-0.5 px-0.5 bg-gray-100'>Jenkinsfile</code> müssen noch Anpassungen gemacht werden. Konkret:
</p> </p>
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
in der Dockerfile.release: alle <code class='py-0.5 px-0.5 bg-gray-100'>&lt;&lt;&lt;HIER&gt;&gt;&gt;</code>-Stellen sinnvoll befüllen in der <code class='py-0.5 px-0.5 bg-gray-100'>Dockerfile.release</code>: alle <code class='py-0.5 px-0.5 bg-gray-100'>&lt;&lt;&lt;HIER&gt;&gt;&gt;</code>-Stellen sinnvoll befüllen
</li> </li>
<li> <li>
in der Jenkinsfile die defs für “servicename” und “servicebinary” ausfüllen. Binary ist das, was bei stack exec aufgerufen wird; name ist der Image-Name für das docker-repository. in der <code class='py-0.5 px-0.5 bg-gray-100'>Jenkinsfile</code> die defs für “servicename” und “servicebinary” ausfüllen. Binary ist das, was bei stack exec aufgerufen wird; name ist der Image-Name für das docker-repository.
</li> </li>
</ul> </ul>
@ -1456,17 +1699,17 @@ myApiEndpointV1Post sc calls amqPost log req = do
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
git-repository url anpassen git-repository URL anpassen
</li> </li>
<li> <li>
Environment-Vars anpasses ($BRANCH = test & live haben keine zusatzdinger im docker-image-repository; ansonsten hat das image $BRANCH im namen) Environment-Vars anpassen ($BRANCH = test & live haben keine zusatzdinger im docker-image-repository; ansonsten hat das image $BRANCH im Namen)
</li> </li>
</ul> </ul>
<p class='mb-3'> <p class='mb-3'>
Wenn das durchgebaut ist, liegt im test/live-repository ein docker-image namens <code class='py-0.5 px-0.5 bg-gray-100'>servicename:version</code>. Wenn das fertig gebaut ist, liegt im test/live-repository ein docker-image namens <code class='py-0.5 px-0.5 bg-gray-100'>servicename:version</code>.
</p> </p>
<h3 id='omg-ich-muss-meine-api-ändern-was-mache-ich-nun' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>OMG! Ich muss meine API ändern. Was mache ich nun?</h3> <h3 id='omg-ich-muss-meine-api-ändern-was-mache-ich-nun' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>OMG! Ich muss meine API ändern. Was mache ich nun?</h3>
<ul class='my-3 ml-6 space-y-1 list-decimal list-inside'> <ul class='my-3 ml-6 space-y-1 list-decimal list-inside'>
@ -1493,6 +1736,7 @@ myApiEndpointV1Post sc calls amqPost log req = do
</ul> </ul>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -1515,14 +1759,14 @@ myApiEndpointV1Post sc calls amqPost log req = do
<ul class='space-y-1'> <ul class='space-y-1'>
<li> <li>
<a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Haskell/Webapp-Example/MyService_Types.hs'> <a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Coding/Haskell/Webapp-Example/MyService_Types.hs'>
Webapp-Example: MyService/Types.hs Webapp-Example: MyService/Types.hs
</a> </a>
<div class='mb-4 overflow-auto text-sm text-gray-500'> <div class='mb-4 overflow-auto text-sm text-gray-500'>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'> <div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div><p>Anleitung siehe <a href='Haskell/Webapp-Example' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkTag'>Webapp-Development in Haskell</a>.</p></div> <div><p>Anleitung siehe <a href='Coding/Haskell/Webapp-Example' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkTag'>Webapp-Development in Haskell</a>.</p></div>
</div> </div>
</div> </div>
@ -1530,14 +1774,29 @@ myApiEndpointV1Post sc calls amqPost log req = do
</li> </li>
<li> <li>
<a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Haskell/Webapp-Example/Main.hs'> <a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Coding/Haskell/Webapp-Example/Main.hs'>
Webapp-Example: Main.hs Webapp-Example: Main.hs
</a> </a>
<div class='mb-4 overflow-auto text-sm text-gray-500'> <div class='mb-4 overflow-auto text-sm text-gray-500'>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'> <div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div><p>Wie man das verwendet, siehe <a href='Haskell/Webapp-Example' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkTag'>Webapp-Development in Haskell</a>.</p></div> <div><p>Wie man das verwendet, siehe <a href='Coding/Haskell/Webapp-Example' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkTag'>Webapp-Development in Haskell</a>.</p></div>
</div>
</div>
</li>
<li>
<a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Coding/OpenAPI'>
Openapi-generator
</a>
<div class='mb-4 overflow-auto text-sm text-gray-500'>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div><p>Wie im <a href='Coding/Haskell/Webapp-Example' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkNormal'>Webapp-Development in Haskell</a> kurz angerissen wird in Haskell nicht zwischen Server und Client unterschieden. Daher können hier sehr viele Optimierungen bei Änderungen passieren, die in anderen Sprachen nicht so einfach möglich sind.</p></div>
</div> </div>
</div> </div>
@ -1575,7 +1834,7 @@ myApiEndpointV1Post sc calls amqPost log req = do
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -1607,6 +1866,9 @@ myApiEndpointV1Post sc calls amqPost log req = do
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -9,7 +9,7 @@
</title> </title>
<meta property='og:description' content='Wie man das verwendet, siehe ([[Webapp-Example]],[]).' /> <meta property='og:description' content='Wie man das verwendet, siehe [[Webapp-Example]].' />
<meta property='og:site_name' content='Home' /> <meta property='og:site_name' content='Home' />
<meta property='og:image' content /> <meta property='og:image' content />
<meta property='og:type' content='website' /> <meta property='og:type' content='website' />
@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -193,7 +235,16 @@
</li> </li>
<li class='inline-flex items-center'> <li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Haskell'> <a class='px-1 font-bold' href='Coding'>
Coding
</a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
<path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path>
</svg>
</li>
<li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Coding/Haskell'>
Haskell Haskell
</a> </a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'> <svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
@ -202,7 +253,7 @@
</li> </li>
<li class='inline-flex items-center'> <li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Haskell/Webapp-Example'> <a class='px-1 font-bold' href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell Webapp-Development in Haskell
</a> </a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'> <svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
@ -379,7 +430,43 @@
</svg> </svg>
<a class='font-bold hover:underline truncate' title='Haskell' href='Haskell'> <a class='font-bold hover:underline truncate' title='Coding' href='Coding'>
Coding
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-700' viewBox='0 0 20 20' fill='currentColor'>
<path fill-rule='evenodd' d='M2 6a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1H8a3 3 0 00-3 3v1.5a1.5 1.5 0 01-3 0V6z' clip-rule='evenodd'></path>
<path d='M6 12a2 2 0 012-2h8a2 2 0 012 2v2a2 2 0 01-2 2H2h2a2 2 0 002-2v-2z'></path>
</svg>
<a class='font-bold hover:underline truncate' title='Haskell' href='Coding/Haskell'>
Haskell Haskell
</a> </a>
@ -401,6 +488,43 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Coding/Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -412,7 +536,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Code-Snippets' href='Haskell/Code%20Snippets'> <a class='hover:underline truncate' title='Code-Snippets' href='Coding/Haskell/Code%20Snippets'>
Code-Snippets Code-Snippets
</a> </a>
@ -452,7 +576,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Haskell/FFPiH'> <a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Coding/Haskell/FFPiH'>
Fortgeschrittene funktionale Programmierung in Haskell Fortgeschrittene funktionale Programmierung in Haskell
</a> </a>
@ -489,7 +613,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Lenses' href='Haskell/Lenses'> <a class='hover:underline truncate' title='Lenses' href='Coding/Haskell/Lenses'>
Lenses Lenses
</a> </a>
@ -514,43 +638,6 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
@ -565,7 +652,7 @@
</svg> </svg>
<a class='font-bold hover:underline truncate' title='Webapp-Development in Haskell' href='Haskell/Webapp-Example'> <a class='font-bold hover:underline truncate' title='Webapp-Development in Haskell' href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell Webapp-Development in Haskell
</a> </a>
@ -597,7 +684,7 @@
</svg> </svg>
<a class='font-bold text-purple-600 hover:underline truncate' title='Webapp-Example: Main.hs' href='Haskell/Webapp-Example/Main.hs'> <a class='font-bold text-purple-600 hover:underline truncate' title='Webapp-Example: Main.hs' href='Coding/Haskell/Webapp-Example/Main.hs'>
Webapp-Example: Main.hs Webapp-Example: Main.hs
</a> </a>
@ -634,7 +721,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Webapp-Example: MyService/Types.hs' href='Haskell/Webapp-Example/MyService_Types.hs'> <a class='hover:underline truncate' title='Webapp-Example: MyService/Types.hs' href='Coding/Haskell/Webapp-Example/MyService_Types.hs'>
Webapp-Example: MyService/Types.hs Webapp-Example: MyService/Types.hs
</a> </a>
@ -665,6 +752,46 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Openapi-generator' href='Coding/OpenAPI'>
Openapi-generator
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -702,6 +829,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -789,7 +992,7 @@
<li> <li>
<div class='text-gray-900 forest-link'> <div class='text-gray-900 forest-link'>
<a href='Haskell/Webapp-Example'> <a href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell Webapp-Development in Haskell
</a> </a>
</div> </div>
@ -800,8 +1003,19 @@
<li> <li>
<div class='text-gray-900 forest-link'> <div class='text-gray-900 forest-link'>
<a href='Haskell'> <a href='Coding/OpenAPI'>
Haskell Openapi-generator
</a>
</div>
<ul>
<li>
<div class='text-gray-900 forest-link'>
<a href='Coding'>
Coding
</a> </a>
</div> </div>
@ -821,6 +1035,21 @@
</ul> </ul>
</li>
</ul>
</li>
<li>
<div class='text-gray-900 forest-link'>
<a href='Coding/Haskell'>
Haskell
</a>
</div>
</li> </li>
</ul> </ul>
@ -841,7 +1070,7 @@
<!-- What goes in this file will appear on top of note body--> <!-- What goes in this file will appear on top of note body-->
<p class='mb-3'> <p class='mb-3'>
Wie man das verwendet, siehe <a href='Haskell/Webapp-Example' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkTag'>Webapp-Development in Haskell</a>. Wie man das verwendet, siehe <a href='Coding/Haskell/Webapp-Example' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkTag'>Webapp-Development in Haskell</a>.
</p> </p>
<div class='py-0.5 mb-3 text-sm'><pre><code class='haskell language-haskell'>{-# OPTIONS_GHC -Wno-name-shadowing #-} <div class='py-0.5 mb-3 text-sm'><pre><code class='haskell language-haskell'>{-# OPTIONS_GHC -Wno-name-shadowing #-}
{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleContexts #-}
@ -1025,6 +1254,7 @@ loggingMiddleware = liftIO $ mkRequestLogger $ def { outputFormat = CustomOutput
| statusCode status &gt; 399 && statusCode status &lt; 500 = "Error code "&lt;&gt;toLogStr (statusCode status) &lt;&gt;" sent. Request-Payload was: "&lt;&gt; mconcat (toLogStr &lt;$&gt; payload) &lt;&gt; "\n" | statusCode status &gt; 399 && statusCode status &lt; 500 = "Error code "&lt;&gt;toLogStr (statusCode status) &lt;&gt;" sent. Request-Payload was: "&lt;&gt; mconcat (toLogStr &lt;$&gt; payload) &lt;&gt; "\n"
| otherwise = toLogStr (show r) &lt;&gt; "\n" | otherwise = toLogStr (show r) &lt;&gt; "\n"
</code></pre></div> </code></pre></div>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -1047,14 +1277,14 @@ loggingMiddleware = liftIO $ mkRequestLogger $ def { outputFormat = CustomOutput
<ul class='space-y-1'> <ul class='space-y-1'>
<li> <li>
<a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Haskell/Webapp-Example'> <a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell Webapp-Development in Haskell
</a> </a>
<div class='mb-4 overflow-auto text-sm text-gray-500'> <div class='mb-4 overflow-auto text-sm text-gray-500'>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'> <div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div><p><a href='Haskell/Webapp-Example/Main.hs' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkEmbed'>Webapp-Example: Main.hs</a></p></div> <div><p><a href='Coding/Haskell/Webapp-Example/Main.hs' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkEmbed'>Webapp-Example: Main.hs</a></p></div>
</div> </div>
</div> </div>
@ -1092,7 +1322,7 @@ loggingMiddleware = liftIO $ mkRequestLogger $ def { outputFormat = CustomOutput
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -1124,6 +1354,9 @@ loggingMiddleware = liftIO $ mkRequestLogger $ def { outputFormat = CustomOutput
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -9,7 +9,7 @@
</title> </title>
<meta property='og:description' content='Anleitung siehe ([[Webapp-Example]],[]).' /> <meta property='og:description' content='Anleitung siehe [[Webapp-Example]].' />
<meta property='og:site_name' content='Home' /> <meta property='og:site_name' content='Home' />
<meta property='og:image' content /> <meta property='og:image' content />
<meta property='og:type' content='website' /> <meta property='og:type' content='website' />
@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -193,7 +235,16 @@
</li> </li>
<li class='inline-flex items-center'> <li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Haskell'> <a class='px-1 font-bold' href='Coding'>
Coding
</a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
<path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path>
</svg>
</li>
<li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Coding/Haskell'>
Haskell Haskell
</a> </a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'> <svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
@ -202,7 +253,7 @@
</li> </li>
<li class='inline-flex items-center'> <li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Haskell/Webapp-Example'> <a class='px-1 font-bold' href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell Webapp-Development in Haskell
</a> </a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'> <svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
@ -379,7 +430,43 @@
</svg> </svg>
<a class='font-bold hover:underline truncate' title='Haskell' href='Haskell'> <a class='font-bold hover:underline truncate' title='Coding' href='Coding'>
Coding
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-700' viewBox='0 0 20 20' fill='currentColor'>
<path fill-rule='evenodd' d='M2 6a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1H8a3 3 0 00-3 3v1.5a1.5 1.5 0 01-3 0V6z' clip-rule='evenodd'></path>
<path d='M6 12a2 2 0 012-2h8a2 2 0 012 2v2a2 2 0 01-2 2H2h2a2 2 0 002-2v-2z'></path>
</svg>
<a class='font-bold hover:underline truncate' title='Haskell' href='Coding/Haskell'>
Haskell Haskell
</a> </a>
@ -401,6 +488,43 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Coding/Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -412,7 +536,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Code-Snippets' href='Haskell/Code%20Snippets'> <a class='hover:underline truncate' title='Code-Snippets' href='Coding/Haskell/Code%20Snippets'>
Code-Snippets Code-Snippets
</a> </a>
@ -452,7 +576,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Haskell/FFPiH'> <a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Coding/Haskell/FFPiH'>
Fortgeschrittene funktionale Programmierung in Haskell Fortgeschrittene funktionale Programmierung in Haskell
</a> </a>
@ -489,7 +613,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Lenses' href='Haskell/Lenses'> <a class='hover:underline truncate' title='Lenses' href='Coding/Haskell/Lenses'>
Lenses Lenses
</a> </a>
@ -514,43 +638,6 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
@ -565,7 +652,7 @@
</svg> </svg>
<a class='font-bold hover:underline truncate' title='Webapp-Development in Haskell' href='Haskell/Webapp-Example'> <a class='font-bold hover:underline truncate' title='Webapp-Development in Haskell' href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell Webapp-Development in Haskell
</a> </a>
@ -599,7 +686,7 @@
</svg> </svg>
<a class='hover:underline truncate' title='Webapp-Example: Main.hs' href='Haskell/Webapp-Example/Main.hs'> <a class='hover:underline truncate' title='Webapp-Example: Main.hs' href='Coding/Haskell/Webapp-Example/Main.hs'>
Webapp-Example: Main.hs Webapp-Example: Main.hs
</a> </a>
@ -634,7 +721,7 @@
</svg> </svg>
<a class='font-bold text-purple-600 hover:underline truncate' title='Webapp-Example: MyService/Types.hs' href='Haskell/Webapp-Example/MyService_Types.hs'> <a class='font-bold text-purple-600 hover:underline truncate' title='Webapp-Example: MyService/Types.hs' href='Coding/Haskell/Webapp-Example/MyService_Types.hs'>
Webapp-Example: MyService/Types.hs Webapp-Example: MyService/Types.hs
</a> </a>
@ -665,6 +752,46 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Openapi-generator' href='Coding/OpenAPI'>
Openapi-generator
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -702,6 +829,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -789,7 +992,7 @@
<li> <li>
<div class='text-gray-900 forest-link'> <div class='text-gray-900 forest-link'>
<a href='Haskell/Webapp-Example'> <a href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell Webapp-Development in Haskell
</a> </a>
</div> </div>
@ -800,8 +1003,19 @@
<li> <li>
<div class='text-gray-900 forest-link'> <div class='text-gray-900 forest-link'>
<a href='Haskell'> <a href='Coding/OpenAPI'>
Haskell Openapi-generator
</a>
</div>
<ul>
<li>
<div class='text-gray-900 forest-link'>
<a href='Coding'>
Coding
</a> </a>
</div> </div>
@ -821,6 +1035,21 @@
</ul> </ul>
</li>
</ul>
</li>
<li>
<div class='text-gray-900 forest-link'>
<a href='Coding/Haskell'>
Haskell
</a>
</div>
</li> </li>
</ul> </ul>
@ -841,7 +1070,7 @@
<!-- What goes in this file will appear on top of note body--> <!-- What goes in this file will appear on top of note body-->
<p class='mb-3'> <p class='mb-3'>
Anleitung siehe <a href='Haskell/Webapp-Example' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkTag'>Webapp-Development in Haskell</a>. Anleitung siehe <a href='Coding/Haskell/Webapp-Example' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkTag'>Webapp-Development in Haskell</a>.
</p> </p>
<div class='py-0.5 mb-3 text-sm'><pre><code class='haskell language-haskell'>{-# OPTIONS_GHC -Wno-orphans #-} <div class='py-0.5 mb-3 text-sm'><pre><code class='haskell language-haskell'>{-# OPTIONS_GHC -Wno-orphans #-}
{-# OPTIONS_GHC -Wno-name-shadowing #-} {-# OPTIONS_GHC -Wno-name-shadowing #-}
@ -920,6 +1149,7 @@ instance Out ServerConfig
instance Out Response instance Out Response
instance FromBSON Repsonse -- FromBSON-Instanz geht immer davon aus, dass alle keys da sind (ggf. mit null bei Nothing).</code></pre></div> instance FromBSON Repsonse -- FromBSON-Instanz geht immer davon aus, dass alle keys da sind (ggf. mit null bei Nothing).</code></pre></div>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -942,14 +1172,14 @@ instance FromBSON Repsonse -- FromBSON-Instanz geht immer davon aus, dass alle k
<ul class='space-y-1'> <ul class='space-y-1'>
<li> <li>
<a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Haskell/Webapp-Example'> <a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell Webapp-Development in Haskell
</a> </a>
<div class='mb-4 overflow-auto text-sm text-gray-500'> <div class='mb-4 overflow-auto text-sm text-gray-500'>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'> <div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div><p><a href='Haskell/Webapp-Example/MyService_Types.hs' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkEmbed'>Webapp-Example: MyService/Types.hs</a></p></div> <div><p><a href='Coding/Haskell/Webapp-Example/MyService_Types.hs' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkEmbed'>Webapp-Example: MyService/Types.hs</a></p></div>
</div> </div>
</div> </div>
@ -987,7 +1217,7 @@ instance FromBSON Repsonse -- FromBSON-Instanz geht immer davon aus, dass alle k
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -1019,6 +1249,9 @@ instance FromBSON Repsonse -- FromBSON-Instanz geht immer davon aus, dass alle k
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -0,0 +1,875 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8' />
<meta name='viewport' content='width=device-width, initial-scale=1' />
<title>
Openapi-generator Home
</title>
<meta property='og:description' content='[[TODO]] Idee hinter einem API-Generator' />
<meta property='og:site_name' content='Home' />
<meta property='og:image' content />
<meta property='og:type' content='website' />
<meta property='og:title' content='Openapi-generator' />
<base href='/' />
<link href='favicon.svg' rel='icon' />
<script>
window.MathJax = {
startup: {
ready: () => {
MathJax.startup.defaultReady();
}
}
};
</script>
<script async id='MathJax-script' src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js'></script>
<!-- mermaid.js --><script src='https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js'></script>
<script>
mermaid.initialize({startOnLoad:false});
mermaid.init(undefined,document.querySelectorAll(".mermaid"));
</script>
<!-- highlight.js -->
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/styles/hybrid.min.css' />
<script src='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js'></script>
<!-- Include languages that Emanote itself uses -->
<script src='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/languages/haskell.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/languages/nix.min.js'></script>
<script>hljs.highlightAll();</script>
<link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<style>
/* Heist error element */
strong.error {
color: lightcoral;
font-size: 90%;
font-family: monospace;
}
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style>
@font-face {
font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap;
}
body {
font-family: 'WorkSans', sans-serif;
font-variation-settings: 'wght' 350;
}
a.mavenLinkBold {
font-variation-settings: 'wght' 400;
}
strong {
font-variation-settings: 'wght' 500;
}
h1,
h2,
h3,
h4,
h5,
h6,
header,
.header-font {
font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
}
</style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote -->
<style>
#stork-search-container {
z-index: 1000;
background-color: rgb(15 23 42/.8);
}
.stork-overflow-hidden-important {
overflow: hidden !important;
}
</style>
<script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'>
window.emanote = {};
window.emanote.stork = {
searchShown: false,
toggleSearch: function () {
document.getElementById('stork-search-container').classList.toggle('hidden');
window.emanote.stork.searchShown = document.body.classList.toggle('stork-overflow-hidden-important');
if (window.emanote.stork.searchShown) {
document.getElementById('stork-search-input').focus();
}
},
clearSearch: function () {
document.getElementById('stork-search-container').classList.add('hidden');
document.body.classList.remove('stork-overflow-hidden-important');
window.emanote.stork.searchShown = false;
},
init: function () {
const indexName = 'emanote-search'; // used to match input[data-stork] attribute value
const baseUrl = document.currentScript.getAttribute('data-emanote-base-url') || '/';
const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') {
window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl);
});
document.addEventListener('keydown', event => {
if (window.emanote.stork.searchShown && event.key === 'Escape') {
window.emanote.stork.clearSearch();
event.preventDefault();
} else if ((event.key == 'k' || event.key == 'K') && (event.ctrlKey || event.metaKey)) {
window.emanote.stork.toggleSearch();
event.preventDefault();
}
});
} else {
// Override existing on Ema's hot-reload
stork.register(indexName, indexUrl, { forceOverwrite: true });
}
}
};
window.emanote.stork.init();
</script>
</head>
<!-- DoNotFormat -->
<!-- DoNotFormat -->
<body class='bg-gray-400 overflow-y-scroll'>
<div class='container mx-auto'>
<nav id='breadcrumbs' class='w-full text-gray-700 md:hidden'>
<div class='flex justify-left'>
<div class='w-full px-2 py-2 bg-gray-50'>
<ul class='flex flex-wrap text-lg'>
<li class='inline-flex items-center'>
<img style='width: 1rem;' src='favicon.svg' />
</li>
<li class='inline-flex items-center'>
<a class='px-1 font-bold' href=''>
Home
</a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
<path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path>
</svg>
</li>
<li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Coding'>
Coding
</a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
<path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path>
</svg>
</li>
</ul>
</div>
<button class='inline px-2 py-1 bg-gray-50 outline-none cursor-pointer focus:outline-none' title='Search (Ctrl+K)' type='button' onclick='window.emanote.stork.toggleSearch()'>
<svg xmlns='http://www.w3.org/2000/svg' style='width: 1rem;' class='hover:text-purple-700' f
fill='none' viewBox='0 0 24 24' stroke='currentColor' stroke-width='2'>
<path stroke-linecap='round' stroke-linejoin='round' d='M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z'></path>
</svg>
</button>
<button class='inline px-2 py-1 text-white bg-purple-600 outline-none cursor-pointer focus:outline-none' title='Toggle sidebar' type='button' onclick="toggleHidden('sidebar')">
<svg xmlns='http://www.w3.org/2000/svg' class='w-4' fill='none' viewBox='0 0 24 24' stroke='currentColor'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 6h16M4 12h16M4 18h16'></path>
</svg>
</button>
<script>
function toggleHidden(elemId) {
document.getElementById(elemId).classList.toggle("hidden");
}
</script>
</div>
</nav>
<div id='container' class='flex flex-nowrap flex-col md:flex-row bg-gray-50 md:mt-8 md:shadow-2xl md:mb-8'>
<!-- Sidebar column -->
<nav id='sidebar' class='flex-shrink hidden leading-relaxed md:block md:sticky md:top-0 md:h-full md:w-48 xl:w-64'>
<div class='px-2 py-2 text-gray-800'>
<div id='indexing-links' class='flex flex-row float-right p-2 space-x-2 text-gray-500'>
<a href='-/tags' title='View tags'>
<svg style='width: 1rem;' class='hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z'>
</path>
</svg>
</a>
<a href='-/all' title='Expand full tree'>
<svg style='width: 1rem;' class='hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4'>
</path>
</svg>
</a>
<a title='Search (Ctrl+K)' class='cursor-pointer' onclick='window.emanote.stork.toggleSearch()'>
<svg xmlns='http://www.w3.org/2000/svg' style='width: 1rem;' class='hover:text-purple-700' f
fill='none' viewBox='0 0 24 24' stroke='currentColor' stroke-width='2'>
<path stroke-linecap='round' stroke-linejoin='round' d='M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z'></path>
</svg>
</a>
</div>
<div id='site-logo' class='pl-2'>
<div class='flex items-center my-2 space-x-2 justify-left'>
<a href='' title='Go to Home'>
<!-- The style width attribute here is to prevent huge
icon from displaying at those rare occasions when Tailwind
hasn't kicked in immediately on page load
-->
<img style='width: 1rem;' class='transition transform hover:scale-110 hover:opacity-80' src='favicon.svg' />
</a>
<a class='font-bold truncate' title='Go to Home' href=''>
Home
</a>
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='About' href='About'>
About
</a>
<span class='text-gray-300' title='3 children inside'>
3
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Android' href='Android'>
Android
</a>
<span class='text-gray-300' title='1 children inside'>
1
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-700' viewBox='0 0 20 20' fill='currentColor'>
<path fill-rule='evenodd' d='M2 6a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1H8a3 3 0 00-3 3v1.5a1.5 1.5 0 01-3 0V6z' clip-rule='evenodd'></path>
<path d='M6 12a2 2 0 012-2h8a2 2 0 012 2v2a2 2 0 01-2 2H2h2a2 2 0 002-2v-2z'></path>
</svg>
<a class='font-bold hover:underline truncate' title='Coding' href='Coding'>
Coding
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Haskell' href='Coding/Haskell'>
Haskell
</a>
<span class='text-gray-300' title='5 children inside'>
5
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z'>
</path>
</svg>
<a class='font-bold text-purple-600 hover:underline truncate' title='Openapi-generator' href='Coding/OpenAPI'>
Openapi-generator
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Logik für Dummies' href='Logik'>
Logik für Dummies
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Uni' href='Uni'>
Uni
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Unix' href='Unix'>
Unix
</a>
<span class='text-gray-300' title='1 children inside'>
1
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
</nav>
<!-- Main body column -->
<div class='flex-1 w-full overflow-x-auto bg-white'>
<main class='px-4 py-4'>
<!-- DoNotFormat -->
<!-- DoNotFormat -->
<nav id='uptree' class='flipped tree' style='transform-origin: 50%;'>
<ul class='root'>
<li>
<ul>
<li>
<div class='text-gray-900 forest-link'>
<a href='Coding'>
Coding
</a>
</div>
<ul>
<li>
<div class='text-gray-900 forest-link'>
<a href=''>
Home
</a>
</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
<h1 class='flex items-end justify-center mb-4 p-3 bg-purple-100 text-5xl font-extrabold text-black rounded'>
<a class='z-40 tracking-tighter '>
Openapi-generator
</a>
</h1>
<article class='overflow-auto'>
<!-- What goes in this file will appear on top of note body-->
<h2 id='idee-hinter-einem-api-generator' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Idee hinter einem API-Generator</h2>
<p class='mb-3'>
<a href='TODO' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkNormal'>Todo</a> Idee hinter einem API-Generator
</p>
<h2 id='theorie-und-praxis' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Theorie und Praxis</h2>
<p class='mb-3'>
<a href='TODO' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkNormal'>Todo</a> Theorie und Praxis
</p>
<h2 id='spezialfall-in-haskell' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Spezialfall in Haskell</h2>
<p class='mb-3'>
<a href='TODO' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkNormal'>Todo</a> Veraltet
</p>
<p class='mb-3'>
Wie im <a href='Coding/Haskell/Webapp-Example' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkNormal'>Webapp-Development in Haskell</a> kurz angerissen wird in Haskell nicht zwischen Server und Client unterschieden. Daher können hier sehr viele Optimierungen bei Änderungen passieren, die in anderen Sprachen nicht so einfach möglich sind.
</p>
<p class='mb-3'>
Die generierte Library hat die Funktionen, die ein Client braucht direkt dabei und man muss lediglich die Verbindung initialisieren (Callback für Network-Requests, Serveradresse etc.) und kann dann direkt alle Funktionen benutzen. Partial Application hilft hier massiv und man bekommt z.b. Für die Beispiel-Tierhandlung aus dem ursprünglichem <code class='py-0.5 px-0.5 bg-gray-100'>getPet :: </code> direkt so etwas wie <code class='py-0.5 px-0.5 bg-gray-100'>getPet :: PetID -&gt; IO Pet</code>
</p>
<!-- div class="flex items-center justify-center mt-2">
<ema:metadata>
<with var="template">
<a class="text-gray-300 hover:text-${theme}-600 text-sm" title="Edit this page on GitHub"
href="${value:editBaseUrl}/${ema:note:source-path}">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" />
</svg>
</a>
</with>
</ema:metadata>
</div -->
</article>
<div class='flex flex-col lg:flex-row lg:space-x-2'>
<div class='flex-1 p-4 mt-8 bg-gray-100 rounded'>
<header class='mb-2 text-xl font-semibold text-gray-500'>Links to this page</header>
<ul class='space-y-1'>
<li>
<a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Coding/Haskell/Webapp-Example'>
Webapp-Development in Haskell
</a>
<div class='mb-4 overflow-auto text-sm text-gray-500'>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div><p>Um die Anforderungen und Möglichkeiten des jeweiligen Services sauber zu erfassen und automatisiert zu prüfen, dummy-implementationen zu bekommen und vieles andere mehr, empfiehlt es sich den <a href='Coding/OpenAPI' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkTag'>openapi-generator</a> zu nutzen.</p></div>
</div>
</div>
</li>
</ul>
</div>
</div>
<section class='flex flex-wrap items-end justify-center my-4 space-x-2 space-y-2 font-mono text-sm'>
</section>
<!-- What goes in this file will at the very end of the main div -->
</main>
</div>
</div>
<footer class='flex items-center justify-center mt-2 mb-8 space-x-4 text-center text-gray-800'>
<div>
<a href='' title='Go to Home page'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-6 h-6 hover:text-purple-700' fill='none' viewBox='0 0 24 24' stroke='currentColor'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6'></path>
</svg>
</a>
</div>
<div>
<a href='-/all' title='View Index'>
<svg class='w-6 h-6 hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4'>
</path>
</svg>
</a>
</div>
<div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a>
</div>
<div>
<a href='-/tags' title='View tags'>
<svg class='w-6 h-6 hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z'>
</path>
</svg>
</a>
</div>
<div>
<a href='-/tasks' title='View tasks'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-6 h-6 hover:text-purple-700' fill='none' viewBox='0 0 24 24' stroke='currentColor'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z'></path>
</svg>
</a>
</div>
</footer>
</div>
<div id='stork-search-container' class='hidden fixed w-screen h-screen inset-0 backdrop-filter backdrop-blur-sm'>
<div class='fixed w-screen h-screen inset-0' onclick='window.emanote.stork.toggleSearch()'></div>
<div class='container mx-auto p-10 mt-10'>
<div class='stork-wrapper-flat container mx-auto'>
<input id='stork-search-input' data-stork='emanote-search' class='stork-input' placeholder='Search (Ctrl+K) ...' />
<div data-stork='emanote-search-output' class='stork-output'></div>
</div>
</div>
</div>
</body>
</html>

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -358,13 +400,13 @@
</svg> </svg>
<a class='hover:underline truncate' title='Haskell' href='Haskell'> <a class='hover:underline truncate' title='Coding' href='Coding'>
Haskell Coding
</a> </a>
<span class='text-gray-300' title='5 children inside'> <span class='text-gray-300' title='2 children inside'>
5 2
</span> </span>
@ -421,6 +463,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -777,6 +895,7 @@
Damit ist letztere qua definitionem mächtiger als Erstgenannte, da diese in letztgenannter enthalten ist. Damit ist letztere qua definitionem mächtiger als Erstgenannte, da diese in letztgenannter enthalten ist.
</p> </p>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -822,7 +941,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -854,6 +973,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -5,7 +5,7 @@
<meta charset='UTF-8' /> <meta charset='UTF-8' />
<meta name='viewport' content='width=device-width, initial-scale=1' /> <meta name='viewport' content='width=device-width, initial-scale=1' />
<title> <title>
Haskell Home Opinions Home
</title> </title>
@ -13,7 +13,7 @@
<meta property='og:site_name' content='Home' /> <meta property='og:site_name' content='Home' />
<meta property='og:image' content /> <meta property='og:image' content />
<meta property='og:type' content='website' /> <meta property='og:type' content='website' />
<meta property='og:title' content='Haskell' /> <meta property='og:title' content='Opinions' />
<base href='/' /> <base href='/' />
@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -345,38 +387,6 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-700' viewBox='0 0 20 20' fill='currentColor'>
<path fill-rule='evenodd' d='M2 6a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1H8a3 3 0 00-3 3v1.5a1.5 1.5 0 01-3 0V6z' clip-rule='evenodd'></path>
<path d='M6 12a2 2 0 012-2h8a2 2 0 012 2v2a2 2 0 01-2 2H2h2a2 2 0 002-2v-2z'></path>
</svg>
<a class='font-bold text-purple-600 hover:underline truncate' title='Haskell' href='Haskell'>
Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
@ -390,8 +400,8 @@
</svg> </svg>
<a class='hover:underline truncate' title='Code-Snippets' href='Haskell/Code%20Snippets'> <a class='hover:underline truncate' title='Coding' href='Coding'>
Code-Snippets Coding
</a> </a>
@ -418,159 +428,6 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Fortgeschrittene funktionale Programmierung in Haskell' href='Haskell/FFPiH'>
Fortgeschrittene funktionale Programmierung in Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Lenses' href='Haskell/Lenses'>
Lenses
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Talks und Posts zu Haskell' href='Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Webapp-Development in Haskell' href='Haskell/Webapp-Example'>
Webapp-Development in Haskell
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -606,6 +463,152 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-700' viewBox='0 0 20 20' fill='currentColor'>
<path fill-rule='evenodd' d='M2 6a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1H8a3 3 0 00-3 3v1.5a1.5 1.5 0 01-3 0V6z' clip-rule='evenodd'></path>
<path d='M6 12a2 2 0 012-2h8a2 2 0 012 2v2a2 2 0 01-2 2H2h2a2 2 0 002-2v-2z'></path>
</svg>
<a class='font-bold text-purple-600 hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Editors' href='Opinions/Editors'>
Editors
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Keyboard-Layouts' href='Opinions/Layout'>
Keyboard-Layouts
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
@ -710,73 +713,50 @@
</nav> </nav>
<h1 class='flex items-end justify-center mb-4 p-3 bg-purple-100 text-5xl font-extrabold text-black rounded'> <h1 class='flex items-end justify-center mb-4 p-3 bg-purple-100 text-5xl font-extrabold text-black rounded'>
<a class='z-40 tracking-tighter '> <a class='z-40 tracking-tighter '>
Haskell Opinions
</a> </a>
</h1> </h1>
<article class='overflow-auto'> <article class='overflow-auto'>
<!-- What goes in this file will appear on top of note body--> <!-- What goes in this file will appear on top of note body-->
<nav> <nav>
<div class='mb-8'> <div class='mb-8'>
<header class='pb-2 mb-2 font-semibold text-gray-600'> <header data-nosnippet class='pb-2 mb-2 font-semibold text-gray-600'>
Pages matching path './*' Pages matching path './*'
</header> </header>
<ul>
<li>
<div class='flex flex-wrap my-2'> <div class='flex flex-wrap my-2'>
<span class='mr-2 text-right text-gray-600'> <span data-nosnippet class='mr-2 text-right text-gray-600'>
</span> </span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Haskell/Code%20Snippets'> <a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Opinions/Editors'>
Code-Snippets Editors
</a> </a>
</div> </div>
</li>
<li>
<div class='flex flex-wrap my-2'> <div class='flex flex-wrap my-2'>
<span class='mr-2 text-right text-gray-600'> <span data-nosnippet class='mr-2 text-right text-gray-600'>
</span> </span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Haskell/FFPiH'> <a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Opinions/Layout'>
Fortgeschrittene funktionale Programmierung in Haskell Keyboard-Layouts
</a>
</div>
<div class='flex flex-wrap my-2'>
<span class='mr-2 text-right text-gray-600'>
</span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Haskell/Lenses'>
Lenses
</a>
</div>
<div class='flex flex-wrap my-2'>
<span class='mr-2 text-right text-gray-600'>
</span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Haskell/Advantages'>
Talks und Posts zu Haskell
</a>
</div>
<div class='flex flex-wrap my-2'>
<span class='mr-2 text-right text-gray-600'>
</span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Haskell/Webapp-Example'>
Webapp-Development in Haskell
</a> </a>
</div> </div>
</li>
</ul>
</div> </div>
</nav><div class='text-gray-400 border-t-2 inline-block pt-0.5'> </nav><div class='text-gray-400 border-t-2 inline-block pt-0.5'>
<p class='mb-3'> <p class='mb-3'>
Note: To override the auto-generated content here, create a file named one of: <span class='font-mono text-sm'>Haskell.md, Haskell.org</span> Note: To override the auto-generated content here, create a file named one of: <span class='font-mono text-sm'>Opinions.md, Opinions.org</span>
</p> </p>
</div> </div>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -822,7 +802,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -854,6 +834,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -0,0 +1,865 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8' />
<meta name='viewport' content='width=device-width, initial-scale=1' />
<title>
Editors Home
</title>
<meta property='og:description' content='Better said: why neovim is currently my favorite editor 😉' />
<meta property='og:site_name' content='Home' />
<meta property='og:image' content />
<meta property='og:type' content='website' />
<meta property='og:title' content='Editors' />
<base href='/' />
<link href='favicon.svg' rel='icon' />
<script>
window.MathJax = {
startup: {
ready: () => {
MathJax.startup.defaultReady();
}
}
};
</script>
<script async id='MathJax-script' src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js'></script>
<!-- mermaid.js --><script src='https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js'></script>
<script>
mermaid.initialize({startOnLoad:false});
mermaid.init(undefined,document.querySelectorAll(".mermaid"));
</script>
<!-- highlight.js -->
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/styles/hybrid.min.css' />
<script src='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js'></script>
<!-- Include languages that Emanote itself uses -->
<script src='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/languages/haskell.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/languages/nix.min.js'></script>
<script>hljs.highlightAll();</script>
<link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<style>
/* Heist error element */
strong.error {
color: lightcoral;
font-size: 90%;
font-family: monospace;
}
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style>
@font-face {
font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap;
}
body {
font-family: 'WorkSans', sans-serif;
font-variation-settings: 'wght' 350;
}
a.mavenLinkBold {
font-variation-settings: 'wght' 400;
}
strong {
font-variation-settings: 'wght' 500;
}
h1,
h2,
h3,
h4,
h5,
h6,
header,
.header-font {
font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
}
</style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote -->
<style>
#stork-search-container {
z-index: 1000;
background-color: rgb(15 23 42/.8);
}
.stork-overflow-hidden-important {
overflow: hidden !important;
}
</style>
<script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'>
window.emanote = {};
window.emanote.stork = {
searchShown: false,
toggleSearch: function () {
document.getElementById('stork-search-container').classList.toggle('hidden');
window.emanote.stork.searchShown = document.body.classList.toggle('stork-overflow-hidden-important');
if (window.emanote.stork.searchShown) {
document.getElementById('stork-search-input').focus();
}
},
clearSearch: function () {
document.getElementById('stork-search-container').classList.add('hidden');
document.body.classList.remove('stork-overflow-hidden-important');
window.emanote.stork.searchShown = false;
},
init: function () {
const indexName = 'emanote-search'; // used to match input[data-stork] attribute value
const baseUrl = document.currentScript.getAttribute('data-emanote-base-url') || '/';
const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') {
window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl);
});
document.addEventListener('keydown', event => {
if (window.emanote.stork.searchShown && event.key === 'Escape') {
window.emanote.stork.clearSearch();
event.preventDefault();
} else if ((event.key == 'k' || event.key == 'K') && (event.ctrlKey || event.metaKey)) {
window.emanote.stork.toggleSearch();
event.preventDefault();
}
});
} else {
// Override existing on Ema's hot-reload
stork.register(indexName, indexUrl, { forceOverwrite: true });
}
}
};
window.emanote.stork.init();
</script>
</head>
<!-- DoNotFormat -->
<!-- DoNotFormat -->
<body class='bg-gray-400 overflow-y-scroll'>
<div class='container mx-auto'>
<nav id='breadcrumbs' class='w-full text-gray-700 md:hidden'>
<div class='flex justify-left'>
<div class='w-full px-2 py-2 bg-gray-50'>
<ul class='flex flex-wrap text-lg'>
<li class='inline-flex items-center'>
<img style='width: 1rem;' src='favicon.svg' />
</li>
<li class='inline-flex items-center'>
<a class='px-1 font-bold' href=''>
Home
</a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
<path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path>
</svg>
</li>
<li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Opinions'>
Opinions
</a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
<path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path>
</svg>
</li>
</ul>
</div>
<button class='inline px-2 py-1 bg-gray-50 outline-none cursor-pointer focus:outline-none' title='Search (Ctrl+K)' type='button' onclick='window.emanote.stork.toggleSearch()'>
<svg xmlns='http://www.w3.org/2000/svg' style='width: 1rem;' class='hover:text-purple-700' f
fill='none' viewBox='0 0 24 24' stroke='currentColor' stroke-width='2'>
<path stroke-linecap='round' stroke-linejoin='round' d='M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z'></path>
</svg>
</button>
<button class='inline px-2 py-1 text-white bg-purple-600 outline-none cursor-pointer focus:outline-none' title='Toggle sidebar' type='button' onclick="toggleHidden('sidebar')">
<svg xmlns='http://www.w3.org/2000/svg' class='w-4' fill='none' viewBox='0 0 24 24' stroke='currentColor'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 6h16M4 12h16M4 18h16'></path>
</svg>
</button>
<script>
function toggleHidden(elemId) {
document.getElementById(elemId).classList.toggle("hidden");
}
</script>
</div>
</nav>
<div id='container' class='flex flex-nowrap flex-col md:flex-row bg-gray-50 md:mt-8 md:shadow-2xl md:mb-8'>
<!-- Sidebar column -->
<nav id='sidebar' class='flex-shrink hidden leading-relaxed md:block md:sticky md:top-0 md:h-full md:w-48 xl:w-64'>
<div class='px-2 py-2 text-gray-800'>
<div id='indexing-links' class='flex flex-row float-right p-2 space-x-2 text-gray-500'>
<a href='-/tags' title='View tags'>
<svg style='width: 1rem;' class='hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z'>
</path>
</svg>
</a>
<a href='-/all' title='Expand full tree'>
<svg style='width: 1rem;' class='hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4'>
</path>
</svg>
</a>
<a title='Search (Ctrl+K)' class='cursor-pointer' onclick='window.emanote.stork.toggleSearch()'>
<svg xmlns='http://www.w3.org/2000/svg' style='width: 1rem;' class='hover:text-purple-700' f
fill='none' viewBox='0 0 24 24' stroke='currentColor' stroke-width='2'>
<path stroke-linecap='round' stroke-linejoin='round' d='M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z'></path>
</svg>
</a>
</div>
<div id='site-logo' class='pl-2'>
<div class='flex items-center my-2 space-x-2 justify-left'>
<a href='' title='Go to Home'>
<!-- The style width attribute here is to prevent huge
icon from displaying at those rare occasions when Tailwind
hasn't kicked in immediately on page load
-->
<img style='width: 1rem;' class='transition transform hover:scale-110 hover:opacity-80' src='favicon.svg' />
</a>
<a class='font-bold truncate' title='Go to Home' href=''>
Home
</a>
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='About' href='About'>
About
</a>
<span class='text-gray-300' title='3 children inside'>
3
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Android' href='Android'>
Android
</a>
<span class='text-gray-300' title='1 children inside'>
1
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Coding' href='Coding'>
Coding
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Logik für Dummies' href='Logik'>
Logik für Dummies
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-700' viewBox='0 0 20 20' fill='currentColor'>
<path fill-rule='evenodd' d='M2 6a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1H8a3 3 0 00-3 3v1.5a1.5 1.5 0 01-3 0V6z' clip-rule='evenodd'></path>
<path d='M6 12a2 2 0 012-2h8a2 2 0 012 2v2a2 2 0 01-2 2H2h2a2 2 0 002-2v-2z'></path>
</svg>
<a class='font-bold hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z'>
</path>
</svg>
<a class='font-bold text-purple-600 hover:underline truncate' title='Editors' href='Opinions/Editors'>
Editors
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Keyboard-Layouts' href='Opinions/Layout'>
Keyboard-Layouts
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Uni' href='Uni'>
Uni
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Unix' href='Unix'>
Unix
</a>
<span class='text-gray-300' title='1 children inside'>
1
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
</nav>
<!-- Main body column -->
<div class='flex-1 w-full overflow-x-auto bg-white'>
<main class='px-4 py-4'>
<!-- DoNotFormat -->
<!-- DoNotFormat -->
<nav id='uptree' class='flipped tree' style='transform-origin: 50%;'>
<ul class='root'>
<li>
<ul>
<li>
<div class='text-gray-900 forest-link'>
<a href='Opinions'>
Opinions
</a>
</div>
<ul>
<li>
<div class='text-gray-900 forest-link'>
<a href=''>
Home
</a>
</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
<h1 class='flex items-end justify-center mb-4 p-3 bg-purple-100 text-5xl font-extrabold text-black rounded'>
<a class='z-40 tracking-tighter '>
Editors
</a>
</h1>
<article class='overflow-auto'>
<!-- What goes in this file will appear on top of note body-->
<p class='mb-3'>
Better said: “why neovim is currently my favorite editor” <span class='emoji' data-emoji='wink' style='font-family: emoji'>😉</span>
</p>
<h2 id='current-config' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Current Config</h2>
<p class='mb-3'>
You can find my current Config along with other things in my <a href='https://gitea.dresselhaus.cloud/Drezil/snippets' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>gitea snippet-git</a>.
</p>
<p class='mb-3'>
<a href='TODO' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkNormal'>Todo</a>: write more awesomesauce <span class='emoji' data-emoji='wink' style='font-family: emoji'>😉</span>
</p>
<!-- div class="flex items-center justify-center mt-2">
<ema:metadata>
<with var="template">
<a class="text-gray-300 hover:text-${theme}-600 text-sm" title="Edit this page on GitHub"
href="${value:editBaseUrl}/${ema:note:source-path}">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" />
</svg>
</a>
</with>
</ema:metadata>
</div -->
</article>
<div class='flex flex-col lg:flex-row lg:space-x-2'>
<div class='flex-1 p-4 mt-8 bg-gray-100 rounded'>
<header class='mb-2 text-xl font-semibold text-gray-500'>Links to this page</header>
<ul class='space-y-1'>
<li>
<a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Opinions/Layout'>
Keyboard-Layouts
</a>
<div class='mb-4 overflow-auto text-sm text-gray-500'>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div><p>Thats why i also prefer <a href='Opinions/Editors' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkNormal'>Neovim</a> as my primary editor - just not having to touch your mouse at any time for anything is such a godsend <span class='emoji' data-emoji='smile' style='font-family: emoji'>😄</span></p></div>
</div>
</div>
</li>
</ul>
</div>
</div>
<section class='flex flex-wrap items-end justify-center my-4 space-x-2 space-y-2 font-mono text-sm'>
</section>
<!-- What goes in this file will at the very end of the main div -->
</main>
</div>
</div>
<footer class='flex items-center justify-center mt-2 mb-8 space-x-4 text-center text-gray-800'>
<div>
<a href='' title='Go to Home page'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-6 h-6 hover:text-purple-700' fill='none' viewBox='0 0 24 24' stroke='currentColor'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6'></path>
</svg>
</a>
</div>
<div>
<a href='-/all' title='View Index'>
<svg class='w-6 h-6 hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4'>
</path>
</svg>
</a>
</div>
<div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a>
</div>
<div>
<a href='-/tags' title='View tags'>
<svg class='w-6 h-6 hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z'>
</path>
</svg>
</a>
</div>
<div>
<a href='-/tasks' title='View tasks'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-6 h-6 hover:text-purple-700' fill='none' viewBox='0 0 24 24' stroke='currentColor'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z'></path>
</svg>
</a>
</div>
</footer>
</div>
<div id='stork-search-container' class='hidden fixed w-screen h-screen inset-0 backdrop-filter backdrop-blur-sm'>
<div class='fixed w-screen h-screen inset-0' onclick='window.emanote.stork.toggleSearch()'></div>
<div class='container mx-auto p-10 mt-10'>
<div class='stork-wrapper-flat container mx-auto'>
<input id='stork-search-input' data-stork='emanote-search' class='stork-input' placeholder='Search (Ctrl+K) ...' />
<div data-stork='emanote-search-output' class='stork-output'></div>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,875 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8' />
<meta name='viewport' content='width=device-width, initial-scale=1' />
<title>
Keyboard-Layouts Home
</title>
<meta property='og:description' content='Since around 2006 i basically write only using the NEO2-Layout. There are many advantages that are not obvious to an onlooker right away.' />
<meta property='og:site_name' content='Home' />
<meta property='og:image' content />
<meta property='og:type' content='website' />
<meta property='og:title' content='Keyboard-Layouts' />
<base href='/' />
<link href='favicon.svg' rel='icon' />
<script>
window.MathJax = {
startup: {
ready: () => {
MathJax.startup.defaultReady();
}
}
};
</script>
<script async id='MathJax-script' src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js'></script>
<!-- mermaid.js --><script src='https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js'></script>
<script>
mermaid.initialize({startOnLoad:false});
mermaid.init(undefined,document.querySelectorAll(".mermaid"));
</script>
<!-- highlight.js -->
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/styles/hybrid.min.css' />
<script src='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js'></script>
<!-- Include languages that Emanote itself uses -->
<script src='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/languages/haskell.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/languages/nix.min.js'></script>
<script>hljs.highlightAll();</script>
<link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<style>
/* Heist error element */
strong.error {
color: lightcoral;
font-size: 90%;
font-family: monospace;
}
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style>
@font-face {
font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap;
}
body {
font-family: 'WorkSans', sans-serif;
font-variation-settings: 'wght' 350;
}
a.mavenLinkBold {
font-variation-settings: 'wght' 400;
}
strong {
font-variation-settings: 'wght' 500;
}
h1,
h2,
h3,
h4,
h5,
h6,
header,
.header-font {
font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
}
</style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote -->
<style>
#stork-search-container {
z-index: 1000;
background-color: rgb(15 23 42/.8);
}
.stork-overflow-hidden-important {
overflow: hidden !important;
}
</style>
<script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'>
window.emanote = {};
window.emanote.stork = {
searchShown: false,
toggleSearch: function () {
document.getElementById('stork-search-container').classList.toggle('hidden');
window.emanote.stork.searchShown = document.body.classList.toggle('stork-overflow-hidden-important');
if (window.emanote.stork.searchShown) {
document.getElementById('stork-search-input').focus();
}
},
clearSearch: function () {
document.getElementById('stork-search-container').classList.add('hidden');
document.body.classList.remove('stork-overflow-hidden-important');
window.emanote.stork.searchShown = false;
},
init: function () {
const indexName = 'emanote-search'; // used to match input[data-stork] attribute value
const baseUrl = document.currentScript.getAttribute('data-emanote-base-url') || '/';
const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') {
window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl);
});
document.addEventListener('keydown', event => {
if (window.emanote.stork.searchShown && event.key === 'Escape') {
window.emanote.stork.clearSearch();
event.preventDefault();
} else if ((event.key == 'k' || event.key == 'K') && (event.ctrlKey || event.metaKey)) {
window.emanote.stork.toggleSearch();
event.preventDefault();
}
});
} else {
// Override existing on Ema's hot-reload
stork.register(indexName, indexUrl, { forceOverwrite: true });
}
}
};
window.emanote.stork.init();
</script>
</head>
<!-- DoNotFormat -->
<!-- DoNotFormat -->
<body class='bg-gray-400 overflow-y-scroll'>
<div class='container mx-auto'>
<nav id='breadcrumbs' class='w-full text-gray-700 md:hidden'>
<div class='flex justify-left'>
<div class='w-full px-2 py-2 bg-gray-50'>
<ul class='flex flex-wrap text-lg'>
<li class='inline-flex items-center'>
<img style='width: 1rem;' src='favicon.svg' />
</li>
<li class='inline-flex items-center'>
<a class='px-1 font-bold' href=''>
Home
</a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
<path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path>
</svg>
</li>
<li class='inline-flex items-center'>
<a class='px-1 font-bold' href='Opinions'>
Opinions
</a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
<path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path>
</svg>
</li>
</ul>
</div>
<button class='inline px-2 py-1 bg-gray-50 outline-none cursor-pointer focus:outline-none' title='Search (Ctrl+K)' type='button' onclick='window.emanote.stork.toggleSearch()'>
<svg xmlns='http://www.w3.org/2000/svg' style='width: 1rem;' class='hover:text-purple-700' f
fill='none' viewBox='0 0 24 24' stroke='currentColor' stroke-width='2'>
<path stroke-linecap='round' stroke-linejoin='round' d='M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z'></path>
</svg>
</button>
<button class='inline px-2 py-1 text-white bg-purple-600 outline-none cursor-pointer focus:outline-none' title='Toggle sidebar' type='button' onclick="toggleHidden('sidebar')">
<svg xmlns='http://www.w3.org/2000/svg' class='w-4' fill='none' viewBox='0 0 24 24' stroke='currentColor'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 6h16M4 12h16M4 18h16'></path>
</svg>
</button>
<script>
function toggleHidden(elemId) {
document.getElementById(elemId).classList.toggle("hidden");
}
</script>
</div>
</nav>
<div id='container' class='flex flex-nowrap flex-col md:flex-row bg-gray-50 md:mt-8 md:shadow-2xl md:mb-8'>
<!-- Sidebar column -->
<nav id='sidebar' class='flex-shrink hidden leading-relaxed md:block md:sticky md:top-0 md:h-full md:w-48 xl:w-64'>
<div class='px-2 py-2 text-gray-800'>
<div id='indexing-links' class='flex flex-row float-right p-2 space-x-2 text-gray-500'>
<a href='-/tags' title='View tags'>
<svg style='width: 1rem;' class='hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z'>
</path>
</svg>
</a>
<a href='-/all' title='Expand full tree'>
<svg style='width: 1rem;' class='hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4'>
</path>
</svg>
</a>
<a title='Search (Ctrl+K)' class='cursor-pointer' onclick='window.emanote.stork.toggleSearch()'>
<svg xmlns='http://www.w3.org/2000/svg' style='width: 1rem;' class='hover:text-purple-700' f
fill='none' viewBox='0 0 24 24' stroke='currentColor' stroke-width='2'>
<path stroke-linecap='round' stroke-linejoin='round' d='M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z'></path>
</svg>
</a>
</div>
<div id='site-logo' class='pl-2'>
<div class='flex items-center my-2 space-x-2 justify-left'>
<a href='' title='Go to Home'>
<!-- The style width attribute here is to prevent huge
icon from displaying at those rare occasions when Tailwind
hasn't kicked in immediately on page load
-->
<img style='width: 1rem;' class='transition transform hover:scale-110 hover:opacity-80' src='favicon.svg' />
</a>
<a class='font-bold truncate' title='Go to Home' href=''>
Home
</a>
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='About' href='About'>
About
</a>
<span class='text-gray-300' title='3 children inside'>
3
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Android' href='Android'>
Android
</a>
<span class='text-gray-300' title='1 children inside'>
1
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Coding' href='Coding'>
Coding
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Logik für Dummies' href='Logik'>
Logik für Dummies
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-700' viewBox='0 0 20 20' fill='currentColor'>
<path fill-rule='evenodd' d='M2 6a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1H8a3 3 0 00-3 3v1.5a1.5 1.5 0 01-3 0V6z' clip-rule='evenodd'></path>
<path d='M6 12a2 2 0 012-2h8a2 2 0 012 2v2a2 2 0 01-2 2H2h2a2 2 0 002-2v-2z'></path>
</svg>
<a class='font-bold hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Editors' href='Opinions/Editors'>
Editors
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z'>
</path>
</svg>
<a class='font-bold text-purple-600 hover:underline truncate' title='Keyboard-Layouts' href='Opinions/Layout'>
Keyboard-Layouts
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Uni' href='Uni'>
Uni
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Unix' href='Unix'>
Unix
</a>
<span class='text-gray-300' title='1 children inside'>
1
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
</nav>
<!-- Main body column -->
<div class='flex-1 w-full overflow-x-auto bg-white'>
<main class='px-4 py-4'>
<!-- DoNotFormat -->
<!-- DoNotFormat -->
<nav id='uptree' class='flipped tree' style='transform-origin: 50%;'>
<ul class='root'>
<li>
<ul>
<li>
<div class='text-gray-900 forest-link'>
<a href='Opinions'>
Opinions
</a>
</div>
<ul>
<li>
<div class='text-gray-900 forest-link'>
<a href=''>
Home
</a>
</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
<h1 class='flex items-end justify-center mb-4 p-3 bg-purple-100 text-5xl font-extrabold text-black rounded'>
<a class='z-40 tracking-tighter '>
Keyboard-Layouts
</a>
</h1>
<article class='overflow-auto'>
<!-- What goes in this file will appear on top of note body-->
<h1 id='my-keyboard-layout' class='pb-2 mb-2 text-5xl font-bold text-center'>My Keyboard-Layout</h1>
<p class='mb-3'>
Since around 2006 i basically write only using the <a href='https://neo-layout.org' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>NEO2</a>-Layout. There are many advantages that are not obvious to an onlooker right away.
</p>
<p class='mb-3'>
Dont get me wrong. I still can type QWERTZ - just because you learn an additional layout does not mean that you forget everything from before.
</p>
<p class='mb-3'>
The secret sauce lies in the deeper layers. Especially layer 3 having all the “hard to reach” things like brackets, braces, etc. right on the home row. And the 4th layer is <em>magic</em> for text-navigation. Left hand has the full navigation, right hand has the complete Numpad - even on laptop-keyboards that are lacking those.
</p>
<p class='mb-3'>
For me as a person having the usual German Keyboard with AltGr this just means:
</p>
<ul class='my-3 ml-6 space-y-1 list-disc'>
<li>
Putting the thumb down on AltGr - it is above there anyway.
</li>
<li>
Use left hand as normal arrow-keys (that work EVERYWHERE because they are just arrow keys)
</li>
<li>
Also use Home/End/PgUp/PgDown/…
</li>
</ul>
<p class='mb-3'>
Before i always had to switch over or hope that a thing had support for vi-style “hjkl”.
</p>
<p class='mb-3'>
Thats why i also prefer <a href='Opinions/Editors' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkNormal'>Neovim</a> as my primary editor - just not having to touch your mouse at any time for anything is such a godsend <span class='emoji' data-emoji='smile' style='font-family: emoji'>😄</span>
</p>
<p class='mb-3'>
Best thing: If you dont want to switch, there is also a “Neo-QWERTZ”-variant .. where you can just try the deeper layers while not leaving your QWERTZ-layout behind. But i have just seen and never tried it. Your experience may be sub-par.
</p>
<!-- div class="flex items-center justify-center mt-2">
<ema:metadata>
<with var="template">
<a class="text-gray-300 hover:text-${theme}-600 text-sm" title="Edit this page on GitHub"
href="${value:editBaseUrl}/${ema:note:source-path}">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" />
</svg>
</a>
</with>
</ema:metadata>
</div -->
</article>
<div class='flex flex-col lg:flex-row lg:space-x-2'>
</div>
<section class='flex flex-wrap items-end justify-center my-4 space-x-2 space-y-2 font-mono text-sm'>
</section>
<!-- What goes in this file will at the very end of the main div -->
</main>
</div>
</div>
<footer class='flex items-center justify-center mt-2 mb-8 space-x-4 text-center text-gray-800'>
<div>
<a href='' title='Go to Home page'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-6 h-6 hover:text-purple-700' fill='none' viewBox='0 0 24 24' stroke='currentColor'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6'></path>
</svg>
</a>
</div>
<div>
<a href='-/all' title='View Index'>
<svg class='w-6 h-6 hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4'>
</path>
</svg>
</a>
</div>
<div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a>
</div>
<div>
<a href='-/tags' title='View tags'>
<svg class='w-6 h-6 hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z'>
</path>
</svg>
</a>
</div>
<div>
<a href='-/tasks' title='View tasks'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-6 h-6 hover:text-purple-700' fill='none' viewBox='0 0 24 24' stroke='currentColor'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z'></path>
</svg>
</a>
</div>
</footer>
</div>
<div id='stork-search-container' class='hidden fixed w-screen h-screen inset-0 backdrop-filter backdrop-blur-sm'>
<div class='fixed w-screen h-screen inset-0' onclick='window.emanote.stork.toggleSearch()'></div>
<div class='container mx-auto p-10 mt-10'>
<div class='stork-wrapper-flat container mx-auto'>
<input id='stork-search-input' data-stork='emanote-search' class='stork-input' placeholder='Search (Ctrl+K) ...' />
<div data-stork='emanote-search-output' class='stork-output'></div>
</div>
</div>
</div>
</body>
</html>

782
static_gen/TODO.html Normal file
View File

@ -0,0 +1,782 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8' />
<meta name='viewport' content='width=device-width, initial-scale=1' />
<title>
Todo Home
</title>
<meta property='og:description' content='Todo List in backlinks below vvv' />
<meta property='og:site_name' content='Home' />
<meta property='og:image' content />
<meta property='og:type' content='website' />
<meta property='og:title' content='Todo' />
<base href='/' />
<link href='favicon.svg' rel='icon' />
<script>
window.MathJax = {
startup: {
ready: () => {
MathJax.startup.defaultReady();
}
}
};
</script>
<script async id='MathJax-script' src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js'></script>
<!-- mermaid.js --><script src='https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js'></script>
<script>
mermaid.initialize({startOnLoad:false});
mermaid.init(undefined,document.querySelectorAll(".mermaid"));
</script>
<!-- highlight.js -->
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/styles/hybrid.min.css' />
<script src='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js'></script>
<!-- Include languages that Emanote itself uses -->
<script src='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/languages/haskell.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/languages/nix.min.js'></script>
<script>hljs.highlightAll();</script>
<link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<style>
/* Heist error element */
strong.error {
color: lightcoral;
font-size: 90%;
font-family: monospace;
}
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style>
@font-face {
font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap;
}
body {
font-family: 'WorkSans', sans-serif;
font-variation-settings: 'wght' 350;
}
a.mavenLinkBold {
font-variation-settings: 'wght' 400;
}
strong {
font-variation-settings: 'wght' 500;
}
h1,
h2,
h3,
h4,
h5,
h6,
header,
.header-font {
font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
}
</style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote -->
<style>
#stork-search-container {
z-index: 1000;
background-color: rgb(15 23 42/.8);
}
.stork-overflow-hidden-important {
overflow: hidden !important;
}
</style>
<script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'>
window.emanote = {};
window.emanote.stork = {
searchShown: false,
toggleSearch: function () {
document.getElementById('stork-search-container').classList.toggle('hidden');
window.emanote.stork.searchShown = document.body.classList.toggle('stork-overflow-hidden-important');
if (window.emanote.stork.searchShown) {
document.getElementById('stork-search-input').focus();
}
},
clearSearch: function () {
document.getElementById('stork-search-container').classList.add('hidden');
document.body.classList.remove('stork-overflow-hidden-important');
window.emanote.stork.searchShown = false;
},
init: function () {
const indexName = 'emanote-search'; // used to match input[data-stork] attribute value
const baseUrl = document.currentScript.getAttribute('data-emanote-base-url') || '/';
const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') {
window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl);
});
document.addEventListener('keydown', event => {
if (window.emanote.stork.searchShown && event.key === 'Escape') {
window.emanote.stork.clearSearch();
event.preventDefault();
} else if ((event.key == 'k' || event.key == 'K') && (event.ctrlKey || event.metaKey)) {
window.emanote.stork.toggleSearch();
event.preventDefault();
}
});
} else {
// Override existing on Ema's hot-reload
stork.register(indexName, indexUrl, { forceOverwrite: true });
}
}
};
window.emanote.stork.init();
</script>
</head>
<!-- DoNotFormat -->
<!-- DoNotFormat -->
<body class='bg-gray-400 overflow-y-scroll'>
<div class='container mx-auto'>
<nav id='breadcrumbs' class='w-full text-gray-700 md:hidden'>
<div class='flex justify-left'>
<div class='w-full px-2 py-2 bg-gray-50'>
<ul class='flex flex-wrap text-lg'>
<li class='inline-flex items-center'>
<img style='width: 1rem;' src='favicon.svg' />
</li>
<li class='inline-flex items-center'>
<a class='px-1 font-bold' href=''>
Home
</a>
<svg fill='currentColor' viewBox='0 0 20 20' class='w-auto h-5 text-gray-400'>
<path fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'></path>
</svg>
</li>
</ul>
</div>
<button class='inline px-2 py-1 bg-gray-50 outline-none cursor-pointer focus:outline-none' title='Search (Ctrl+K)' type='button' onclick='window.emanote.stork.toggleSearch()'>
<svg xmlns='http://www.w3.org/2000/svg' style='width: 1rem;' class='hover:text-purple-700' f
fill='none' viewBox='0 0 24 24' stroke='currentColor' stroke-width='2'>
<path stroke-linecap='round' stroke-linejoin='round' d='M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z'></path>
</svg>
</button>
<button class='inline px-2 py-1 text-white bg-purple-600 outline-none cursor-pointer focus:outline-none' title='Toggle sidebar' type='button' onclick="toggleHidden('sidebar')">
<svg xmlns='http://www.w3.org/2000/svg' class='w-4' fill='none' viewBox='0 0 24 24' stroke='currentColor'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 6h16M4 12h16M4 18h16'></path>
</svg>
</button>
<script>
function toggleHidden(elemId) {
document.getElementById(elemId).classList.toggle("hidden");
}
</script>
</div>
</nav>
<div id='container' class='flex flex-nowrap flex-col md:flex-row bg-gray-50 md:mt-8 md:shadow-2xl md:mb-8'>
<!-- Sidebar column -->
<nav id='sidebar' class='flex-shrink hidden leading-relaxed md:block md:sticky md:top-0 md:h-full md:w-48 xl:w-64'>
<div class='px-2 py-2 text-gray-800'>
<div id='indexing-links' class='flex flex-row float-right p-2 space-x-2 text-gray-500'>
<a href='-/tags' title='View tags'>
<svg style='width: 1rem;' class='hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z'>
</path>
</svg>
</a>
<a href='-/all' title='Expand full tree'>
<svg style='width: 1rem;' class='hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4'>
</path>
</svg>
</a>
<a title='Search (Ctrl+K)' class='cursor-pointer' onclick='window.emanote.stork.toggleSearch()'>
<svg xmlns='http://www.w3.org/2000/svg' style='width: 1rem;' class='hover:text-purple-700' f
fill='none' viewBox='0 0 24 24' stroke='currentColor' stroke-width='2'>
<path stroke-linecap='round' stroke-linejoin='round' d='M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z'></path>
</svg>
</a>
</div>
<div id='site-logo' class='pl-2'>
<div class='flex items-center my-2 space-x-2 justify-left'>
<a href='' title='Go to Home'>
<!-- The style width attribute here is to prevent huge
icon from displaying at those rare occasions when Tailwind
hasn't kicked in immediately on page load
-->
<img style='width: 1rem;' class='transition transform hover:scale-110 hover:opacity-80' src='favicon.svg' />
</a>
<a class='font-bold truncate' title='Go to Home' href=''>
Home
</a>
</div>
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='About' href='About'>
About
</a>
<span class='text-gray-300' title='3 children inside'>
3
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Android' href='Android'>
Android
</a>
<span class='text-gray-300' title='1 children inside'>
1
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Coding' href='Coding'>
Coding
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Logik für Dummies' href='Logik'>
Logik für Dummies
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z'>
</path>
</svg>
<a class='font-bold text-purple-600 hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Uni' href='Uni'>
Uni
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Unix' href='Unix'>
Unix
</a>
<span class='text-gray-300' title='1 children inside'>
1
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
</div>
</nav>
<!-- Main body column -->
<div class='flex-1 w-full overflow-x-auto bg-white'>
<main class='px-4 py-4'>
<!-- DoNotFormat -->
<!-- DoNotFormat -->
<nav id='uptree' class='flipped tree' style='transform-origin: 50%;'>
<ul class='root'>
<li>
<ul>
<li>
<div class='text-gray-900 forest-link'>
<a href=''>
Home
</a>
</div>
</li>
</ul>
</li>
</ul>
</nav>
<h1 class='flex items-end justify-center mb-4 p-3 bg-purple-100 text-5xl font-extrabold text-black rounded'>
<a class='z-40 tracking-tighter '>
Todo
</a>
</h1>
<article class='overflow-auto'>
<!-- What goes in this file will appear on top of note body-->
<p class='mb-3'>
Todo List in backlinks below vvv
</p>
<!-- div class="flex items-center justify-center mt-2">
<ema:metadata>
<with var="template">
<a class="text-gray-300 hover:text-${theme}-600 text-sm" title="Edit this page on GitHub"
href="${value:editBaseUrl}/${ema:note:source-path}">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" />
</svg>
</a>
</with>
</ema:metadata>
</div -->
</article>
<div class='flex flex-col lg:flex-row lg:space-x-2'>
<div class='flex-1 p-4 mt-8 bg-gray-100 rounded'>
<header class='mb-2 text-xl font-semibold text-gray-500'>Links to this page</header>
<ul class='space-y-1'>
<li>
<a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Coding/OpenAPI'>
Openapi-generator
</a>
<div class='mb-4 overflow-auto text-sm text-gray-500'>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div><p><a href='TODO' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkNormal'>Todo</a> Idee hinter einem API-Generator</p></div>
</div>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div><p><a href='TODO' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkNormal'>Todo</a> Theorie und Praxis</p></div>
</div>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div><p><a href='TODO' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkNormal'>Todo</a> Veraltet</p></div>
</div>
</div>
</li>
<li>
<a class='text-purple-600 mavenLinkBold hover:bg-purple-50' href='Opinions/Editors'>
Editors
</a>
<div class='mb-4 overflow-auto text-sm text-gray-500'>
<div class='pl-2 mt-2 border-l-2 border-purple-200 hover:border-purple-500'>
<div><p><a href='TODO' class='text-gray-600 font-bold hover:bg-gray-50' data-wikilink-type='WikiLinkNormal'>Todo</a>: write more awesomesauce <span class='emoji' data-emoji='wink' style='font-family: emoji'>😉</span></p></div>
</div>
</div>
</li>
</ul>
</div>
</div>
<section class='flex flex-wrap items-end justify-center my-4 space-x-2 space-y-2 font-mono text-sm'>
</section>
<!-- What goes in this file will at the very end of the main div -->
</main>
</div>
</div>
<footer class='flex items-center justify-center mt-2 mb-8 space-x-4 text-center text-gray-800'>
<div>
<a href='' title='Go to Home page'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-6 h-6 hover:text-purple-700' fill='none' viewBox='0 0 24 24' stroke='currentColor'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6'></path>
</svg>
</a>
</div>
<div>
<a href='-/all' title='View Index'>
<svg class='w-6 h-6 hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4'>
</path>
</svg>
</a>
</div>
<div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a>
</div>
<div>
<a href='-/tags' title='View tags'>
<svg class='w-6 h-6 hover:text-purple-700' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z'>
</path>
</svg>
</a>
</div>
<div>
<a href='-/tasks' title='View tasks'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-6 h-6 hover:text-purple-700' fill='none' viewBox='0 0 24 24' stroke='currentColor'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z'></path>
</svg>
</a>
</div>
</footer>
</div>
<div id='stork-search-container' class='hidden fixed w-screen h-screen inset-0 backdrop-filter backdrop-blur-sm'>
<div class='fixed w-screen h-screen inset-0' onclick='window.emanote.stork.toggleSearch()'></div>
<div class='container mx-auto p-10 mt-10'>
<div class='stork-wrapper-flat container mx-auto'>
<input id='stork-search-input' data-stork='emanote-search' class='stork-input' placeholder='Search (Ctrl+K) ...' />
<div data-stork='emanote-search-output' class='stork-output'></div>
</div>
</div>
</div>
</body>
</html>

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -358,13 +400,13 @@
</svg> </svg>
<a class='hover:underline truncate' title='Haskell' href='Haskell'> <a class='hover:underline truncate' title='Coding' href='Coding'>
Haskell Coding
</a> </a>
<span class='text-gray-300' title='5 children inside'> <span class='text-gray-300' title='2 children inside'>
5 2
</span> </span>
@ -421,6 +463,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -602,36 +720,43 @@
<!-- What goes in this file will appear on top of note body--> <!-- What goes in this file will appear on top of note body-->
<nav> <nav>
<div class='mb-8'> <div class='mb-8'>
<header class='pb-2 mb-2 font-semibold text-gray-600'> <header data-nosnippet class='pb-2 mb-2 font-semibold text-gray-600'>
Pages matching path './*' Pages matching path './*'
</header> </header>
<ul>
<li>
<div class='flex flex-wrap my-2'> <div class='flex flex-wrap my-2'>
<span class='mr-2 text-right text-gray-600'> <span data-nosnippet class='mr-2 text-right text-gray-600'>
</span> </span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Uni/Extracurricular'> <a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Uni/Extracurricular'>
Studium generale / University-Life Studium generale / University-Life
</a> </a>
</div> </div>
</li>
<li>
<div class='flex flex-wrap my-2'> <div class='flex flex-wrap my-2'>
<span class='mr-2 text-right text-gray-600'> <span data-nosnippet class='mr-2 text-right text-gray-600'>
</span> </span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Uni/Lernerfolg_an_der_Uni'> <a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Uni/Lernerfolg_an_der_Uni'>
Wie lerne ich richtig an der Uni? Wie lerne ich richtig an der Uni?
</a> </a>
</div> </div>
</li>
</ul>
</div> </div>
</nav><div class='text-gray-400 border-t-2 inline-block pt-0.5'> </nav><div class='text-gray-400 border-t-2 inline-block pt-0.5'>
<p class='mb-3'> <p class='mb-3'>
Note: To override the auto-generated content here, create a file named one of: <span class='font-mono text-sm'>Uni.md, Uni.org</span> Note: To override the auto-generated content here, create a file named one of: <span class='font-mono text-sm'>Uni.md, Uni.org</span>
</p> </p>
</div> </div>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -677,7 +802,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -709,6 +834,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -367,13 +409,13 @@
</svg> </svg>
<a class='hover:underline truncate' title='Haskell' href='Haskell'> <a class='hover:underline truncate' title='Coding' href='Coding'>
Haskell Coding
</a> </a>
<span class='text-gray-300' title='5 children inside'> <span class='text-gray-300' title='2 children inside'>
5 2
</span> </span>
@ -432,6 +474,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
@ -692,15 +810,15 @@
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
<a href='https://ekvv.uni-bielefeld.de/kvv_publ/publ/vd?id=54004629' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Fortgeschrittene funktionale Programmierung in Haskell</a> (Haskell-Lecture) <a href='https://ekvv.uni-bielefeld.de/kvv_publ/publ/vd?id=54004629' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Fortgeschrittene funktionale Programmierung in Haskell</a> (Haskell-Lecture)
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
<a href='https://www.youtube.com/playlist?list=PLMqFm6rr-xOWhXGroUXzWx00FeaBNfbsa' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Lecture on YouTube</a> <a href='https://www.youtube.com/playlist?list=PLMqFm6rr-xOWhXGroUXzWx00FeaBNfbsa' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Lecture on YouTube</a>
</li> </li>
<li> <li>
<a href='Haskell/FFPiH' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkBranch'>more details on the lecture</a> <a href='Coding/Haskell/FFPiH' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkBranch'>more details on the lecture</a>
</li> </li>
</ul> </ul>
@ -712,11 +830,11 @@
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
<a href='https://ekvv.uni-bielefeld.de/kvv_publ/publ/vd?id=71172682' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Fortgeschrittene funktionale Programmierung in Haskell</a> (Haskell-Lecture) <a href='https://ekvv.uni-bielefeld.de/kvv_publ/publ/vd?id=71172682' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Fortgeschrittene funktionale Programmierung in Haskell</a> (Haskell-Lecture)
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
<a href='https://www.youtube.com/playlist?list=PLMqFm6rr-xOUEf2YjSxRn8BIhrdRIhZw6' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Lecture on YouTube</a> (differs from link above) <a href='https://www.youtube.com/playlist?list=PLMqFm6rr-xOUEf2YjSxRn8BIhrdRIhZw6' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Lecture on YouTube</a> (differs from link above)
</li> </li>
<li> <li>
@ -724,7 +842,7 @@
</li> </li>
<li> <li>
<a href='Haskell/FFPiH' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkBranch'>more details on the lecture</a> <a href='Coding/Haskell/FFPiH' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkBranch'>more details on the lecture</a>
</li> </li>
</ul> </ul>
@ -736,11 +854,11 @@
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
<a href='https://ekvv.uni-bielefeld.de/kvv_publ/publ/vd?id=84763664' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Richtig Starten</a> (Start Right!) <a href='https://ekvv.uni-bielefeld.de/kvv_publ/publ/vd?id=84763664' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Richtig Starten</a> (Start Right!)
</li> </li>
<li> <li>
<a href='https://ekvv.uni-bielefeld.de/kvv_publ/publ/vd?id=79599350' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Tutor Introduction to Machine Learning</a> (Tutor in this Lecture) <a href='https://ekvv.uni-bielefeld.de/kvv_publ/publ/vd?id=79599350' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Tutor Introduction to Machine Learning</a> (Tutor in this Lecture)
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
@ -752,7 +870,7 @@
</li> </li>
<li> <li>
Remade and updated slides for <a href='https://ekvv.uni-bielefeld.de/kvv_publ/publ/vd?id=79016005' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Computergraphics-Lecture</a> Remade and updated slides for <a href='https://ekvv.uni-bielefeld.de/kvv_publ/publ/vd?id=79016005' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Computergraphics-Lecture</a>
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
@ -768,7 +886,7 @@
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
<a href='https://ekvv.uni-bielefeld.de/kvv_publ/publ/vd?id=94694136' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Fortgeschrittene funktionale Programmierung in Haskell</a> (Haskell-Lecture) <a href='https://ekvv.uni-bielefeld.de/kvv_publ/publ/vd?id=94694136' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Fortgeschrittene funktionale Programmierung in Haskell</a> (Haskell-Lecture)
<ul class='my-3 ml-6 space-y-1 list-disc'> <ul class='my-3 ml-6 space-y-1 list-disc'>
<li> <li>
@ -780,7 +898,7 @@
</li> </li>
<li> <li>
<a href='Haskell/FFPiH' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkBranch'>more details on the lecture</a> <a href='Coding/Haskell/FFPiH' class='text-purple-600 mavenLinkBold hover:underline' data-wikilink-type='WikiLinkBranch'>more details on the lecture</a>
</li> </li>
</ul> </ul>
@ -789,6 +907,7 @@
</ul> </ul>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -856,7 +975,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -888,6 +1007,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -367,13 +409,13 @@
</svg> </svg>
<a class='hover:underline truncate' title='Haskell' href='Haskell'> <a class='hover:underline truncate' title='Coding' href='Coding'>
Haskell Coding
</a> </a>
<span class='text-gray-300' title='5 children inside'> <span class='text-gray-300' title='2 children inside'>
5 2
</span> </span>
@ -432,6 +474,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
@ -636,11 +754,11 @@
</p> </p>
<h2 id='etwas-lerntheorie' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Etwas Lerntheorie</h2> <h2 id='etwas-lerntheorie' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Etwas Lerntheorie</h2>
<p class='mb-3'> <p class='mb-3'>
Es gibt einen sehr schönen <a href='https://yow.eventer.com/yow-2014-1222/stop-treading-water-learning-to-learn-by-edward-kmett-1750' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Talk</a> von Edwand Kmett in dem er über seine Erfahrungen berichtet. Kurzum: Man lernt durch stete Wiederholung. Und der beste Moment etwas zu wiederholen ist, kurz bevor man es vergisst. Das stimmt ziemlich genau mit meiner Erfahrung überein. Es gibt einen sehr schönen <a href='https://yow.eventer.com/yow-2014-1222/stop-treading-water-learning-to-learn-by-edward-kmett-1750' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Talk</a> von Edwand Kmett in dem er über seine Erfahrungen berichtet. Kurzum: Man lernt durch stete Wiederholung. Und der beste Moment etwas zu wiederholen ist, kurz bevor man es vergisst. Das stimmt ziemlich genau mit meiner Erfahrung überein.
</p> </p>
<h3 id='auswendig-lernen' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Auswendig lernen</h3> <h3 id='auswendig-lernen' class='mt-6 mb-2 text-3xl font-bold text-gray-700'>Auswendig lernen</h3>
<p class='mb-3'> <p class='mb-3'>
Grade die oben genannte Theorie steht beim Auswendiglernen im Vordergrund. Wenn man etwas langfristig auswendig lernen will (Fremdsprachen, etc.), dann gibt es hierzu Software, die herausfindet, wann es der beste Zeitpunkt ist, dich wieder abzufragen: <a href='http://ankisrs.net/' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Anki</a> gibt es für jede Platform kostenlos (außer iPhone - hier 25$, weil Apple so viel Geld für das einstellen im AppStore haben will). Anki ist dazu gedacht, dass man zu jedem Thema einen Stapel hat (z.b. Klausurfragen, Sprachen, …) und jeden Tag lernt. Nach einiger Zeit wird die vorhersage der Lernzeit ziemlich genau. Anfangs beantwortet man noch viele Fragen täglich, aber je häufiger man die Antworten kennt, desto weiter hinten landen sie im Stapel. Schlussendlich kommt dieselbe Frage dann nur noch 1x/Monat oder noch seltener. Grade die oben genannte Theorie steht beim Auswendiglernen im Vordergrund. Wenn man etwas langfristig auswendig lernen will (Fremdsprachen, etc.), dann gibt es hierzu Software, die herausfindet, wann es der beste Zeitpunkt ist, dich wieder abzufragen: <a href='http://ankisrs.net/' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Anki</a> gibt es für jede Platform kostenlos (außer iPhone - hier 25$, weil Apple so viel Geld für das einstellen im AppStore haben will). Anki ist dazu gedacht, dass man zu jedem Thema einen Stapel hat (z.b. Klausurfragen, Sprachen, …) und jeden Tag lernt. Nach einiger Zeit wird die vorhersage der Lernzeit ziemlich genau. Anfangs beantwortet man noch viele Fragen täglich, aber je häufiger man die Antworten kennt, desto weiter hinten landen sie im Stapel. Schlussendlich kommt dieselbe Frage dann nur noch 1x/Monat oder noch seltener.
</p> </p>
<p class='mb-3'> <p class='mb-3'>
@ -774,13 +892,14 @@
</p> </p>
<p class='mb-3'> <p class='mb-3'>
Ein kleiner Hinweis hier noch auf das <a href='http://www.eurocentres.com/de/pr%C3%BCfungsangst-stipendium' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>Prüfungsangst-Stipendium</a>, dass einem eine Belohnung gibt, wenn man sich seinen Ängsten stellt und sie überwindet. :) Ein kleiner Hinweis hier noch auf das <a href='http://www.eurocentres.com/de/pr%C3%BCfungsangst-stipendium' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>Prüfungsangst-Stipendium</a>, dass einem eine Belohnung gibt, wenn man sich seinen Ängsten stellt und sie überwindet. :)
</p> </p>
<h2 id='schlusswort' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Schlusswort</h2> <h2 id='schlusswort' class='inline-block mt-6 mb-4 text-4xl font-bold text-gray-700 border-b-2'>Schlusswort</h2>
<p class='mb-3'> <p class='mb-3'>
Viel Erfolg bei euren Prüfungen. Falls euch dieser Artikel geholfen hat oder ihr noch Anregungen/Verbessenguswünsche habt, schreibt mir einfach unter <code class='py-0.5 px-0.5 bg-gray-100'>sdressel@techfak.uni-bi...</code>, ich werde die dann einbauen. Viel Erfolg bei euren Prüfungen. Falls euch dieser Artikel geholfen hat oder ihr noch Anregungen/Verbessenguswünsche habt, schreibt mir einfach unter <code class='py-0.5 px-0.5 bg-gray-100'>sdressel@techfak.uni-bi...</code>, ich werde die dann einbauen.
</p> </p>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -826,7 +945,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -858,6 +977,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -358,13 +400,13 @@
</svg> </svg>
<a class='hover:underline truncate' title='Haskell' href='Haskell'> <a class='hover:underline truncate' title='Coding' href='Coding'>
Haskell Coding
</a> </a>
<span class='text-gray-300' title='5 children inside'> <span class='text-gray-300' title='2 children inside'>
5 2
</span> </span>
@ -423,6 +465,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -565,26 +683,31 @@
<!-- What goes in this file will appear on top of note body--> <!-- What goes in this file will appear on top of note body-->
<nav> <nav>
<div class='mb-8'> <div class='mb-8'>
<header class='pb-2 mb-2 font-semibold text-gray-600'> <header data-nosnippet class='pb-2 mb-2 font-semibold text-gray-600'>
Pages matching path './*' Pages matching path './*'
</header> </header>
<ul>
<li>
<div class='flex flex-wrap my-2'> <div class='flex flex-wrap my-2'>
<span class='mr-2 text-right text-gray-600'> <span data-nosnippet class='mr-2 text-right text-gray-600'>
</span> </span>
<a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Unix/SSH-Filter'> <a class='flex-1 text-purple-600 mavenLinkBold border-l-2 pl-2 hover:underline' href='Unix/SSH-Filter'>
SSH-Filter SSH-Filter
</a> </a>
</div> </div>
</li>
</ul>
</div> </div>
</nav><div class='text-gray-400 border-t-2 inline-block pt-0.5'> </nav><div class='text-gray-400 border-t-2 inline-block pt-0.5'>
<p class='mb-3'> <p class='mb-3'>
Note: To override the auto-generated content here, create a file named one of: <span class='font-mono text-sm'>Unix.md, Unix.org</span> Note: To override the auto-generated content here, create a file named one of: <span class='font-mono text-sm'>Unix.md, Unix.org</span>
</p> </p>
</div> </div>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -630,7 +753,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -662,6 +785,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -367,13 +409,13 @@
</svg> </svg>
<a class='hover:underline truncate' title='Haskell' href='Haskell'> <a class='hover:underline truncate' title='Coding' href='Coding'>
Haskell Coding
</a> </a>
<span class='text-gray-300' title='5 children inside'> <span class='text-gray-300' title='2 children inside'>
5 2
</span> </span>
@ -432,6 +474,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -633,9 +751,10 @@ else
exit 1 exit 1
fi</code></pre></div> fi</code></pre></div>
<p class='mb-3'> <p class='mb-3'>
Installation of geoiplookup from <a href='https://wiki.ubuntuusers.de/geoiplookup/' class='text-purple-600 hover:underline' target='_blank' rel='noopener'>ubuntuwiki</a> Installation of geoiplookup from <a href='https://wiki.ubuntuusers.de/geoiplookup/' class='text-purple-600 hover:underline' data-linkicon='external' target='_blank' rel='noopener'>ubuntuwiki</a>
</p> </p>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -681,7 +800,7 @@ fi</code></pre></div>
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -713,6 +832,9 @@ fi</code></pre></div>
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -12,7 +12,7 @@ body .tree.flipped {
body .tree { body .tree {
overflow: auto; overflow: auto;
/* See more-head.tpl */ /* See more-head.tpl */
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
font-variation-settings: 'wght' 475; font-variation-settings: 'wght' 475;
font-size: 0.8em; font-size: 0.8em;

View File

@ -0,0 +1,191 @@
.stork-wrapper-flat {
position: relative;
font-family: inherit;
box-sizing: border-box;
font-size: 1em;
--stork-blue-2: #a5d8ff;
--stork-blue-3: #74c0fc;
--stork-blue-4: #4dabf7;
--stork-blue-5: #339af0;
--stork-blue-7: #1c7ed6;
--stork-gray-8: #343a40;
--stork-gray-9: #212529;
--stork-yellow-2: #ffec99;
--stork-border-color: hsl(0, 0%, 80%);
--stork-background-color: hsla(0, 0%, 97%);
--stork-text-color: var(--stork-gray-9);
--stork-input-height: 2.4em;
}
.stork-wrapper-flat *,
.stork-wrapper-flat *:before,
.stork-wrapper-flat *:after {
box-sizing: border-box;
}
.stork-wrapper-flat .stork-input {
width: 100%;
height: var(--stork-input-height);
font-size: 1em;
padding: 0.4em 0.8em;
position: relative;
border: 2px solid var(--stork-border-color);
border-radius: calc(var(--stork-input-height) / 2);
background-color: var(--stork-background-color);
color: var(--stork-text-color);
font-family: inherit;
}
.stork-wrapper-flat .stork-input:focus {
outline: none;
}
.stork-wrapper-flat .stork-progress {
position: absolute;
display: block;
content: "";
bottom: 1px;
background-color: var(--stork-blue-5);
box-shadow: 0 0 8px var(--stork-blue-4);
height: 1px;
transition: width 0.25s ease, opacity 0.4s ease 0.4s;
margin-left: calc(var(--stork-input-height) / 2);
max-width: calc(100% - var(--stork-input-height));
}
.stork-wrapper-flat .stork-output {
position: absolute;
width: 100%;
margin-top: 0.5em;
border-radius: 6px;
display: flex;
flex-direction: column;
z-index: 100;
color: var(--stork-text-color);
font-weight: 400;
font-family: inherit;
}
.stork-wrapper-flat .stork-attribution a:link,
.stork-wrapper-flat .stork-attribution a:visited {
color: var(--stork-blue-7);
}
.stork-wrapper-flat .stork-output-visible {
border: 2px solid var(--stork-border-color);
background: var(--stork-background-color);
}
.stork-wrapper-flat .stork-message {
width: 100%;
padding: 0.5em 1em;
color: var(--stork-text-color);
}
.stork-wrapper-flat .stork-attribution {
width: 100%;
padding: 0.5em 1em;
font-size: 0.8em;
color: var(--stork-text-color);
}
.stork-wrapper-flat .stork-results {
margin: 0;
padding: 0;
width: 100%;
list-style-type: none;
max-height: 25em;
overflow-y: scroll;
border-top: 1px solid var(--stork-border-color);
border-bottom: 1px solid var(--stork-border-color);
}
.stork-wrapper-flat .stork-result:not(:last-child) {
border-bottom: 1px solid var(--stork-border-color);
}
.stork-wrapper-flat .stork-result.selected {
background: var(--stork-blue-2);
}
.stork-wrapper-flat .stork-result a:link {
padding: 1em;
display: block;
color: currentcolor;
text-decoration: none;
}
.stork-wrapper-flat .stork-result p {
margin: 0;
}
.stork-wrapper-flat .stork-title {
font-weight: bold;
font-size: 0.95em;
margin: 0;
color: var(--stork-text-color);
/* Flexbox container for the title and the score, when debugging */
display: flex;
justify-content: space-between;
}
.stork-wrapper-flat .stork-excerpt-container {
margin-top: 0.75em;
}
.stork-wrapper-flat .stork-excerpt {
font-size: 0.8em;
line-height: 1;
margin: 0;
color: var(--stork-gray-8);
/* Flexbox container for the title and the score, when debugging */
display: flex;
justify-content: space-between;
}
.stork-wrapper-flat .stork-excerpt:not(:last-of-type) {
margin-bottom: 0.6em;
}
.stork-wrapper-flat .stork-highlight {
background-color: var(--stork-yellow-2);
padding: 0 0.1em;
}
.stork-wrapper-flat .stork-error {
outline: 2px solid #c92a2a;
}
.stork-wrapper-flat .stork-close-button {
position: absolute;
right: 0;
margin: 0.5em 0.5em;
height: 1.4em;
width: 1.4em;
padding: 0px;
background: hsl(0, 0%, 85%);
border: 1px solid hsla(0, 0%, 70%);
font-size: 1em;
color: hsl(0, 0%, 50%);
border-radius: 50%;
line-height: 1;
}
.stork-wrapper-flat .stork-close-button svg {
width: 11px;
height: 11px;
}
.stork-wrapper-flat .stork-close-button:hover {
background: hsla(0, 0%, 78%);
cursor: pointer;
}
.stork-wrapper-flat .stork-close-button:active {
background: hsla(0, 0%, 65%);
}

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -47,37 +47,65 @@
<link href='tailwind.css?instanceId=ecadcd50-ecaf-4d6e-98ea-7932c3b3d351' rel='stylesheet' type='text/css' /> <link href='tailwind.css?instanceId=1ec53b8c-7991-423c-8b17-b92e36792648' rel='stylesheet' type='text/css' />
<!-- Heist error element -->
<style> <style>
/* Heist error element */
strong.error { strong.error {
color: lightcoral; color: lightcoral;
font-size: 90%; font-size: 90%;
font-family: monospace; font-family: monospace;
} }
/* External link icon */
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"])::after {
/* filter converts black to rgb(156,163,175) */
filter: invert(71%) sepia(3%) saturate(904%) hue-rotate(179deg) brightness(92%) contrast(87%);
margin-left: 1px;
}
a[data-linkicon]:not([data-linkicon=""]):not([data-linkicon="none"]):hover::after {
/* filter converts black to rgb(175,85,99) */
filter: invert(32%) sepia(10%) saturate(834%) hue-rotate(176deg) brightness(92%) contrast(88%);
}
a[data-linkicon=""]::after {
content: ""
}
a[data-linkicon=none]::after {
content: ""
}
a[data-linkicon="external"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14' /%3E%3C/svg%3E");
}
a[data-linkicon="external"][href^="mailto:"]::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='1em' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
}
</style> </style>
<!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin /> <!-- What goes in this file will appear on near the end of <head>--><link rel='preload' href='_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf' as='font' type='font/ttf' crossorigin />
<style> <style>
@font-face { @font-face {
font-family: 'MavenPro'; font-family: 'WorkSans';
/* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf */ /* FIXME: This ought to be: ${ema:emanoteStaticLayerUrl}/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf */
src: url(_emanote-static/fonts/Maven_Pro/MavenPro-VariableFont_wght.ttf) format("truetype"); src: url(_emanote-static/fonts/Work_Sans/WorkSans-VariableFont_wght.ttf) format("truetype");
font-display: swap; font-display: swap;
} }
body { body {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
/* font-variation-settings: 'wght'300; */ font-variation-settings: 'wght' 350;
} }
a.mavenLinkBold { a.mavenLinkBold {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 400;
} }
strong { strong {
font-variation-settings: 'wght'500; font-variation-settings: 'wght' 500;
} }
h1, h1,
@ -88,14 +116,27 @@
h6, h6,
header, header,
.header-font { .header-font {
font-family: 'MavenPro', sans-serif; font-family: 'WorkSans', sans-serif;
}
h1 {
font-variation-settings: 'wght' 500;
}
h2 {
font-variation-settings: 'wght' 400;
}
h3 {
font-variation-settings: 'wght' 300;
} }
</style> </style>
<link rel='stylesheet' href='_emanote-static/inverted-tree.css' /> <link rel='stylesheet' href='_emanote-static/inverted-tree.css' />
<link rel='stylesheet' href='https://files.stork-search.net/releases/v1.5.0/flat.css' /> <link rel='stylesheet' href='_emanote-static/stork/flat.css' />
<!-- Custom Stork-search styling for Emanote --> <!-- Custom Stork-search styling for Emanote -->
<style> <style>
#stork-search-container { #stork-search-container {
@ -109,7 +150,7 @@
</style> </style>
<script src='https://files.stork-search.net/releases/v1.5.0/stork.js'></script> <script src='_emanote-static/stork/stork.js'></script>
<script data-emanote-base-url='/'> <script data-emanote-base-url='/'>
@ -135,6 +176,7 @@
const indexUrl = baseUrl + '-/stork.st'; const indexUrl = baseUrl + '-/stork.st';
if (document.readyState !== 'complete') { if (document.readyState !== 'complete') {
window.addEventListener('load', function () { window.addEventListener('load', function () {
stork.initialize(baseUrl + '_emanote-static/stork/stork.wasm');
stork.register(indexName, indexUrl); stork.register(indexName, indexUrl);
}); });
@ -347,13 +389,13 @@
</svg> </svg>
<a class='hover:underline truncate' title='Haskell' href='Haskell'> <a class='hover:underline truncate' title='Coding' href='Coding'>
Haskell Coding
</a> </a>
<span class='text-gray-300' title='5 children inside'> <span class='text-gray-300' title='2 children inside'>
5 2
</span> </span>
@ -412,6 +454,82 @@
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg xmlns='http://www.w3.org/2000/svg' class='w-4 h-4 flex-shrink-0 inline text-gray-500' viewBox='0 0 20 20' fill='currentColor'>
<path d='M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z'></path>
</svg>
<a class='hover:underline truncate' title='Opinions' href='Opinions'>
Opinions
</a>
<span class='text-gray-300' title='2 children inside'>
2
</span>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree -->
<div class='pl-2'>
<!-- Node's rootLabel-->
<div class='flex items-center my-2 space-x-2 justify-left'>
<svg class='w-4 h-4 flex-shrink-0 inline' fill='none' stroke='currentColor' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
<path stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z'>
</path>
</svg>
<a class='hover:underline truncate' title='Todo' href='TODO'>
Todo
</a>
</div>
<!-- Node's children forest, displayed only on active trees
TODO: Use <details> to toggle visibility?
-->
</div>
<!-- Variable bindings for this tree-->
<!-- Rendering of this tree --> <!-- Rendering of this tree -->
<div class='pl-2'> <div class='pl-2'>
<!-- Node's rootLabel--> <!-- Node's rootLabel-->
@ -513,6 +631,7 @@
Keine Garantie auf Richtigkeit oder Trollfreiheit <span class='emoji' data-emoji='grin' style='font-family: emoji'>😁</span> Keine Garantie auf Richtigkeit oder Trollfreiheit <span class='emoji' data-emoji='grin' style='font-family: emoji'>😁</span>
</p> </p>
<!-- div class="flex items-center justify-center mt-2"> <!-- div class="flex items-center justify-center mt-2">
<ema:metadata> <ema:metadata>
<with var="template"> <with var="template">
@ -558,7 +677,7 @@
</a> </a>
</div> </div>
<div> <div>
<a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.7.3.0'> <a href='https://emanote.srid.ca' target='_blank' title='Generated by Emanote 0.8.1.10'>
<img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' /> <img class='w-6 h-6 hover:text-purple-700' src='_emanote-static/emanote-logo.svg' />
</a> </a>
</div> </div>
@ -590,6 +709,9 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

File diff suppressed because one or more lines are too long