commit ba9e436047918bf9bade71423f540da9165085d8 Author: benjilegeek Date: Fri Mar 13 10:10:55 2026 +0100 intial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..d7db3fc --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +## benji0x3c + diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..57c9eae --- /dev/null +++ b/config.toml @@ -0,0 +1,462 @@ +base_url = "https://YOUR_URL.TLD" +title = "benji's website" +description = "Eine Mischung aus Blog, Portfolio und Spaßprojekt" +author = "benji0x3c" +theme = "tabi" +generate_feeds = true +compile_sass = true +minify_html = true +build_search_index = false +default_language = "de" +taxonomies = [{name = "tags", feed = true}] + + +[markdown] +bottom_footnotes = true +smart_punctuation = true + +[markdown.highlighting] +theme = "catppuccin-frappe" +style = "class" + +[extra] +# Check out the documentation (or the comments below) to learn how to customise tabi: +# https://welpo.github.io/tabi/blog/mastering-tabi-settings/ + +# Search index format. +# For Zola 0.17.X users only. +# This MUST MATCH the setting in [search].index_format. +# Example: If [search].index_format is "elasticlunr_javascript", set: +# index_format = "elasticlunr_javascript" +# index_format = "" + +# Use sans-serif font everywhere. +# By default, the serif font is only used in articles. +override_serif_with_sans = false + +# Enable JavaScript theme toggler to allow users to switch between dark/light mode. +# If disabled, your site will use the theme specified in the `default_theme` variable. +theme_switcher = true + +# This setting determines the default theme on load ("light" or "dark"). +# To follow the user's OS theme, leave it empty or unset. +default_theme = "" + +# Choose the colourscheme (skin) for the theme. Default is "teal". +# Skin available: blue, lavender, mint, red, sakura, teal, monochrome, lowcontrast_orange, lowcontrast_peach, lowcontrast_pink, indigo_ingot, evangelion +# See them live and learn how to create your own: https://welpo.github.io/tabi/blog/customise-tabi/#skins +# WARNING! "lowcontrast" skins, while aesthetically pleasing, may not provide optimal +# contrast (in light theme) for readability and might not be suitable for all users. +# Furthermore, low contrasting elements will affect your Google Lighthouse rating. +# All other skins have optimal contrast. +skin = "" + +# Set browser theme colour. Can be a single colour or [light, dark]. +# Note: Bright colors may be ignored in dark mode. +# More details: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta/name/theme-color +# browser_theme_color = "#087e96" # Example of single value. +# browser_theme_color = ["#ffffff", "#000000"] # Example of light/dark colours. + +# List additional stylesheets to load site-wide. +# These stylesheets should be located in your site's `static` directory. +# Example: stylesheets = ["extra1.css", "path/extra2.css"] +# You can load a stylesheet for a single post by adding it to the [extra] section of the post's front matter, following this same format. +stylesheets = [] + +# Sets the default canonical URL for all pages. +# Individual pages can override this in the [extra] section using canonical_url. +# Example: "$base_url/blog/post1" will get the canonical URL "https://example.com/blog/post1". +# Note: To ensure accuracy in terms of matching content, consider setting 'canonical_url' individually per page. +# base_canonical_url = "https://example.com" + +# Remote repository for your Zola site. +# Used for `show_remote_changes` and `show_remote_source` (see below). +# Supports GitHub, GitLab, Gitea, and Codeberg. +# remote_repository_url = "https://github.com/welpo/tabi" +# Set this to "auto" to try and auto-detect the platform based on the repository URL. +# Accepted values are "github", "gitlab", "gitea", and "codeberg". +remote_repository_git_platform = "auto" # Defaults to "auto". +# Branch in the repo hosting the Zola site. +remote_repository_branch = "main" # Defaults to "main". +# Show a link to the commit history of updated posts, right next to the last updated date. +# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +show_remote_changes = true # Defaults to true. +# Show a link to the repository of the site, right next to the "Powered by Zola & tabi" text. +show_remote_source = true # Defaults to true. + +# Add a "copy" button to codeblocks (loads ~700 bytes of JavaScript). +# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +copy_button = true + +# Make code block names clickable if they are URLs (loads ~400 bytes of JavaScript). +# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +code_block_name_links = false + +# Force left-to-right (LTR) direction for code blocks. +# Set to false to allow code to follow the document's natural direction. +# Can be set at page or section levels. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +force_codeblock_ltr = true + +# Show the author(s) of a page. +# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +show_author = false + +# Show the reading time of a page. +# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +show_reading_time = true + +# Show the date of a page below its title. +# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +show_date = true + +# Determines how dates are displayed in the post listing (e.g. front page or /blog). Options: +# "date" - Show only the original date of the post (default if unset). +# "updated" - Show only the last updated date of the post. If there is no last updated date, it shows the original date. +# "both" - Show both the original date and the last updated date. +post_listing_date = "date" + +# Enable iine like buttons on all posts: https://iine.to/ +# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +iine = false +iine_icon = "heart" # See https://iine.to/#customise +# Unify like counts across all language versions of the same page. +# When enabled, likes on /es/blog/hello/ will count towards /blog/hello/ (default language). +iine_unified_languages = true + +# Show "Jump to posts" link next to series' title. +# By default, the link appears automatically when a series description exceeds 2000 characters. +# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +# show_jump_to_posts = true + +# Determines if indexes should be increasing (false) or decreasing (true) in series' posts list. +# It has only effect if the section uses indexes metadata (which is only the case for series as of now). +# Can be set at section levels, following the hierarchy: section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +post_listing_index_reversed = false # Defaults to false. + +# DEPRECATED! +# Use Zola's built-in `bottom_footnotes = true` in the [markdown] section instead. (Available since v0.19.0) +# Adds backlinks to footnotes (loads ~500 bytes of JavaScripts). +# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +footnote_backlinks = false + +# Enable KaTeX for all posts. +# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +katex = false + +# Enable Mermaid diagrams for all posts. +# Loads ~2.5MB of JavaScript. +# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +mermaid = false + +# Serve Mermaid JavaScript locally. Version bundled with tabi. +# If set to false, it will load the latest version from JSDelivr. +# Only relevant when `mermaid = true`. +serve_local_mermaid = true + +# Show links to previous and next articles at the bottom of posts. +# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +show_previous_next_article_links = false + +# Invert order of the links to previous and next articles at the bottom of posts. +# By default, next articles are on the left side of the page and previous articles are on the right side. +# To reverse the order (next articles on the right and previous articles on the left), set it to true. +# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +invert_previous_next_article_links = false + +# Whether the navigation for previous/next article should match the full width of the site (same as the navigation bar at the top) or the article width. +# To match the navigation bar at the top, set it to true. +previous_next_article_links_full_width = true + +# Quick navigation buttons. +# Adds "go up" and "go to comments" buttons on the bottom right (hidden for mobile). +# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +quick_navigation_buttons = true + +# Add a Table of Contents to posts, right below the title and metadata. +# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +# toc = false + +# Date format used when listing posts (main page, /blog section, tag posts list…) +# Default is "6th July 2049" in English and "%d %B %Y" in other languages. +# long_date_format = "%d %B %Y" + +# Date format used for blog posts. +# Default is "6th July 2049" in English and "%-d %B %Y" in other languages. +short_date_format = "" + +# Date format used for the archive page. +# Default is "06 July" in English and "%d %b" in other languages. +archive_date_format = "" + +# Per-language date format overrides. +# Examples: Spanish uses "3 de febrero de 2024", German uses "3. Februar 2024" +date_formats = [ + { lang = "de", long = "%d. %B %Y", short = "%d.%m.%Y", archive = "%d. %b" }, +] + +# Custom separator used in title tag and posts metadata (between date, time to read, and tags). +separator = "•" + +# Use a shorter layout for All tags listing. +# Default: tag_name – n post[s] +# Compact: tag_name^n (superscript number) +compact_tags = false + +# How tags are sorted in a Tags listing based on templates/tags/list.html. +# "name" for alphabetical, "frequency" for descending count of posts. +# Default: "name". +tag_sorting = "name" + +# Show clickable tags above cards.html template (e.g. projects/) to filter the displayed items. +# Loads JS to filter. If JS is disabled, the buttons are links to the tag's page. +# Can be set at the section or config.toml level, following the hierarchy: section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +# Default: true +enable_cards_tag_filtering = true + +# Invert the order of the site title and page title in the browser tab. +# Example: true => "Blog • ~/tabi", false => "~/tabi • Blog" +invert_title_order = false + +# Full path after the base URL required. So if you were to place it in "static" it would be "/favicon.ico" +# favicon = "" + +# Add an emoji here to use it as favicon. +# Compatibility: https://caniuse.com/link-icon-svg +# favicon_emoji = "" + +# Path to the fallback image for social media cards (the preview image shown when sharing a link on WhatsApp, LinkedIn…). +# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +# Learn how to create these images in batch and automatically: +# https://osc.garden/blog/automating-social-media-cards-zola/ +# social_media_card = "" + +menu = [ + { name = "blog", url = "blog", trailing_slash = true }, + { name = "tags", url = "tags", trailing_slash = true }, + { name = "projects", url = "projects", trailing_slash = true }, +] + +# The RSS icon will be shown if (1) it's enabled and (2) the following variable is set. +# Set to true to use the default "rss" icon, or specify a custom icon name (e.g. "square-rss"). +# The icon must exist in static/social_icons/ (without the .svg extension). +# Note for Zola 0.19.X users: when `feed_filenames` has two filenames, only the first one will be linked in the footer. +feed_icon = true + +# Show the full post content in the Atom feed. +# If it's set to false, only the description or summary will be shown. +full_content_in_feed = true + +# Email address for footer's social section. +# Protect against spambots: +# 1. Use base64 for email (convert at https://www.base64encode.org/ or `printf 'your@email.com' | base64`). +# 2. Or, set 'encode_plaintext_email' to true for auto-encoding (only protects on site, not in public repos). +# email = "bWFpbEBleGFtcGxlLmNvbQ==" # base64 encoded version of "mail@example.com" +# Decoding requires ~400 bytes of JavaScript. If JS is disabled, the email won't be displayed. +encode_plaintext_email = true # Setting is ignored if email is already encoded. + +# Social media links for the footer. +# Built-in icons: https://github.com/welpo/tabi/tree/main/static/social_icons +# To use a custom icon, add it to your site's `static/social_icons` directory. +# socials = [ +# { name = "github", url = "https://github.com/welpo/", icon = "github" }, +# { name = "soundcloud", url = "https://soundcloud.com/oskerwyld", icon = "soundcloud" }, +# { name = "instagram", url = "https://instagram.com/oskerwyld", icon = "instagram" }, +# { name = "youtube", url = "https://youtube.com/@oskerwyld", icon = "youtube" }, +# { name = "spotify", url = "https://open.spotify.com/artist/5Hv2bYBhMp1lUHFri06xkE", icon = "spotify" }, +# ] + +# Fediverse profile. +# Adds metadata to feature the author's profile in Mastodon link previews. +# Example: for @username@example.com, use: +# fediverse_creator = { handle = "username", domain = "example.com" } + +# Extra menu to show on the footer, below socials section. +# footer_menu = [ +# {url = "about", name = "about", trailing_slash = true}, +# {url = "privacy", name = "privacy", trailing_slash = true}, +# {url = "sitemap.xml", name = "sitemap", trailing_slash = false}, +# {url = "https://example.com", name = "external link", trailing_slash = true}, +# ] + +# Enable a copyright notice for the footer, shown between socials and the "Powered by" text. +# $TITLE will be replaced by the website's title. +# $CURRENT_YEAR will be replaced by the current year. +# $AUTHOR will be replaced by the `author` variable. +# $SEPARATOR will be replaced by the `separator` variable. +# Markdown is supported (links, emphasis, etc). +# copyright = "$TITLE © $CURRENT_YEAR $AUTHOR $SEPARATOR Unless otherwise noted, the content in this website is available under the [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) license." + +# For multi-language sites, you can set a different copyright for each language. +# The old way of setting `translated_copyright = true` and using i18n files is deprecated. +# If a translation is missing for language, the `copyright` value will be used. +# copyright_translations.es = "$TITLE © $CURRENT_YEAR $AUTHOR $SEPARATOR A menos que se indique lo contrario, el contenido de esta web está disponible bajo la licencia [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.es)." + +# Custom security headers. What urls should your website be able to connect to? +# You need to specify the CSP and the URLs associated with the directive. +# Useful if you want to load remote content safely (embed YouTube videos, which needs frame-src, for example). +# Default directive is self. +# Default config, allows for https remote images and embedding YouTube and Vimeo content. +# This configuration (along with the right webserver settings) gets an A+ in Mozilla's Observatory: https://observatory.mozilla.org +# Note: to use a Zola built-in syntax highlighting theme, allow unsafe-inline for style-src. +allowed_domains = [ + { directive = "font-src", domains = ["'self'", "data:"] }, + { directive = "img-src", domains = ["'self'", "https://*", "data:"] }, + { directive = "media-src", domains = ["'self'"] }, + { directive = "script-src", domains = ["'self'"] }, + { directive = "style-src", domains = ["'self'"] }, + { directive = "frame-src", domains = ["player.vimeo.com", "https://www.youtube-nocookie.com"] }, +] + +# Enable the CSP directives configured (or default). +# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy +enable_csp = true + +# Custom subset of characters for the header. +# If set to true, the `static/custom_subset.css` file will be loaded first. +# This avoids a flashing text issue in Firefox. +# Please see https://welpo.github.io/tabi/blog/custom-font-subset/ to learn how to create this file. +# custom_subset = true + +[extra.analytics] +# Specify which analytics service you want to use. +# Supported options: ["goatcounter", "umami", "plausible"] +# service = "" + +# Unique identifier for tracking. +# For GoatCounter, this is the code you choose during signup. +# For Umami, this is the website ID. +# For Plausible, this is the domain name (e.g. "example.com"). +# Note: Leave this field empty if you're self-hosting GoatCounter. +# id = "yourID" + +# Optional: Specify the URL for self-hosted analytics instances. +# For GoatCounter: Base URL like "https://stats.example.com" +# For Umami: Base URL like "https://umami.example.com" +# For Plausible: Base URL like "https://plausible.example.com" +# Leave this field empty if you're using the service's default hosting. +# self_hosted_url = "" + +# Optional: For Umami, enable this option to respect users' Do Not Track (DNT) settings. The default is true. +do_not_track = true + +# giscus support for comments. https://giscus.app +# Setup instructions: https://welpo.github.io/tabi/blog/comments/#setup +[extra.giscus] +# enabled_for_all_posts = false # Enables giscus on all posts. It can be enabled on individual posts by setting `giscus = true` in the [extra] section of a post's front matter. +# automatic_loading = true # If set to false, a "Load comments" button will be shown. +# repo = "welpo/tabi-comments" +# repo_id = "R_kgDOJ59Urw" # Find this value in https://giscus.app/ +# category = "Announcements" +# category_id = "DIC_kwDOJ59Ur84CX0QG" # Find this value in https://giscus.app/ +# mapping = "slug" # Available: pathname; url; title; slug. "slug" will use the post's filename (slug); this is the only way to share comments between languages. +# strict_title_matching = 1 # 1 to enable, 0 to disable. https://github.com/giscus/giscus/blob/main/ADVANCED-USAGE.md#data-strict +# enable_reactions = 1 # 1 to enable, 0 to disable. +# comment_box_above_comments = false +# light_theme = "noborder_light" +# dark_theme = "noborder_dark" +# lang = "" # Leave blank to match the page's language. +# lazy_loading = true + +# utterances support for comments. https://utteranc.es +# Setup instructions: https://welpo.github.io/tabi/blog/comments/#setup +[extra.utterances] +# enabled_for_all_posts = false # Enables utterances on all posts. It can be enabled on individual posts by setting `utterances = true` in the [extra] section of a post's front matter. +# automatic_loading = true # If set to false, a "Load comments" button will be shown. +# repo = "yourGithubUsername/yourRepo" # https://utteranc.es/#heading-repository +# issue_term = "slug" # Available: pathname; url; title; slug. "slug" will use the post's filename (slug); this is the only way to share comments between languages. https://utteranc.es/#heading-mapping +# label = "💬" # https://utteranc.es/#heading-issue-label +# light_theme = "github-light" # https://utteranc.es/#heading-theme +# dark_theme = "photon-dark" # https://utteranc.es/#heading-theme +# lazy_loading = true + +# Hyvor Talk support for comments. https://talk.hyvor.com +[extra.hyvortalk] +# enabled_for_all_posts = false # Enables hyvortalk on all posts. It can be enabled on individual posts by setting `hyvortalk = true` in the [extra] section of a post's front matter. +# automatic_loading = true # If set to false, a "Load comments" button will be shown. +# website_id = "1234" +# page_id_is_slug = true # If true, it will use the post's filename (slug) as id; this is the only way to share comments between languages. If false, it will use the entire url as id. +# lang = "" # Leave blank to match the page's language. +# page_author = "" # Email (or base64 encoded email) of the author. +# lazy_loading = true + +# Isso support for comments. https://isso-comments.de/ +# You need to self-host the backend first: https://blog.phusion.nl/2018/08/16/isso-simple-self-hosted-commenting-system/ +# More info on some settings: https://isso-comments.de/docs/reference/client-config/ +[extra.isso] +# enabled_for_all_posts = false # Enables Isso on all posts. It can be enabled on individual posts by setting `isso = true` in the [extra] section of a post's front matter. +# automatic_loading = true # If set to false, a "Load comments" button will be shown. +# endpoint_url = "" # Accepts relative paths like "/comments/" or "/isso/", as well as full urls like "https://example.com/comments/". Include the trailing slash. +# page_id_is_slug = true # If true, it will use the relative path for the default language as id; this is the only way to share comments between languages. If false, it will use the entire url as id. +# lang = "" # Leave blank to match the page's language. +# max_comments_top = "inf" # Number of top level comments to show by default. If some comments are not shown, an “X Hidden” link is shown. +# max_comments_nested = "5" # Number of nested comments to show by default. If some comments are not shown, an “X Hidden” link is shown. +# avatar = true +# voting = true +# page_author_hashes = "" # hash (or list of hashes) of the author. +# lazy_loading = true # Loads when the comments are in the viewport (using the Intersection Observer API). + +[extra.webmentions] +# To disable for a specific section or page, set webmentions = false in that page/section's front matter's [extra] section. +enable = false +# Specify the domain registered with webmention.io. +domain = "" + +# The HTML ID for the object to fill in with the webmention data. +# Defaults to "webmentions" +# id = "webmentions" + +# data configuration for the webmention.min.js script +# The base URL to use for this page. Defaults to window.location +# page_url = + +# Additional URLs to check, separated by |s +# add_urls + +# The maximum number of words to render in reply mentions. +# wordcount = 20 + +# The maximum number of mentions to retrieve. Defaults to 30. +# max_webmentions = 30 + +# By default, Webmentions render using the mf2 'url' element, which plays +# nicely with webmention bridges (such as brid.gy and telegraph) +# but allows certain spoofing attacks. If you would like to prevent +# spoofing, set this to a non-empty string (e.g. "true"). +# prevent_spoofing + +# What to order the responses by; defaults to 'published'. See +# https://github.com/aaronpk/webmention.io#api +# sort_by + +# The order to sort the responses by; defaults to 'up' (i.e. oldest +# first). See https://github.com/aaronpk/webmention.io#api +# sort_dir + +# If set to a non-empty string (e.g. "true"), will display comment-type responses +# (replies/mentions/etc.) as being part of the reactions +# (favorites/bookmarks/etc.) instead of in a separate comment list. +# comments_are_reactions = "true" + +# h-card configuration +# Will identify you on the indieweb (see https://microformats.org/wiki/h-card) +[extra.hcard] +# Enable home page h-card. +# enable = true +# Add your email to the card if extra.email is set and not encoded. +# with_mail = true +# Add your social links ('socials' config) to the card. +# with_social_links = true +# Homepage url. Defaults to the value of 'base_url'. +# homepage = "https://myhomepage.net" +# avatar = "img/profile.webp" +# Display name, default to the value of 'author'. +# full_name = "John Doe" +# Small bio, as shown on social media profiles. +# biography = "Fond of the indieweb" +# +# You can add any property from https://microformats.org/wiki/h-card#Properties +# Make sure to replace all '-' characters by '_' +# Examples: +# p_nickname = "nickname" +# p_locality = "Bordeaux" +# p_country_name = "France" diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..3c96769 --- /dev/null +++ b/content/_index.md @@ -0,0 +1,10 @@ ++++ +title = "Neues" + +[extra] +header = { title = "benji0x3c", img = "img/emp-cutout.png", img_alt = "YOUR_NAME" } +section_path = "blog/_index.md" +max_posts = 5 ++++ + +Willkommen auf meiner Webseite. Hier findet ihr meine Meinung zu vielen (technischen) Dingen. Außerdem Stelle ich meine Projekte vor. diff --git a/content/blog/_index.md b/content/blog/_index.md new file mode 100644 index 0000000..58ddcb9 --- /dev/null +++ b/content/blog/_index.md @@ -0,0 +1,6 @@ ++++ +title = "Blog" +sort_by = "date" +paginate_by = 5 +insert_anchor_links = "none" ++++ diff --git a/content/blog/revolution-oder-blase/1-datacenter.png b/content/blog/revolution-oder-blase/1-datacenter.png new file mode 100644 index 0000000..c154295 Binary files /dev/null and b/content/blog/revolution-oder-blase/1-datacenter.png differ diff --git a/content/blog/revolution-oder-blase/index.md b/content/blog/revolution-oder-blase/index.md new file mode 100644 index 0000000..b39dce4 --- /dev/null +++ b/content/blog/revolution-oder-blase/index.md @@ -0,0 +1,77 @@ ++++ +title = "Revolution oder Blase" +date = "2026-03-12" +description = "Was ich vom KI Hype halte" + +[taxonomies] +tags = ["ki","meinung"] ++++ +**Was ich vom KI Hype halte und warum ich nie OpenClaw benutzen würde** + +Künstliche Intelligenz ist das Kernthema der meisten Diskurse die momentan im IT Kosmos geführt werden. +Mir fällt auf, dass sich die meisten Talking Points unter zwei Erzählungen einordnen lassen: + +#### "Die jetzige KI ist nur Blendwerk" +Eine relativ große Gruppe, darunter viele Akademiker, scheinen sich vor allem auf die Probleme und Schwächen +der großen Sprachmodelle zu konzentrieren. Im Grunde ist dieser Ansatz wichtig, besonders da viele Benchmarks +und Metriken von der Industrie erstellt werden, die ihre Produkte damit testen will. Jedoch fällt mir auf, dass +es einigen Kritikern eher darum geht KI gesamthaft zu diskreditieren. Persönlich glaube ich, dass diese Reaktion +bei vielen Menschen mit Angst zu tun hat. Denn anzuerkennen, dass wir der Modellierung von Intelligenz +ein ganzes Stück näher gekommen sind, ist extrem besorgniserregend. + +Diese Sorge ist meiner Meinung nach aber leider keinesfalls irrational. In unserer Gesellschaft sind Maschinen, +die plötzlich eine deutlich größere Zahl an Aufgaben übernehmen können, eine Bedrohung für Arbeitnehmer. Hinzu +kommt die viel grundlegendere Frage ob eine Superintelligenz, also eine Intelligenz welche die Intelligenz des +klügsten Menschen bei weitem übersteigt, überhaupt erstrebenswert ist. Eines der meistzitierten Bücher zu KI, +*Superintelligence. Paths, Dangers, Strategies.* von Nick Bostrom, befasst sich auf mehreren hundert Seiten nur +mit den Fragen wie uns die Superintelligenz zugrunde richten kann und wie schwierig es sein wird sie zu kontrollieren. +Abgesehen davon, dass ich mit sehr vielen von Nick Bostrom grundsätzliche Probleme habe (Transhumanismus, Longtermismus etc.), +macht er in dem Buch durchaus gute Punkte. Die KI muss uns nichtmal feindlich gesinnt sein, damit ihre Existenz für den +Menschen zur Katastrophe werden kann. Wir sind den anderen Tieren auf diesem Planeten auch nicht feindlich gesinnt, +dennoch werden sie durch unsere Handeln massiv in Mitleidenschaft gezogen. Diese Dominanz entsteht nur durch den +Intelligenz-Gap zwischen uns und den Tieren, von denen uns viele ja sogar physisch Überlegen sind. + +All das illustriert nur, dass die Bedenken gegenüber KI mehr als berechtigt sind. Diese ändern jedoch nichts am Fakt, +dass auch aktuelle Sprachsysteme beeindruckende und nützliche Fähigkeiten haben, die über reines Googlen hinausgehen. +Das heißt aber nicht, dass die Superintelligenz bereits unter uns ist. +#### "Die Revolution ist da" +Der andere Standpunkt zu den aktuellen Entwicklungen im Feld der KI ist deutlich optimistischer. Zu optimistisch für +meinen Geschmack. Alles ist jetzt KI oder KI-Assisted, für jede Aufgabe gibt es einen Agent und KI-Startupgründer +unterbieten sich mit Prognosen für das Aussterben diverser Berufszweige. LLMs sind sehr praktisch und nützlich aber +haben immer noch sehr starke Limitierungen. Momentan kann niemand wirklich prognostizieren, ob Sprachmodelle irgendwann +an eine gläserne Decke prallen werden. Denn aktuell passieren Verbesserungen vor allem durch Skalierung, also mehr Daten +mehr Hardware, mehr Daten, mehr Hardware etc. + +Die Auswirkungen auf die Umwelt sind natürlich absolut Katastrophal. Abgesehen +vom absurden Wasserverbrauch sind die riesigen Sprachmodelle extrem energieintensiv. Bei den Hyperscalern (Google, Amazon, Meta) +die sich vor kurzem noch auf C0² Neutralität committed haben, sieht die Welt durch den KI Hype mittlerweile ganz anders aus: +* **Google** Steigerung von 48% der Treibhausgas-Emissionen in 2018-2023 +* **Microsoft** Steigerung von 29% der Treibhausgas-Emissionen in 2020-2023 +* **Meta** Steigerung von 49% der Treibhausgas-Emissionen nur in 2022 + +![Meta Datacenter](1-datacenter.png) +Meta plant den Bau eines Datacenters so groß wie Manhattan, ausschließlich im die eigene KI Infrastruktur zu verbessern. +Auch wenn sich beim Befragen von KI Modellen einiges optimieren lässt +(Stichwort: Speculative Decoding, Early Exciting etc.), ist aus einer ökologischen sicht sehr davon abzuraten die Anzahl der KI Anfragen insgesamt zu steigern. +Genau das würde allerdings bei einer breiten Einbindung von Sprachmodellen in Arbeitsprozesse passieren. + +Dabei sind, und das ist mir hier noch einmal wichtig zu betonen, diese Modelle nicht im klassischen Sinne intelligent. Sie erzeugen +einfach eine Reihe von Sprachbausteinen(tokens) und wählen jeweils den nächst wahrscheinlichen Sprachbaustein (extrem vereinfacht). +Dabei wird auf Plausibilität optimiert, nicht auf Korrektheit, weshalb es zu den bekannten Halluzinationen kommt. Diese Fehler sind +in der Praxis sehr gefährlich, weil sie plausibel aussehen und nur von Menschen mit Fachkenntnis im betroffenen Themengebiet enttarnt +werden können. Woher soll der durchschnittliche Patient wissen, dass ihm der Gesundheits-Chatbot soeben eine tödliche Dosis eines +Medikamentes verschrieben hat. KI Modelle, modellieren Wahrscheinlichkeiten, auf eine sehr komplexe, einzigartige Weise, aber dennoch +arbeiten sie auf Basis von Stochastik. Hier besteht natürlich eine extreme Gefahr für diverse Formen von Bias. Die KI ist mit Daten aus +unserer Gesellschaft trainiert worden und wird somit all ihre diskriminierenden Defizite übernehmen. Hinzu kommt, dass die Modelle von +Tech Bros mit fragwürdigen bis problematischen ideologischen Hintergründen kontrolliert werden. Zu diesem Thema kann ich das Büchlein +*Künstliche Intelligenz und der neue Faschismus* von Rainer Mühlhoff empfehlen. + +### Fazit +Die Künstliche Intelligenz in ihrer aktuell verbreitetsten Form extrem nützlich, aber noch weit von einer Superintelligenz entfernt. +Diese Nützlichkeit kommt jedoch zu einem sehr hohen ökologischen Preis und könnte bisher ungeahnte Folgen auf die Kognition der Menschen haben, +die ihre regelmäßig Aufgaben übertragen. Ich glaube die KI Revolution ist noch nicht gekommen, aber wir haben einen kleinen Vorgeschmack bekommen, +wie disruptiv diese Revolution sein könnte. Die Technologie wird zugleich unter- und überschätzt und beide Lager haben ihre Gründe für ihre Standpunkte, +aber die eigentlich zentrale Frage bleibt: wer entscheidet darüber wie diese Modelle eingesetzt werden. Ich finde es falsch, dass private Unternehmen +mit Profitinteressen entscheiden wie diese Modelle umgesetzt und eingesetzt werden. Das abgebildete Wissen in den Modellen wurde von der gesamten Gesellschaft +produziert, weshalb ihr meiner Meinung ein Mitspracherecht zusteht. Außerdem ist die Technologie existenziell zu relevant, +um sie in die Obhut von ein paar Silicon Valley "Strategen" zu geben. diff --git a/content/projects/_index.md b/content/projects/_index.md new file mode 100644 index 0000000..569d16f --- /dev/null +++ b/content/projects/_index.md @@ -0,0 +1,9 @@ ++++ +title = "Projekte" +sort_by = "weight" +template = "cards.html" +insert_anchor_links = "left" + +[extra] +show_reading_time = false ++++ diff --git a/content/projects/cool_project.md b/content/projects/cool_project.md new file mode 100644 index 0000000..48a41d1 --- /dev/null +++ b/content/projects/cool_project.md @@ -0,0 +1,47 @@ ++++ +title = "Self-Hosting" +description = "Meine kleine aber feine Infrastruktur" +weight = 1 +template = "page.html" + +[taxonomies] +tags = ["meta"] + +[extra] +local_image = "img/Raspberry_Pi_Logo.svg" ++++ + + + + +#### [View Source](https://github.com/welpo/tabi-start){.centered-text} + +## Features showcase + +Here's what you can do with project pages: + +- Add project descriptions +- Include code snippets +- Tag your projects +- Add images and media +- Link to external resources + +## Sample Code + +Here's a simple "Hello, World!" in different languages: + +```python +print("Hello, World!") +``` + +```javascript +console.log("Hello, World!"); +``` + +```rust +fn main() { + println!("Hello, World!"); +} +``` + +Feel free to delete this demo project when you're ready to add your own! diff --git a/static/giallo.css b/static/giallo.css new file mode 100644 index 0000000..e668d21 --- /dev/null +++ b/static/giallo.css @@ -0,0 +1,395 @@ +/* + * theme "catppuccin-frappe" generated by giallo + */ + +.z-code { + color: #C6D0F5; + background-color: #303446; +} + +.z-hl { + background-color: #C6D0F512; +} + +.giallo-ln { + color: #838BA7; +} + +.z-text { color: #C6D0F5; } +.z-source { color: #C6D0F5; } +.z-punctuation { color: #949CBB; } +.z-comment { color: #949CBB; font-style: italic; } +.z-string { color: #A6D189; } +.z-keyword { color: #CA9EE6; } +.z-variable { color: #C6D0F5; } +.z-variable { color: #C6D0F5; } +.z-punctuation { color: #E78284; } +.z-punctuation { color: #E78284; } +.z-punctuation { color: #E78284; } +.z-punctuation { color: #E5C890; font-style: italic; } +.z-variable { color: #EA999C; } +.z-variable { color: #8CAAEE; } +.z-punctuation { color: #E78284; } +.z-constant.z-numeric { color: #EF9F76; } +.z-storage.z-type { color: #CA9EE6; } +.z-storage.z-modifier { color: #CA9EE6; } +.z-keyword.z-operator { color: #81C8BE; } +.z-punctuation.z-accessor { color: #81C8BE; } +.z-support.z-function { color: #8CAAEE; font-style: italic; } +.z-variable.z-function { color: #8CAAEE; font-style: italic; } +.z-support.z-class { color: #E5C890; font-style: italic; } +.z-meta.z-type { color: #E5C890; font-style: italic; } +.z-meta.z-type-alias { color: #E5C890; font-style: italic; } +.z-support.z-type { color: #E5C890; font-style: italic; } +.z-meta.z-decorator { color: #EF9F76; } +.z-punctuation.z-decorator { color: #EF9F76; } +.z-variable.z-parameter { color: #EA999C; font-style: italic; } +.z-constant.z-language { color: #E78284; } +.z-variable.z-graphql { color: #C6D0F5; } +.z-markup.z-bold { color: #E78284; font-weight: bold; } +.z-markup.z-italic { color: #E78284; font-style: italic; } +.z-markup.z-strikethrough { color: #A5ADCE; text-decoration: line-through; } +.z-markup.z-link { color: #BABBF1; } +.z-markup.z-quote { color: #F4B8E4; } +.z-variable.z-function { color: #EF9F76; } +.z-meta.z-attribute-selector { color: #A6D189; } +.z-variable.z-other { color: #EA999C; } +.z-variable.z-lua { color: #C6D0F5; } +.z-punctuation.z-definition { color: #949CBB; } +.z-support.z-asciidoc { color: #949CBB; } +.z-support.z-function { color: #99D1DB; } +.z-constant.z-language { color: #81C8BE; font-style: italic; } +.z-variable.z-other.z-readwrite { color: #C6D0F5; } +.z-punctuation.z-definition.z-variable { color: #C6D0F5; } +.z-punctuation.z-definition.z-comment { color: #949CBB; font-style: italic; } +.z-punctuation.z-definition.z-string { color: #A6D189; } +.z-constant.z-character.z-escape { color: #F4B8E4; } +.z-variable.z-other.z-constant { color: #EF9F76; } +.z-entity.z-name.z-constant { color: #EF9F76; } +.z-constant.z-language.z-boolean { color: #EF9F76; } +.z-constant.z-language.z-false { color: #EF9F76; } +.z-constant.z-language.z-true { color: #EF9F76; } +.z-keyword.z-operator.z-word { color: #CA9EE6; } +.z-keyword.z-operator.z-new { color: #CA9EE6; } +.z-variable.z-language.z-super { color: #CA9EE6; } +.z-support.z-type.z-primitive { color: #CA9EE6; } +.z-punctuation.z-definition.z-keyword { color: #CA9EE6; } +.z-punctuation.z-definition.z-generic { color: #81C8BE; } +.z-punctuation.z-definition.z-tag { color: #81C8BE; } +.z-punctuation.z-separator.z-key-value { color: #81C8BE; } +.z-entity.z-name.z-function { color: #8CAAEE; font-style: italic; } +.z-meta.z-function-call.z-method { color: #8CAAEE; font-style: italic; } +.z-support.z-function.z-misc { color: #8CAAEE; font-style: italic; } +.z-entity.z-name.z-class { color: #E5C890; font-style: italic; } +.z-entity.z-other.z-inherited-class { color: #E5C890; font-style: italic; } +.z-meta.z-function-call.z-constructor { color: #E5C890; font-style: italic; } +.z-entity.z-name.z-struct { color: #E5C890; font-style: italic; } +.z-entity.z-name.z-enum { color: #E5C890; font-style: italic; } +.z-variable.z-other.z-enummember { color: #81C8BE; } +.z-meta.z-property.z-object { color: #81C8BE; } +.z-entity.z-name.z-type { color: #E5C890; font-style: italic; } +.z-meta.z-function.z-parameters { color: #EA999C; font-style: italic; } +.z-support.z-function.z-builtin { color: #E78284; } +.z-keyword.z-control.z-directive { color: #E5C890; } +.z-punctuation.z-definition.z-directive { color: #E5C890; } +.z-punctuation.z-definition.z-typeparameters { color: #99D1DB; } +.z-entity.z-name.z-namespace { color: #E5C890; } +.z-variable.z-language.z-this { color: #E78284; } +.z-variable.z-object.z-property { color: #C6D0F5; } +.z-keyword.z-operator.z-new { font-weight: bold; } +.z-meta.z-interpolation.z-cs { color: #C6D0F5; } +.z-constant.z-language.z-json { color: #EF9F76; } +.z-constant.z-language.z-yaml { color: #EF9F76; } +.z-markup.z-changed.z-diff { color: #EF9F76; } +.z-markup.z-inserted.z-diff { color: #A6D189; } +.z-markup.z-deleted.z-diff { color: #E78284; } +.z-variable.z-other.z-env { color: #8CAAEE; } +.z-constant.z-language.z-gdscript { color: #EF9F76; } +.z-constant.z-language.z-go { color: #EF9F76; } +.z-keyword.z-other.z-doctype { color: #CA9EE6; } +.z-entity.z-name.z-tag { color: #8CAAEE; } +.z-entity.z-other.z-attribute-name { color: #E5C890; } +.z-support.z-class.z-component { color: #F4B8E4; } +.z-punctuation.z-definition.z-annotation { color: #EF9F76; } +.z-storage.z-type.z-annotation { color: #EF9F76; } +.z-variable.z-other.z-jsdoc { color: #EA999C; } +.z-support.z-constant.z-node { color: #CA9EE6; } +.z-storage.z-modifier.z-implements { color: #CA9EE6; } +.z-variable.z-parameter.z-generic { color: #E5C890; } +.z-punctuation.z-decorator.z-ts { color: #8CAAEE; font-style: italic; } +.z-constant.z-language.z-julia { color: #EF9F76; } +.z-variable.z-language.z-liquid { color: #F4B8E4; } +.z-heading.z-\31 .z-markdown { color: #E78284; } +.z-heading.z-\31 .z-quarto { color: #E78284; } +.z-heading.z-\32 .z-markdown { color: #EF9F76; } +.z-heading.z-\32 .z-quarto { color: #EF9F76; } +.z-heading.z-\33 .z-markdown { color: #E5C890; } +.z-heading.z-\33 .z-quarto { color: #E5C890; } +.z-heading.z-\34 .z-markdown { color: #A6D189; } +.z-heading.z-\34 .z-quarto { color: #A6D189; } +.z-heading.z-\35 .z-markdown { color: #85C1DC; } +.z-heading.z-\35 .z-quarto { color: #85C1DC; } +.z-heading.z-\36 .z-markdown { color: #BABBF1; } +.z-heading.z-\36 .z-quarto { color: #BABBF1; } +.z-punctuation.z-definition.z-link { color: #8CAAEE; } +.z-markup.z-underline.z-link { color: #8CAAEE; } +.z-markup.z-substitution.z-attribute-reference { color: #BABBF1; } +.z-fenced_code.z-block.z-language { color: #99D1DB; } +.z-meta.z-separator.z-markdown { color: #81C8BE; } +.z-markup.z-list.z-bullet { color: #81C8BE; } +.z-markup.z-heading.z-quarto { font-weight: bold; } +.z-support.z-attribute.z-builtin { color: #E5C890; } +.z-meta.z-attribute.z-php { color: #E5C890; } +.z-constant.z-language.z-php { color: #CA9EE6; } +.z-meta.z-function-call.z-python { color: #8CAAEE; } +.z-support.z-type.z-python { color: #CA9EE6; } +.z-constant.z-language.z-python { color: #EF9F76; } +.z-meta.z-indexed-name.z-python { color: #EA999C; font-style: italic; } +.z-meta.z-item-access.z-python { color: #EA999C; font-style: italic; } +.z-meta.z-function-call.z-r { color: #8CAAEE; } +.z-string.z-regexp.z-ts { color: #C6D0F5; } +.z-meta.z-annotation.z-rust { color: #E5C890; font-style: italic; } +.z-meta.z-attribute.z-rust { color: #E5C890; font-style: italic; } +.z-storage.z-modifier.z-rust { color: #CA9EE6; } +.z-storage.z-type.z-rust { color: #CA9EE6; } +.z-meta.z-generic.z-rust { color: #EF9F76; } +.z-support.z-macro.z-rust { color: #8CAAEE; font-style: italic; } +.z-comment.z-line.z-shebang { color: #F4B8E4; font-style: italic; } +.z-comment.z-line.z-shebang { color: #F4B8E4; font-style: italic; } +.z-meta.z-shebang.z-shell { color: #F4B8E4; font-style: italic; } +.z-markup.z-heading.z-typst { color: #E78284; } +.z-punctuation.z-section.z-parameters { color: #81C8BE; } +.z-variable.z-other.z-readwrite { color: #81C8BE; } +.z-variable.z-annotation.z-function { color: #EF9F76; } +.z-punctuation.z-definition.z-annotation { color: #EF9F76; } +.z-punctuation.z-definition.z-variable { color: #E78284; } +.z-constant.z-other.z-unicode-range { color: #EF9F76; } +.z-variable.z-parameter.z-url { color: #A6D189; } +.z-variable.z-other.z-less { color: #8CAAEE; } +.z-variable.z-other.z-env { color: #C6D0F5; } +.z-meta.z-annotation.z-go { color: #EA999C; } +.z-punctuation.z-definition.z-tag { color: #CA9EE6; } +.z-entity.z-name.z-tag { color: #CA9EE6; } +.z-punctuation.z-definition.z-tag { color: #CA9EE6; } +.z-constant.z-character.z-entity { color: #E78284; } +.z-keyword.z-control.z-preamble { color: #81C8BE; } +.z-support.z-function.z-be { color: #99D1DB; } +.z-support.z-function.z-rust { color: #8CAAEE; font-style: italic; } +.z-variable.z-other.z-rust { color: #EA999C; } +.z-variable.z-other.z-rust { color: #C6D0F5; } +.z-punctuation.z-definition.z-comment { color: #F4B8E4; font-style: italic; } +.z-punctuation.z-section.z-interpolation { color: #E78284; } +.z-punctuation.z-section.z-interpolation { color: #E78284; } +.z-punctuation.z-section.z-interpolation { color: #81C8BE; } +.z-variable.z-other.z-less { color: #EA999C; } +.z-string.z-unquoted.z-graphql { color: #EEBEBE; } +.z-storage.z-type.z-rust { color: #C6D0F5; } +.z-variable.z-other.z-readwrite { color: #EF9F76; font-style: italic; } +.z-keyword.z-other.z-unit.z-user-defined { color: #EF9F76; } +.z-entity.z-name.z-tag.z-documentation { color: #CA9EE6; } +.z-entity.z-other.z-attribute-name.z-documentation { color: #E78284; } +.z-support.z-type.z-property-name.z-css { color: #8CAAEE; } +.z-support.z-type.z-property-name.z-less { color: #8CAAEE; } +.z-entity.z-name.z-scope-resolution.z-cpp { color: #E5C890; } +.z-storage.z-type.z-class.z-doxygen { } +.z-storage.z-modifier.z-reference.z-cpp { color: #81C8BE; } +.z-comment.z-block.z-documentation.z-cs { color: #C6D0F5; } +.z-punctuation.z-separator.z-operator.z-css { color: #81C8BE; } +.z-support.z-type.z-vendored.z-property-name { color: #99D1DB; } +.z-meta.z-definition.z-variable.z-scss { color: #EA999C; } +.z-keyword.z-other.z-definition.z-ini { color: #8CAAEE; } +.z-support.z-type.z-property-name.z-json { color: #8CAAEE; } +.z-support.z-type.z-property-name.z-toml { color: #8CAAEE; } +.z-entity.z-name.z-tag.z-yaml { color: #8CAAEE; } +.z-support.z-type.z-property-name.z-yaml { color: #8CAAEE; } +.z-variable.z-other.z-alias.z-yaml { color: #E5C890; } +.z-support.z-type.z-property-name.z-table { color: #E5C890; } +.z-punctuation.z-definition.z-anchor.z-yaml { color: #F4B8E4; } +.z-punctuation.z-definition.z-alias.z-yaml { color: #F4B8E4; } +.z-meta.z-diff.z-header.z-from-file { color: #8CAAEE; } +.z-meta.z-diff.z-header.z-to-file { color: #8CAAEE; } +.z-punctuation.z-definition.z-from-file.z-diff { color: #8CAAEE; } +.z-punctuation.z-definition.z-to-file.z-diff { color: #8CAAEE; } +.z-support.z-function.z-builtin.z-gdscript { color: #8CAAEE; } +.z-string.z-unquoted.z-alias.z-graphql { color: #EEBEBE; } +.z-constant.z-character.z-enum.z-graphql { color: #81C8BE; } +.z-constant.z-character.z-entity.z-xml { color: #E78284; } +.z-constant.z-character.z-entity.z-tsx { color: #E78284; } +.z-support.z-class.z-component.z-jsx { color: #F4B8E4; } +.z-support.z-class.z-component.z-tsx { color: #F4B8E4; } +.z-support.z-class.z-component.z-vue { color: #F4B8E4; } +.z-constant.z-other.z-enum.z-java { color: #81C8BE; } +.z-storage.z-modifier.z-import.z-java { color: #C6D0F5; } +.z-variable.z-other.z-constant.z-js { color: #C6D0F5; } +.z-variable.z-other.z-constant.z-ts { color: #C6D0F5; } +.z-variable.z-other.z-property.z-js { color: #C6D0F5; } +.z-variable.z-other.z-property.z-ts { color: #C6D0F5; } +.z-storage.z-type.z-class.z-jsdoc { } +.z-constant.z-language.z-null.z-js { color: #CA9EE6; } +.z-constant.z-language.z-null.z-ts { color: #CA9EE6; } +.z-constant.z-language.z-undefined.z-js { color: #CA9EE6; } +.z-constant.z-language.z-undefined.z-ts { color: #CA9EE6; } +.z-support.z-type.z-builtin.z-ts { color: #CA9EE6; } +.z-keyword.z-operator.z-expression.z-is { color: #CA9EE6; } +.z-support.z-function.z-macro.z-julia { color: #81C8BE; font-style: italic; } +.z-constant.z-other.z-symbol.z-julia { color: #EA999C; } +.z-markup.z-heading.z-heading-0.z-asciidoc { color: #E78284; } +.z-markup.z-heading.z-heading-1.z-asciidoc { color: #EF9F76; } +.z-markup.z-heading.z-heading-2.z-asciidoc { color: #E5C890; } +.z-markup.z-heading.z-heading-3.z-asciidoc { color: #A6D189; } +.z-markup.z-heading.z-heading-4.z-asciidoc { color: #85C1DC; } +.z-markup.z-heading.z-heading-5.z-asciidoc { color: #BABBF1; } +.z-punctuation.z-definition.z-constant.z-markdown { color: #BABBF1; } +.z-punctuation.z-definition.z-constant.z-quarto { color: #BABBF1; } +.z-punctuation.z-definition.z-raw.z-markdown { color: #A6D189; } +.z-punctuation.z-definition.z-raw.z-quarto { color: #A6D189; } +.z-markup.z-raw.z-block.z-markdown { color: #A6D189; } +.z-markup.z-raw.z-block.z-quarto { color: #A6D189; } +.z-punctuation.z-definition.z-quote.z-begin { color: #F4B8E4; } +.z-variable.z-parameter.z-name.z-nix { color: #C6D0F5; } +.z-string.z-unquoted.z-path.z-nix { color: #F4B8E4; } +.z-keyword.z-other.z-phpdoc.z-php { } +.z-support.z-variable.z-magic.z-python { color: #C6D0F5; } +.z-meta.z-function-call.z-arguments.z-python { color: #C6D0F5; } +.z-support.z-function.z-magic.z-python { color: #99D1DB; font-style: italic; } +.z-keyword.z-control.z-flow.z-python { color: #CA9EE6; } +.z-keyword.z-operator.z-logical.z-python { color: #CA9EE6; } +.z-storage.z-type.z-function.z-python { color: #CA9EE6; } +.z-support.z-token.z-decorator.z-python { color: #99D1DB; } +.z-punctuation.z-definition.z-decorator.z-python { color: #EF9F76; font-style: italic; } +.z-support.z-type.z-exception.z-python { color: #EF9F76; } +.z-support.z-function.z-builtin.z-python { color: #EF9F76; } +.z-storage.z-type.z-string.z-python { color: #A6D189; font-style: italic; } +.z-meta.z-function.z-parameters.z-python { } +.z-meta.z-function-call.z-arguments.z-r { color: #C6D0F5; } +.z-keyword.z-control.z-anchor.z-regexp { color: #CA9EE6; } +.z-punctuation.z-definition.z-group.z-regexp { color: #A6D189; } +.z-keyword.z-other.z-back-reference.z-regexp { color: #A6D189; } +.z-punctuation.z-definition.z-character-class.z-regexp { color: #E5C890; } +.z-constant.z-other.z-character-class.z-regexp { color: #F4B8E4; } +.z-keyword.z-operator.z-quantifier.z-regexp { color: #81C8BE; } +.z-constant.z-character.z-numeric.z-regexp { color: #EF9F76; } +.z-meta.z-assertion.z-look-ahead.z-regexp { color: #8CAAEE; } +.z-meta.z-assertion.z-negative-look-ahead.z-regexp { color: #8CAAEE; } +.z-punctuation.z-definition.z-attribute.z-rust { color: #E5C890; font-style: italic; } +.z-storage.z-type.z-module.z-rust { color: #CA9EE6; } +.z-storage.z-type.z-struct.z-rust { color: #CA9EE6; } +.z-storage.z-type.z-enum.z-rust { color: #CA9EE6; } +.z-storage.z-type.z-trait.z-rust { color: #CA9EE6; } +.z-storage.z-type.z-union.z-rust { color: #CA9EE6; } +.z-storage.z-type.z-impl.z-rust { color: #CA9EE6; } +.z-storage.z-type.z-function.z-rust { color: #CA9EE6; } +.z-storage.z-type.z-type.z-rust { color: #CA9EE6; } +.z-entity.z-name.z-impl.z-rust { color: #E5C890; font-style: italic; } +.z-entity.z-name.z-module.z-rust { color: #EF9F76; } +.z-entity.z-name.z-trait.z-rust { color: #E5C890; font-style: italic; } +.z-storage.z-type.z-source.z-rust { color: #E5C890; } +.z-entity.z-name.z-union.z-rust { color: #E5C890; } +.z-storage.z-modifier.z-lifetime.z-rust { color: #8CAAEE; font-style: italic; } +.z-entity.z-name.z-type.z-lifetime { color: #8CAAEE; font-style: italic; } +.z-meta.z-function.z-call.z-rust { color: #8CAAEE; } +.z-punctuation.z-brackets.z-angle.z-rust { color: #99D1DB; } +.z-constant.z-other.z-caps.z-rust { color: #EF9F76; } +.z-variable.z-language.z-self.z-rust { color: #E78284; } +.z-punctuation.z-definition.z-entity.z-css { color: #E5C890; } +.z-entity.z-other.z-attribute-name.z-pseudo-class { color: #81C8BE; } +.z-meta.z-annotation.z-parameters.z-go { color: #EF9F76; } +.z-variable.z-other.z-readwrite.z-js { color: #EA999C; } +.z-storage.z-type.z-annotation.z-lua { color: #CA9EE6; } +.z-entity.z-name.z-variable.z-lua { color: #C6D0F5; } +.z-punctuation.z-definition.z-heading.z-markdown { color: #E78284; } +.z-punctuation.z-definition.z-heading.z-quarto { color: #E78284; } +.z-punctuation.z-definition.z-heading.z-mdx { color: #E78284; } +.z-punctuation.z-definition.z-heading.z-markdown { color: #EF9F76; } +.z-punctuation.z-definition.z-heading.z-quarto { color: #EF9F76; } +.z-punctuation.z-definition.z-heading.z-mdx { color: #EF9F76; } +.z-punctuation.z-definition.z-heading.z-markdown { color: #E5C890; } +.z-punctuation.z-definition.z-heading.z-quarto { color: #E5C890; } +.z-punctuation.z-definition.z-heading.z-mdx { color: #E5C890; } +.z-punctuation.z-definition.z-heading.z-markdown { color: #A6D189; } +.z-punctuation.z-definition.z-heading.z-quarto { color: #A6D189; } +.z-punctuation.z-definition.z-heading.z-mdx { color: #A6D189; } +.z-punctuation.z-definition.z-heading.z-markdown { color: #85C1DC; } +.z-punctuation.z-definition.z-heading.z-quarto { color: #85C1DC; } +.z-punctuation.z-definition.z-heading.z-mdx { color: #85C1DC; } +.z-punctuation.z-definition.z-heading.z-markdown { color: #BABBF1; } +.z-punctuation.z-definition.z-heading.z-quarto { color: #BABBF1; } +.z-punctuation.z-definition.z-heading.z-mdx { color: #BABBF1; } +.z-punctuation.z-definition.z-link.z-title { color: #BABBF1; } +.z-punctuation.z-definition.z-link.z-title { color: #BABBF1; } +.z-variable.z-parameter.z-name.z-nix { color: #BABBF1; } +.z-punctuation.z-definition.z-variable.z-php { color: #EA999C; } +.z-punctuation.z-definition.z-string.z-begin { color: #F4B8E4; } +.z-punctuation.z-definition.z-string.z-end { color: #F4B8E4; } +.z-string.z-quoted.z-double.z-rust { } +.z-storage.z-type.z-source.z-rust { color: #81C8BE; } +.z-constant.z-other.z-placeholder.z-rust { color: #F4B8E4; } +.z-punctuation.z-definition.z-variable.z-shell { color: #E78284; } +.z-punctuation.z-definition.z-variable.z-shell { color: #E78284; } +.z-variable.z-other.z-normal.z-shell { color: #C6D0F5; } +.z-punctuation.z-definition.z-variable.z-less { color: #8CAAEE; } +.z-punctuation.z-definition.z-variable.z-less { color: #EA999C; } +.z-keyword.z-other.z-unit.z-suffix.z-floating-point { color: #EF9F76; } +.z-storage.z-modifier.z-specifier.z-extern.z-cpp { color: #CA9EE6; } +.z-entity.z-name.z-scope-resolution.z-parameter.z-cpp { color: #E5C890; } +.z-keyword.z-other.z-unit.z-percentage.z-css { color: #EF9F76; } +.z-punctuation.z-support.z-type.z-property-name.z-json { color: #8CAAEE; } +.z-punctuation.z-support.z-type.z-property-name.z-toml { color: #8CAAEE; } +.z-punctuation.z-support.z-type.z-property-name.z-yaml { color: #8CAAEE; } +.z-entity.z-name.z-type.z-anchor.z-yaml { color: #E5C890; } +.z-entity.z-name.z-section.z-group-title.z-ini { color: #E5C890; } +.z-entity.z-other.z-document.z-begin.z-yaml { color: #F4B8E4; } +.z-constant.z-character.z-entity.z-js.z-jsx { color: #E78284; } +.z-support.z-type.z-object.z-console.z-js { color: #C6D0F5; } +.z-support.z-type.z-object.z-module.z-js { color: #CA9EE6; } +.z-keyword.z-declaration.z-function.z-arrow.z-js { color: #81C8BE; } +.z-storage.z-type.z-function.z-arrow.z-ts { color: #81C8BE; } +.z-keyword.z-operator.z-expression.z-in.z-js { color: #CA9EE6; } +.z-keyword.z-operator.z-expression.z-in.z-ts { color: #CA9EE6; } +.z-keyword.z-operator.z-expression.z-infer.z-ts { color: #CA9EE6; } +.z-keyword.z-operator.z-expression.z-instanceof.z-js { color: #CA9EE6; } +.z-keyword.z-operator.z-expression.z-instanceof.z-ts { color: #CA9EE6; } +.z-keyword.z-operator.z-expression.z-keyof.z-ts { color: #CA9EE6; } +.z-keyword.z-operator.z-expression.z-of.z-js { color: #CA9EE6; } +.z-keyword.z-operator.z-expression.z-of.z-ts { color: #CA9EE6; } +.z-keyword.z-operator.z-expression.z-typeof.z-ts { color: #CA9EE6; } +.z-constant.z-other.z-general.z-math.z-tex { color: #EEBEBE; } +.z-markup.z-heading.z-atx.z-\31 .z-mdx { color: #E78284; } +.z-markup.z-heading.z-setext.z-\31 .z-markdown { color: #E78284; } +.z-markup.z-heading.z-atx.z-\32 .z-mdx { color: #EF9F76; } +.z-markup.z-heading.z-setext.z-\32 .z-markdown { color: #EF9F76; } +.z-markup.z-heading.z-atx.z-\33 .z-mdx { color: #E5C890; } +.z-markup.z-heading.z-atx.z-\34 .z-mdx { color: #A6D189; } +.z-markup.z-heading.z-atx.z-\35 .z-mdx { color: #85C1DC; } +.z-markup.z-heading.z-atx.z-\36 .z-mdx { color: #BABBF1; } +.z-string.z-other.z-link.z-title.z-markdown { color: #BABBF1; } +.z-string.z-other.z-link.z-title.z-quarto { color: #BABBF1; } +.z-constant.z-other.z-reference.z-link.z-markdown { color: #BABBF1; } +.z-constant.z-other.z-reference.z-link.z-quarto { color: #BABBF1; } +.z-markup.z-inline.z-raw.z-string.z-markdown { color: #A6D189; } +.z-markup.z-inline.z-raw.z-string.z-quarto { color: #A6D189; } +.z-punctuation.z-definition.z-list.z-begin.z-markdown { color: #81C8BE; } +.z-punctuation.z-definition.z-list.z-begin.z-quarto { color: #81C8BE; } +.z-entity.z-other.z-attribute-name.z-multipart.z-nix { color: #8CAAEE; } +.z-entity.z-other.z-attribute-name.z-single.z-nix { color: #8CAAEE; } +.z-variable.z-language.z-special.z-self.z-python { color: #E78284; font-style: italic; } +.z-meta.z-function.z-decorator.z-identifier.z-python { color: #99D1DB; } +.z-entity.z-name.z-function.z-decorator.z-python { color: #EF9F76; font-style: italic; } +.z-constant.z-other.z-character-class.z-range.z-regexp { color: #F2D5CF; } +.z-punctuation.z-definition.z-group.z-no-capture.z-regexp { color: #8CAAEE; } +.z-entity.z-name.z-type.z-numeric.z-rust { color: #CA9EE6; } +.z-entity.z-name.z-function.z-macro.z-rust { color: #8CAAEE; font-style: italic; } +.z-variable.z-other.z-metavariable.z-name.z-rust { color: #F4B8E4; } +.z-punctuation.z-definition.z-comment.z-shebang.z-shell { color: #F4B8E4; font-style: italic; } +.z-punctuation.z-definition.z-evaluation.z-backticks.z-shell { color: #81C8BE; } +.z-entity.z-name.z-tag.z-heredoc.z-shell { color: #CA9EE6; } +.z-entity.z-other.z-attribute-name.z-class.z-css { color: #E5C890; } +.z-keyword.z-other.z-documentation.z-javadoc.z-java { } +.z-string.z-quoted.z-single.z-char.z-rust { } +.z-keyword.z-operator.z-macro.z-dollar.z-rust { color: #F4B8E4; } +.z-entity.z-name.z-scope-resolution.z-template.z-call.z-cpp { color: #E5C890; } +.z-entity.z-name.z-scope-resolution.z-function.z-definition.z-cpp { color: #E5C890; } +.z-constant.z-other.z-time.z-datetime.z-offset.z-toml { color: #F4B8E4; } +.z-constant.z-character.z-format.z-placeholder.z-other.z-python { color: #F4B8E4; } +.z-entity.z-name.z-function.z-macro.z-rules.z-rust { color: #CA9EE6; } +.z-variable.z-parameter.z-function.z-language.z-special.z-self.z-python { color: #E78284; font-style: italic; } diff --git a/static/img/Raspberry_Pi_Logo.svg b/static/img/Raspberry_Pi_Logo.svg new file mode 100644 index 0000000..27192be --- /dev/null +++ b/static/img/Raspberry_Pi_Logo.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/static/img/emp-cutout.png b/static/img/emp-cutout.png new file mode 100644 index 0000000..e2d0097 Binary files /dev/null and b/static/img/emp-cutout.png differ diff --git a/static/img/profile.webp b/static/img/profile.webp new file mode 100644 index 0000000..174ec87 Binary files /dev/null and b/static/img/profile.webp differ diff --git a/themes/tabi b/themes/tabi new file mode 160000 index 0000000..0a48c52 --- /dev/null +++ b/themes/tabi @@ -0,0 +1 @@ +Subproject commit 0a48c52770d7440467811b56cf31b95198aab253