Compare commits
No commits in common. "master" and "about-page" have entirely different histories.
master
...
about-page
21 changed files with 310 additions and 9584 deletions
|
@ -6,7 +6,7 @@ pages:
|
|||
interruptible: true
|
||||
timeout: 5m
|
||||
rules:
|
||||
- if: "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH"
|
||||
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH'
|
||||
when: always
|
||||
before_script:
|
||||
- pacman --needed --noconfirm --sync --refresh --sysupgrade zola
|
||||
|
|
10
config.toml
10
config.toml
|
@ -1,14 +1,12 @@
|
|||
base_url = "https://www.jotoho.de/"
|
||||
default_language = "en"
|
||||
minify_html = true
|
||||
generate_feeds = true
|
||||
feed_filenames = ["atom.xml", "rss.xml"]
|
||||
author = "Jonas Tobias Hopusch"
|
||||
generate_feed = true
|
||||
|
||||
[markdown]
|
||||
highlight_code = true
|
||||
render_emoji = true
|
||||
external_links_no_referrer = true
|
||||
smart_punctuation = true
|
||||
lazy_async_image = true
|
||||
bottom_footnotes = true
|
||||
|
||||
[extra]
|
||||
# Put all your custom variables here
|
||||
|
|
|
@ -1,44 +1,19 @@
|
|||
+++
|
||||
title = "About me"
|
||||
description = "Here's where I introduce myself."
|
||||
title = "About me / Über mich"
|
||||
description = "Here's where I introduce myself. Hier stelle ich mich selbst vor."
|
||||
date = "2022-02-06 00:00:00+01:00"
|
||||
updated = "2023-03-01T23:10:47+01:00"
|
||||
draft = true
|
||||
+++
|
||||
|
||||
Hello visitor,
|
||||
### Über mich
|
||||
|
||||
I am Jonas (Tobias) Hopusch, usually known online as by my username "jotoho".
|
||||
Hallo,
|
||||
|
||||
I am male, German, currently <span id="age-display">_javascript failed_</span> years old
|
||||
and a student of computer science at the [South Westphalia University of Applied
|
||||
Sciences](https://fh-swf.de) working towards earning a Bachelor degree.
|
||||
mein Name ist Jonas Hopusch, im Internet normalerweise bekannt als "jotoho".
|
||||
Ich bin <span class="age-display">x</span> Jahre alt.
|
||||
|
||||
### Why I chose to work with computers
|
||||
-----
|
||||
|
||||
### My Hobbies
|
||||
### About me
|
||||
|
||||
In my free time I usually watch videos on the Internet,
|
||||
read fiction stories online or on my eReader,
|
||||
play some videogames or
|
||||
learn about topics that interest me.
|
||||
|
||||
When I don't need my ears for something else, I usually
|
||||
have music playing or listen to something else.
|
||||
|
||||
I like to listen to multiple kinds of music
|
||||
that are very different to each other, so I have
|
||||
trouble concretely defining the genres I listen to.
|
||||
|
||||
### My Desktop-PC
|
||||
|
||||
| PC Part | Installed Component |
|
||||
| :------------ | :--------------------------------------------------------------------------------------------------------------------------------: |
|
||||
| CPU | [AMD Ryzen 7 5800X (8 cores, 16 threads)](https://www.amd.com/en/products/cpu/amd-ryzen-7-5800x) |
|
||||
| Motherboard | [ASRock X570M Pro4](https://www.asrock.com/MB/AMD/X570M%20Pro4/) |
|
||||
| Graphics Card | [ASUS Dual Radeon RX 6750XT 12GB OC Edition](https://www.asus.com/motherboards-components/graphics-cards/dual/dual-rx6750xt-o12g/) |
|
||||
| Memory | 20GiB (2\*8G+4G) DDR4 2133MHz |
|
||||
| Monitors | 2 1920x1080 32" 60Hz screens |
|
||||
| Storage | 1TB SATA-SSD + 1TB SATA-HDD |
|
||||
|
||||
<script style="display: none;" src="/scripts/calcage.js" defer></script>
|
||||
<script style="display: none;" src="/scripts/calcage.js" async></script>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
title = "My online profiles and different communication channels"
|
||||
description = "On this page I list a selection of different online accounts owned by me and communication services that can be used to talk with me."
|
||||
date = "2021-08-17 10:21:34+02:00"
|
||||
updated = "2024-07-14T10:34:11+02:00"
|
||||
updated = "2021-11-02 19:00:03+01:00"
|
||||
+++
|
||||
|
||||
I have recently heard of the practice of listing available communication channels and online profiles on the internet to
|
||||
|
@ -13,11 +13,8 @@ but hopefully even a list with only the less sensitive profiles and contact info
|
|||
The following list is probably not complete and will change over time.
|
||||
|
||||
| Service/Protocol | Hyperlink | Notes |
|
||||
| ------------------ | ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| E-Mail | [contact@jotoho.de](mailto:contact@jotoho.de) | [OpenPGP keys here](https://downloads.jotoho.de/openpgp/) and [via WKD](https://datatracker.ietf.org/doc/draft-koch-openpgp-webkey-service/) |
|
||||
|-|-|-|
|
||||
| E-Mail | [contact@jotoho.de](mailto:contact@jotoho.de) | OpenPGP keys [here](https://downloads.jotoho.de/openpgp/) and [via WKD](https://datatracker.ietf.org/doc/draft-koch-openpgp-webkey-service/) |
|
||||
| Mastodon/Fediverse | [@jotoho@ruhr.social](https://ruhr.social/@jotoho) | |
|
||||
| GitLab | [@jotoho](https://gitlab.com/jotoho) | Preferred Git hosting platform |
|
||||
| GitHub | [@jotoho](https://github.com/jotoho) | |
|
||||
| Threema | [8WEESJ8K](https://threema.id/8WEESJ8K) | <details><summary>QR-Code containing Threema-ID</summary><img src="threema-scanid-8weesj8k.svg" alt="Scannable QR-Code" width="1000px" height="1000px" loading="lazy" class="black-white-svg" /></details> |
|
||||
| Matrix | [@jotoho:jotoho.de](matrix:u/jotoho:jotoho.de?action=chat) | |
|
||||
| Signal | [jotoho.68](https://signal.me/#eu/u_D8b5Ha39JGdbEJ5d4ULShg4VOx80uMc7q2-2ST0Pnx9UDsASZAqaJWL6DRFu59) | |
|
||||
|
|
File diff suppressed because it is too large
Load diff
Before Width: | Height: | Size: 171 KiB |
|
@ -2,44 +2,45 @@
|
|||
title = "Services hosted on jotoho.de"
|
||||
description = "This page lists the various servers running under the jotoho.de domain name and by who and how they may be accessed."
|
||||
date = "2021-06-29 22:14:11+02:00"
|
||||
updated = "2023-03-02T16:57:24+01:00"
|
||||
updated = "2022-01-06 21:52:00+01:00"
|
||||
+++
|
||||
|
||||
Besides this website, my domain also has a number of other services/servers running that are set up for learning purposes or for personal use by myself, family and acquaintances. The list only contains services available from the public internet.
|
||||
|
||||
---
|
||||
|
||||
-----
|
||||
### Publicly accessible services
|
||||
|
||||
- [**This website**](https://www.jotoho.de): www.jotoho.de is currently being self-hosted using
|
||||
[a customized Caddy docker image](https://gitea.jotoho.de/jotoho/site-deployer)
|
||||
- [**Personal Nextcloud**](https://nextcloud.jotoho.de): This Nextcloud instance is set up for use by myself and those I have invited to store, conveniently access and exchange files and other information.
|
||||
- [**Forgejo**](https://gitea.jotoho.de): This git server was migrated from Gitea to Forgejo on 2023-01-17 as an emergency measure due to the potentially hostile takeover
|
||||
of the Gitea project.
|
||||
* [**Personal Nextcloud**](https://nextcloud.jotoho.de): This Nextcloud instance is set up for use by myself and those I have invited to store, conveniently access and exchange files and other information.
|
||||
* [**Gitea**](https://gitea.jotoho.de): I'm currently experimenting with the Git Server software Gitea as a lightweight alternative or addon to GitLab.
|
||||
Account Registration is limited to whitelisted email domains and accounts need to manually be confirmed by me before becoming active.
|
||||
- [**Caddy public fileserver**](https://downloads.jotoho.de): For holding and serving public files directly via HTTPS without needing to go through Nextcloud.
|
||||
* [**Vaultwarden**](https://bitwarden.jotoho.de): Bitwarden Fork for storing and synchronizing my access credentials and other secrets on my own infrastructure.
|
||||
* [**Caddy Fileserver**](https://downloads.jotoho.de): For holding and serving public files directly without needing to go through Nextcloud.
|
||||
Has increased compatibility for use-cases like embedding images or media on this website.
|
||||
- [**Vikunja Task Management**](https://tasks.jotoho.de): Online To-Do list and Tasks management. Family and Friends can request accounts to be created for them
|
||||
in order to be able to share to-do lists.
|
||||
It supports CalDAV synchronization with client devices.
|
||||
* [**This website**](https://www.jotoho.de): www.jotoho.de is currently being self-hosted using
|
||||
[a customized Caddy docker image](https://gitea.jotoho.de/jotoho/site-deployer)
|
||||
|
||||
---
|
||||
-----
|
||||
### Restricted/Internal Services
|
||||
|
||||
These services/servers are only available from whilelisted IP addresses and are exclusively meant for use by myself or family.
|
||||
|
||||
* [Pi-Hole](https://pihole.jotoho.de) (including Webinterface)
|
||||
* PHPMyAdmin
|
||||
|
||||
-----
|
||||
### Special Purpose Subdomains
|
||||
|
||||
- **lab.jotoho.de**: Delegated to DigitalOcean Nameservers for quick configuration of droplets and other testing projects hosted there.
|
||||
* **lab.jotoho.de**: Delegated to DigitalOcean Nameservers for quick configuration of droplets and other testing projects hosted there.
|
||||
Do not expect anything hosted under this subdomain or one of it's subdomains to live for more than a few hours or days.
|
||||
Security issues, Anomalies or detected abuse of this subdomain [should be immediately reported to me via email](mailto:security@jotoho.de),
|
||||
so I can investigate and implement corrective measures, if necessary.
|
||||
|
||||
---
|
||||
Security issues, Anomalies or detected abuse of this subdomain [should be immediately reported to me via email](mailto:security@jotoho.de), so I can investigate and implement corrective measures, if necessary.
|
||||
|
||||
-----
|
||||
### Potential future additions or experiments
|
||||
|
||||
When I bought this domain, it became clear to me how very versatile and useful it can be to have a publicly listed internet namespace so I am always trying to find and learn new ways to put the domain to good use and try out new technologies & server-side software that I view as interesting or useful.
|
||||
|
||||
Things I may set up and play with in the future:
|
||||
|
||||
- personal mastodon or activitypub-compatible server
|
||||
- outgoing SMTP server for service notifications
|
||||
- Apache Guacamole for remote control of devices
|
||||
* personal mastodon or activitypub-compatible server
|
||||
* outgoing SMTP server for service notifications
|
||||
* Apache Guacamole for remote control of devices
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"m.homeserver": {
|
||||
"base_url": "https://matrix.jotoho.de:8448"
|
||||
}
|
||||
}
|
|
@ -1,3 +1,3 @@
|
|||
{
|
||||
"m.server": "matrix.jotoho.de:8448"
|
||||
"m.server": "dendrite2.jotoho.de:8448"
|
||||
}
|
||||
|
|
|
@ -1,25 +1,5 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
Contact: mailto:security@jotoho.de
|
||||
Expires: 2025-09-17T00:00:00.000Z
|
||||
Expires: Sat, 27 Jan 2024 00:00 +0100
|
||||
Encryption: https://keys.openpgp.org/vks/v1/by-fingerprint/1F42EF02BE3E6FE8F624C8BC612F3350DB59D359
|
||||
Encryption: https://downloads.jotoho.de/openpgp/1F42EF02BE3E6FE8F624C8BC612F3350DB59D359.asc
|
||||
Preferred-Languages: de, en
|
||||
Canonical: https://www.jotoho.de/.well-known/security.txt
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQI5BAEBCgAjFiEETvwvjG0vxDxbX2QpFQE63pZQIWQFAmMlz+YFgxLMAwAACgkQ
|
||||
FQE63pZQIWTKxRAAvS2CLpKosuwzuklXI5/gjulSgqy4KMM3QX3lmgzogV6nK0L2
|
||||
YpEvH4e89kldGyDjVKNHWBFRca3eI8OXNlWGTgX5BZ7t7tz7qFccxhsiZBpUiRq3
|
||||
EVRJEwdLj2QLHqIAd8RIA/JGsb7AaEeoTcY/BNmTUWwOYZ6uYzq+XhHKnIOjrQDv
|
||||
iWr+LYa+Pc/w8s5C6No1rmAEWOA1ZbTNduu6eZiwPjytjn/APs1/1WKn6Mee18oY
|
||||
YHdOdfeSJSaIxvMzSCpdFvQdF0HWdJ5yCsE83Un8WA3yI3sRB+YMdVgFDXhEDQaD
|
||||
F9b6VtaQzA805XpbwEaLYPBJjE7jVfKVPXokMMHF0+k9003T34aw9JTLw4YZztIH
|
||||
JwMBUmOkfBiWCXC2cX1d00WMmJd8MVRwcU5SVh6ENjbAOxkpUitS+cFs67YkrtcX
|
||||
AOGDYRnMIAVuV9/SmooJUd+lV/XPjztxmMS9yBmZffwO/DmOvkMEinjhrIV/0tNh
|
||||
Wqjs6GSXbkDdQ33FInPr6bb1AXG2u8IJK8vwi4jTl/ojS8G6zAIoUzCqm1QuGbuA
|
||||
+2YpmZdnHlMFsTUp4zfUDVuGzS6udqcFFsrUsSgit1XkTVjyq44CZbJVXJFp1+w6
|
||||
QjbFVi7KCp89TU0dQ+n7QUZn3USeINGBB4yxglGwajZusxif6pIF5VRuB0g=
|
||||
=lQ4n
|
||||
-----END PGP SIGNATURE-----
|
||||
Canonical: https://jotoho.de/.well-known/security.txt
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
{"subject":"acct:jotoho@ruhr.social","aliases":["https://ruhr.social/@jotoho","https://ruhr.social/users/jotoho"],"links":[{"rel":"http://webfinger.net/rel/profile-page","type":"text/html","href":"https://ruhr.social/@jotoho"},{"rel":"self","type":"application/activity+json","href":"https://ruhr.social/users/jotoho"},{"rel":"http://ostatus.org/schema/1.0/subscribe","template":"https://ruhr.social/authorize_interaction?uri={uri}"}]}
|
|
@ -3,59 +3,24 @@
|
|||
margin: 0;
|
||||
border: none;
|
||||
border-collapse: collapse;
|
||||
box-sizing: border-box !important;
|
||||
overflow-wrap: anywhere;
|
||||
object-fit: scale-down;
|
||||
scroll-behavior: smooth;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
:root {
|
||||
max-width: inherit;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
html:not(:root),
|
||||
body:not(:root) {
|
||||
max-width: inherit;
|
||||
}
|
||||
|
||||
#root {
|
||||
body {
|
||||
font-family: monospace;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-wrap: nowrap;
|
||||
min-height: 100vh;
|
||||
max-width: 100vw;
|
||||
}
|
||||
|
||||
#root > * {
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
header,
|
||||
footer {
|
||||
header, footer {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#header-title {
|
||||
display: block;
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
header {
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
footer {
|
||||
padding-top: 0.5rem;
|
||||
}
|
||||
|
||||
#header-delimiter {
|
||||
padding-top: 0;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
#footer-delimiter {
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
padding-top: 1rem;
|
||||
}
|
||||
|
||||
.globalnav{
|
||||
|
@ -63,32 +28,30 @@ footer {
|
|||
flex-wrap: wrap;
|
||||
flex-direction: row;
|
||||
text-align: center;
|
||||
gap: 2px;
|
||||
height: max-content;
|
||||
gap: max(1px, 0.1rem);
|
||||
}
|
||||
|
||||
.globalnav-element {
|
||||
display: block;
|
||||
background-color: rgb(90% 90% 90%);
|
||||
background-color: #ddd;
|
||||
text-align: center;
|
||||
flex-basis: 0;
|
||||
flex-grow: 1;
|
||||
min-width: fit-content;
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
min-height: fit-content;
|
||||
padding: 0.5rem 0;
|
||||
}
|
||||
|
||||
/* Code Blocks */
|
||||
pre {
|
||||
display: block;
|
||||
padding: 0.75rem;
|
||||
margin-top: 1.5rem;
|
||||
margin-bottom: 1.5rem;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
width: fit-content;
|
||||
max-width: 100%;
|
||||
overflow-x: auto;
|
||||
width: 100%;
|
||||
max-width: max-content;
|
||||
overflow-y: auto;
|
||||
line-break: strict;
|
||||
}
|
||||
|
||||
|
@ -100,8 +63,11 @@ code {
|
|||
}
|
||||
|
||||
p {
|
||||
margin-top: 0.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
article {
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
|
@ -110,106 +76,37 @@ h2 {
|
|||
}
|
||||
|
||||
#mainarticle {
|
||||
width: fit-content;
|
||||
max-width: min(100%, 72rem);
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
flex-grow: 1;
|
||||
text-align: justify;
|
||||
width: max-content;
|
||||
max-width: min(80rem, 100%);
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#mainarticle h3 {
|
||||
margin-top: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
ul > li,
|
||||
ol > li {
|
||||
margin-top: 0.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
li::marker {
|
||||
width: 1rem;
|
||||
max-width: 100%;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-inline-start: 1rem;
|
||||
li, ul, ol {
|
||||
margin: 1rem;
|
||||
}
|
||||
|
||||
hr {
|
||||
border-style: inset;
|
||||
border-width: 1px;
|
||||
margin-top: 0.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
|
||||
table {
|
||||
display: block;
|
||||
border-collapse: collapse;
|
||||
margin: 1rem auto;
|
||||
width: fit-content;
|
||||
width: max-content;
|
||||
max-width: 100%;
|
||||
overflow-x: auto;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
tr {
|
||||
width: fit-content;
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
td, th {
|
||||
border-style: solid;
|
||||
border-color: black;
|
||||
border-collapse: collapse;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
min-height: unset;
|
||||
min-width: unset;
|
||||
height: auto;
|
||||
width: auto;
|
||||
max-width: 100%;
|
||||
max-height: unset;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
object-fit: scale-down;
|
||||
object-position: center;
|
||||
}
|
||||
|
||||
details {
|
||||
backdrop-filter: invert(100%);
|
||||
padding: max(1mm, 1px);
|
||||
width: min-content;
|
||||
max-width: fit-content;
|
||||
min-width: unset;
|
||||
display: block;
|
||||
color: black;
|
||||
}
|
||||
|
||||
details > summary {
|
||||
max-width: fit-content;
|
||||
width: max-content;
|
||||
display: block;
|
||||
}
|
||||
|
||||
details:not([open]) > summary::after {
|
||||
content: "Click to expand";
|
||||
display: block;
|
||||
max-width: fit-content;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
details[open] > summary {
|
||||
margin-bottom: max(1mm, 1px);
|
||||
}
|
||||
|
||||
#licenseimg {
|
||||
vertical-align: middle;
|
||||
height: inherit;
|
||||
|
@ -221,32 +118,20 @@ details[open] > summary {
|
|||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.visible-article-metadata {
|
||||
display: contents;
|
||||
font-size: small;
|
||||
font-style: italic;
|
||||
@media (max-width: 20rem), (max-width: 300px) {
|
||||
* {
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.article-metadata-label {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.article-missinglicense {
|
||||
font-size: xx-small;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
* {
|
||||
scrollbar-color: white black;
|
||||
}
|
||||
|
||||
html {
|
||||
background-color: black;
|
||||
background-color: #111;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.globalnav-element {
|
||||
background-color: rgb(10% 10% 10%);
|
||||
background-color: #222;
|
||||
}
|
||||
|
||||
code {
|
||||
|
@ -257,15 +142,9 @@ details[open] > summary {
|
|||
color: lightskyblue;
|
||||
}
|
||||
|
||||
table,
|
||||
td,
|
||||
th {
|
||||
table, td, th {
|
||||
border-color: white;
|
||||
}
|
||||
|
||||
details {
|
||||
color: black;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
|
@ -275,20 +154,14 @@ details[open] > summary {
|
|||
}
|
||||
|
||||
.globalnav-element {
|
||||
background-color: rgb(90% 90% 90%);
|
||||
background-color: #ddd;
|
||||
}
|
||||
|
||||
code {
|
||||
color: green;
|
||||
}
|
||||
|
||||
table,
|
||||
td,
|
||||
th {
|
||||
table, td, th {
|
||||
border-color: black;
|
||||
}
|
||||
|
||||
details {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,121 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="80"
|
||||
height="15"
|
||||
id="svg2279"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.45+devel"
|
||||
version="1.0"
|
||||
sodipodi:docname="by-nc-nd.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs2281">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath3442">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92243534;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3444"
|
||||
width="20.614058"
|
||||
height="12.483703"
|
||||
x="171.99832"
|
||||
y="239.1203" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#999999"
|
||||
borderopacity="1"
|
||||
gridtolerance="10000"
|
||||
guidetolerance="10"
|
||||
objecttolerance="10"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="10.5125"
|
||||
inkscape:cx="40"
|
||||
inkscape:cy="7.5"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
width="80px"
|
||||
height="15px"
|
||||
showborder="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="935"
|
||||
inkscape:window-height="624"
|
||||
inkscape:window-x="50"
|
||||
inkscape:window-y="160" />
|
||||
<metadata
|
||||
id="metadata2284">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="BY-NC-ND"
|
||||
transform="matrix(0.9875019,0,0,0.9333518,-323.90064,-411.87964)">
|
||||
<g
|
||||
id="g3783"
|
||||
transform="translate(158,204)">
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.04161763;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3785"
|
||||
width="80"
|
||||
height="15"
|
||||
x="170.5"
|
||||
y="237.86218" />
|
||||
<rect
|
||||
y="239.36218"
|
||||
x="172"
|
||||
height="12"
|
||||
width="77"
|
||||
id="rect3787"
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92243534;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:#abb1aa;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.46913578"
|
||||
d="M 171.99996,239.37505 L 171.99996,251.37505 L 192.33474,251.37505 C 193.64339,249.62474 194.52652,247.59057 194.52652,245.37505 C 194.52652,243.17431 193.65859,241.1179 192.36599,239.37505 L 171.99996,239.37505 z"
|
||||
id="path3789"
|
||||
sodipodi:nodetypes="cccscc" />
|
||||
<g
|
||||
id="g3791"
|
||||
transform="matrix(0.9612533,0,0,0.9612533,6.8341566,9.5069994)"
|
||||
clip-path="url(#clipPath3442)">
|
||||
<path
|
||||
id="path3793"
|
||||
cx="296.35416"
|
||||
ry="22.939548"
|
||||
cy="264.3577"
|
||||
type="arc"
|
||||
rx="22.939548"
|
||||
d="M 190.06417,245.36206 C 190.06667,249.25405 186.91326,252.41072 183.02153,252.41323 C 179.12979,252.41572 175.97262,249.26256 175.97036,245.3706 C 175.97036,245.36783 175.97036,245.36507 175.97036,245.36206 C 175.9681,241.47007 179.12126,238.3134 183.013,238.31113 C 186.90524,238.30864 190.06191,241.46181 190.06417,245.3538 C 190.06417,245.35628 190.06417,245.35929 190.06417,245.36206 z"
|
||||
style="opacity:1;fill:#ffffff" />
|
||||
<path
|
||||
d="M 188.74576,239.62226 C 190.30843,241.18492 191.08988,243.09869 191.08988,245.36206 C 191.08988,247.62592 190.32197,249.51913 188.78615,251.04165 C 187.15627,252.64521 185.22995,253.44672 183.00722,253.44672 C 180.81132,253.44672 178.91837,252.65172 177.32887,251.06174 C 175.73912,249.47198 174.94436,247.57226 174.94436,245.36206 C 174.94436,243.15235 175.73912,241.23908 177.32887,239.62226 C 178.87799,238.0591 180.77094,237.27764 183.00722,237.27764 C 185.2706,237.27764 187.18312,238.05909 188.74576,239.62226 z M 178.38093,240.67355 C 177.05978,242.008 176.39945,243.57116 176.39945,245.36429 C 176.39945,247.15694 177.05326,248.70682 178.36062,250.01393 C 179.66822,251.32153 181.22487,251.97509 183.03105,251.97509 C 184.83724,251.97509 186.40716,251.31502 187.74161,249.99412 C 189.0086,248.76725 189.64234,247.22467 189.64234,245.36429 C 189.64234,243.51799 188.99831,241.95084 187.71101,240.66354 C 186.42396,239.37649 184.86406,238.7327 183.03105,238.7327 C 181.19804,238.73271 179.64767,239.37975 178.38093,240.67355 z M 181.85761,244.57559 C 181.65573,244.13545 181.35354,243.91525 180.95051,243.91525 C 180.23802,243.91525 179.8819,244.39501 179.8819,245.35404 C 179.8819,246.31328 180.23802,246.79255 180.95051,246.79255 C 181.421,246.79255 181.75705,246.55908 181.95869,246.09111 L 182.94629,246.61701 C 182.47555,247.45339 181.76934,247.87168 180.82763,247.87168 C 180.10136,247.87168 179.51953,247.64899 179.08265,247.20409 C 178.64502,246.7587 178.42684,246.14477 178.42684,245.36206 C 178.42684,244.59313 178.65204,243.98271 179.10271,243.53056 C 179.55338,243.07838 180.11463,242.8524 180.7875,242.8524 C 181.78288,242.8524 182.49561,243.24465 182.92647,244.02835 L 181.85761,244.57559 z M 186.50398,244.57559 C 186.30184,244.13545 186.00567,243.91525 185.61517,243.91525 C 184.88839,243.91525 184.52474,244.39501 184.52474,245.35404 C 184.52474,246.31328 184.88839,246.79255 185.61517,246.79255 C 186.08642,246.79255 186.41644,246.55908 186.6048,246.09111 L 187.61447,246.61701 C 187.14448,247.45339 186.43926,247.87168 185.49931,247.87168 C 184.77403,247.87168 184.19346,247.64899 183.75683,247.20409 C 183.32096,246.7587 183.10254,246.14477 183.10254,245.36206 C 183.10254,244.59313 183.32422,243.98271 183.76737,243.53056 C 184.21026,243.07838 184.77404,242.8524 185.4592,242.8524 C 186.45282,242.8524 187.16455,243.24465 187.5939,244.02835 L 186.50398,244.57559 z"
|
||||
id="path3795"
|
||||
style="opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
id="text3797"
|
||||
d="M 357.4197,448.68503 C 357.66518,448.68504 357.85131,448.63146 357.9781,448.52428 C 358.10488,448.41712 358.16827,448.25905 358.16828,448.05008 C 358.16827,447.84378 358.10488,447.68705 357.9781,447.57988 C 357.85131,447.47004 357.66518,447.41512 357.4197,447.41511 L 356.55784,447.41511 L 356.55784,448.68503 L 357.4197,448.68503 M 357.4723,451.30929 C 357.78522,451.30929 358.0199,451.24364 358.17637,451.11236 C 358.33552,450.98109 358.4151,450.78283 358.4151,450.51759 C 358.4151,450.25771 358.33686,450.06347 358.18041,449.93488 C 358.02396,449.80359 357.78792,449.73796 357.4723,449.73795 L 356.55784,449.73795 L 356.55784,451.30929 L 357.4723,451.30929 M 358.92089,449.15122 C 359.25538,449.24767 359.51434,449.42583 359.69779,449.68571 C 359.88121,449.94559 359.97293,450.26441 359.97294,450.64217 C 359.97293,451.22087 359.776,451.65222 359.38217,451.93621 C 358.98833,452.2202 358.38947,452.36219 357.5856,452.36219 L 355.00001,452.36219 L 355.00001,446.3622 L 357.33878,446.3622 C 358.17771,446.36221 358.78466,446.48813 359.15962,446.73996 C 359.53727,446.99181 359.7261,447.39502 359.7261,447.9496 C 359.7261,448.24164 359.65732,448.4908 359.51975,448.69709 C 359.38217,448.90072 359.18255,449.05209 358.92089,449.15122 M 359.83746,446.3622 L 361.54096,446.3622 L 362.91671,448.50018 L 364.29245,446.3622 L 366,446.3622 L 363.69764,449.8344 L 363.69764,452.36219 L 362.13982,452.36219 L 362.13982,449.8344 L 359.83746,446.3622 M 365.15837,449.40842 L 367.69946,449.40842 L 367.69946,450.57787 L 365.15837,450.57787 L 365.15837,449.40842 M 368.9174,446.3622 L 370.65732,446.3622 L 372.85447,450.47741 L 372.85447,446.3622 L 374.33138,446.3622 L 374.33138,452.36219 L 372.59146,452.36219 L 370.3943,448.24699 L 370.3943,452.36219 L 368.9174,452.36219 L 368.9174,446.3622 M 380.65173,452.03266 C 380.36579,452.18002 380.0677,452.2912 379.75749,452.36622 C 379.44727,452.44123 379.12357,452.47875 378.78638,452.47875 C 377.78019,452.47875 376.98307,452.20011 376.395,451.64284 C 375.80693,451.08289 375.5129,450.32469 375.5129,449.36823 C 375.5129,448.40909 375.80693,447.65089 376.395,447.09361 C 376.98307,446.53367 377.78019,446.2537 378.78638,446.25369 C 379.12357,446.2537 379.44727,446.29121 379.75749,446.36621 C 380.0677,446.44124 380.36579,446.55243 380.65173,446.69977 L 380.65173,447.94157 C 380.36309,447.746 380.0785,447.60266 379.79796,447.51156 C 379.5174,447.42047 379.22203,447.37493 378.91181,447.37493 C 378.35611,447.37493 377.91911,447.55175 377.6008,447.9054 C 377.28249,448.25905 377.12333,448.74666 377.12333,449.36823 C 377.12333,449.98712 377.28249,450.47339 377.6008,450.82703 C 377.91911,451.18069 378.35611,451.35751 378.91181,451.35751 C 379.22203,451.35751 379.5174,451.31197 379.79796,451.22087 C 380.0785,451.12978 380.36309,450.98644 380.65173,450.79086 L 380.65173,452.03266 M 381.82921,449.40842 L 384.3703,449.40842 L 384.3703,450.57787 L 381.82921,450.57787 L 381.82921,449.40842 M 385.58824,446.3622 L 387.32815,446.3622 L 389.52531,450.47741 L 389.52531,446.3622 L 391.00222,446.3622 L 391.00222,452.36219 L 389.26229,452.36219 L 387.06515,448.24699 L 387.06515,452.36219 L 385.58824,452.36219 L 385.58824,446.3622 M 394.08956,447.53165 L 394.08956,451.19274 L 394.64795,451.19274 C 395.28456,451.19274 395.77013,451.03602 396.10462,450.72255 C 396.44181,450.40909 396.61041,449.95363 396.61042,449.35617 C 396.61041,448.7614 396.44317,448.30862 396.10867,447.99783 C 395.77417,447.68705 395.28726,447.53166 394.64795,447.53165 L 394.08956,447.53165 M 392.53172,446.3622 L 394.17453,446.3622 C 395.09169,446.36221 395.77417,446.42784 396.22197,446.55912 C 396.67245,446.68772 397.0582,446.90742 397.37922,447.2182 C 397.66246,447.48879 397.87286,447.80092 398.01044,448.15456 C 398.14801,448.50822 398.2168,448.90875 398.21681,449.35617 C 398.2168,449.80896 398.14801,450.21351 398.01044,450.56983 C 397.87286,450.92349 397.66246,451.23561 397.37922,451.50621 C 397.05551,451.81699 396.66706,452.03802 396.21387,452.1693 C 395.76069,452.29789 395.0809,452.36219 394.17453,452.36219 L 392.53172,452.36219 L 392.53172,446.3622"
|
||||
style="font-size:8.25858784px;font-style:normal;font-weight:bold;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:'Bitstream Vera Sans'" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 11 KiB |
|
@ -1,11 +0,0 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>CI/CD Presentation redirect</title>
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta http-equiv="Refresh" content="0; url='https://docs.google.com/presentation/d/1NwD6r3W2T0cprsixUUWzM7nKkDZX1GuGmrlK32QpOmo/edit?usp=sharing'" />
|
||||
</head>
|
||||
<body>
|
||||
<p>You should be automatically redirected now...</p>
|
||||
</body>
|
||||
</html>
|
|
@ -1,19 +1,9 @@
|
|||
(() => {
|
||||
"use strict";
|
||||
|
||||
{
|
||||
// Month index must be two because counting begins at 0 (for January)
|
||||
const myBirthDate = new Date(2001, 2, 29);
|
||||
const today = new Date();
|
||||
|
||||
let yearsSinceBirth = today.getFullYear() - myBirthDate.getFullYear();
|
||||
|
||||
// Correct yearsSinceBirth if between New Year and my birthday
|
||||
if (today.getMonth() < myBirthDate.getMonth()) yearsSinceBirth--;
|
||||
else if (
|
||||
today.getMonth() == myBirthDate.getMonth() &&
|
||||
today.getDate() < myBirthDate.getDate()
|
||||
)
|
||||
yearsSinceBirth--;
|
||||
|
||||
document.getElementById("age-display").innerText = yearsSinceBirth.toString();
|
||||
let ageElements = document.getElementsByClassName("age-display")
|
||||
for (let i = 0; i < ageElements.length; i++) {
|
||||
ageElements[i].innerText = (Math.floor(((new Date()).getTime() - (new Date(2001, 3, 29)).getTime())
|
||||
/ 1000 / 60 / 60 / 24 / 365))
|
||||
.toString()
|
||||
}
|
||||
})()
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
"use strict";
|
||||
|
||||
Array.from(document.getElementsByClassName("relative-timestamp")).forEach(
|
||||
function (timestamp) {
|
||||
if (timestamp?.dateTime) {
|
||||
timestamp.innerText = new Intl.DateTimeFormat(undefined, {
|
||||
dateStyle: "long",
|
||||
timeStyle: "short",
|
||||
}).format(new Date(timestamp.dateTime));
|
||||
}
|
||||
}
|
||||
);
|
|
@ -1,15 +0,0 @@
|
|||
"use strict";
|
||||
|
||||
{
|
||||
const copyrightYearElement = document.getElementById("footer-copyrightyear");
|
||||
|
||||
if (copyrightYearElement) {
|
||||
const currentYearAsStr = new Date().getFullYear().toString();
|
||||
|
||||
copyrightYearElement.innerText = currentYearAsStr;
|
||||
copyrightYearElement.dateTime = currentYearAsStr;
|
||||
} else
|
||||
console.error(
|
||||
"Could not find the footer entry for the year of the copyright notice."
|
||||
);
|
||||
}
|
|
@ -20,15 +20,17 @@
|
|||
/>
|
||||
<!--Mastodon account ownership verification-->
|
||||
<link rel="me" href="https://ruhr.social/@jotoho" />
|
||||
<script defer src="/scripts/updatecopyrightyear.js"></script>
|
||||
<title>jotoho.de - A personal website</title>
|
||||
{% block metadata %} {% endblock %}
|
||||
</head>
|
||||
<body id="root">
|
||||
<body>
|
||||
<header>
|
||||
<a id="header-title" href="{{ config.base_url }}">
|
||||
<h1>jotoho.de - My personal website</h1>
|
||||
</a>
|
||||
<div>
|
||||
<a href="{{ config.base_url }}"
|
||||
><h1>jotoho.de - My personal website</h1></a
|
||||
>
|
||||
</div>
|
||||
</header>
|
||||
<nav class="globalnav">
|
||||
<!--<a class="globalnav-element" href="{{ get_url(path='@/blog/_index.md') }}"> Blog </a>-->
|
||||
<a
|
||||
|
@ -44,23 +46,23 @@
|
|||
Profiles
|
||||
</a>
|
||||
</nav>
|
||||
</header>
|
||||
<hr id="header-delimiter" />
|
||||
<hr />
|
||||
|
||||
<article id="mainarticle">{% block content %} {% endblock %}</article>
|
||||
|
||||
<hr id="footer-delimiter" />
|
||||
<hr />
|
||||
<footer>
|
||||
<p>
|
||||
<!--{% set current_year = now() | date(format="%Y",
|
||||
timezone="Europe/Berlin") %} -->
|
||||
|
||||
Copyright
|
||||
<time id="footer-copyrightyear" datetime="{{ current_year }}">
|
||||
{{ current_year }}
|
||||
</time>
|
||||
Jonas Tobias Hopusch (@jotoho)
|
||||
<!--
|
||||
<time datetime="{{ current_year }}">{{ current_year }}</time>
|
||||
Jonas Tobias Hopusch (<a
|
||||
rel="noreferer"
|
||||
href="https://gitlab.com/jotoho"
|
||||
>@jotoho</a
|
||||
>)
|
||||
<br />
|
||||
Licensed under
|
||||
<a href="https://creativecommons.org/licenses/by-nc-nd/4.0/"
|
||||
|
@ -68,19 +70,19 @@
|
|||
id="licenseimg"
|
||||
alt="CC BY-NC-ND 4.0"
|
||||
title="CC BY-NC-ND 4.0"
|
||||
src="/images/copyright/cc-by-nc-nd-4.0-small.svg"
|
||||
src="https://licensebuttons.net/l/by-nc-nd/4.0/80x15.png"
|
||||
/></a>
|
||||
(unless otherwise specified)
|
||||
-->
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://gitea.jotoho.de/jotoho/my-website">This page</a>
|
||||
<a href="https://gitea.jotoho.de/jotoho/my-website"
|
||||
>This page</a
|
||||
>
|
||||
is being served using
|
||||
<a rel="noreferer" href="https://caddyserver.com/">Caddy</a>
|
||||
and was generated using
|
||||
<a rel="noreferer" href="https://www.getzola.org/">Zola</a>.
|
||||
<br />
|
||||
You may contact me via
|
||||
<a rel="noreferer" href="https://www.getzola.org/">Zola</a>. You
|
||||
may contact me via
|
||||
<a href="mailto:webmaster@jotoho.de">email</a>
|
||||
regarding any issues with this website.
|
||||
</p>
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
{% extends "base.html" %} {% block metadata %}
|
||||
<meta
|
||||
name="description"
|
||||
content="This is the personal website of Jonas Tobias Hopusch (@jotoho)"
|
||||
/>
|
||||
{% endblock metadata %} {% block content %}
|
||||
<p>This is some placeholder text because I don't know what to put here, yet.</p>
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block metadata %}
|
||||
<meta name="description" content="This is the personal website of Jonas Tobias Hopusch (@jotoho)" />
|
||||
{% endblock metadata %}
|
||||
|
||||
{% block content %}
|
||||
<p>
|
||||
This is some placeholder text because I don't know what to put here, yet.
|
||||
</p>
|
||||
{% endblock content %}
|
||||
|
|
|
@ -1,47 +1,30 @@
|
|||
{% extends "base.html" %} {% block metadata %}
|
||||
|
||||
<meta name="description" content="{{ page.description }}" />
|
||||
<script defer src="/scripts/relativetime.js"></script>
|
||||
|
||||
{% endblock %} {% block content %}
|
||||
<h2>{{ page.title }}</h2>
|
||||
<div class="visible-article-metadata">
|
||||
{% if page.date and page.date is defined %}
|
||||
<p>
|
||||
<span class="article-metadata-label">First published</span>:
|
||||
<time class="relative-timestamp" datetime="{{page.date}}"
|
||||
>{{ page.date | date(format="%F %R (%Z)", timezone="Europe/Berlin")
|
||||
}}</time
|
||||
<em
|
||||
><strong>Published on</strong>:
|
||||
<time datetime="{{page.date}}"
|
||||
>{{ page.date | date(format="%A, %e %B %Y %R %Z",
|
||||
timezone="Europe/Berlin") }}</time
|
||||
></em
|
||||
>
|
||||
</p>
|
||||
{% endif %} {% if page.updated and page.updated != page.date %}
|
||||
<p>
|
||||
<span class="article-metadata-label">Last updated on</span>:
|
||||
<time class="relative-timestamp" datetime="{{page.updated}}"
|
||||
>{{ page.updated | date(format="%F %R (%Z)", timezone="Europe/Berlin")
|
||||
}}</time
|
||||
<em
|
||||
><strong>Last updated on</strong>:
|
||||
<time datetime="{{page.updated}}"
|
||||
>{{ page.updated | date(format="%A, %e %B %Y %R %Z",
|
||||
timezone="Europe/Berlin") }}</time
|
||||
></em
|
||||
>
|
||||
</p>
|
||||
{% endif %} {% if page.extra.author and page.extra.author != "" %}
|
||||
<p>
|
||||
<span class="article-metadata-label">Author(s)</span>: {{page.extra.author}}
|
||||
</p>
|
||||
{% else %}
|
||||
<p>
|
||||
<span class="article-metadata-label">Author</span>: Jonas Tobias Hopusch
|
||||
</p>
|
||||
{% endif %} {% if page.extra.license and page.extra.license != "" %}
|
||||
<p id="article-license">
|
||||
<span class="article-metadata-label"
|
||||
>Article is provided under the following license</span
|
||||
>: {{page.extra.license}}
|
||||
</p>
|
||||
{% else %}
|
||||
<p class="article-missinglicense">
|
||||
No license is granted for this article. All rights reserved.
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<hr id="last-article-metadata" />
|
||||
<div>{{ page.content | safe }}</div>
|
||||
{% endblock content %}
|
||||
|
|
|
@ -5,5 +5,7 @@
|
|||
<li><a href="{{ page.permalink | safe }}">{{ page.title }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div>{{ section.content | safe }}</div>
|
||||
<div>
|
||||
{{ section.content | safe }}
|
||||
</div>
|
||||
{% endblock content %}
|
||||
|
|
Loading…
Reference in a new issue