added articles

other improvements
This commit is contained in:
Samuel Philipp 2023-01-12 22:33:15 +01:00
parent c77c028404
commit 29f93a9e6f
23 changed files with 448 additions and 103 deletions

View file

@ -1,32 +0,0 @@
const glob = require("glob");
const minify = require('@node-minify/core');
const htmlMinifier = require('@node-minify/html-minifier');
const crass = require('@node-minify/crass');
console.log('compress all html and css files');
glob("dist/**/*.html", function (er, files) {
files.forEach(file => {
console.log(file);
minify({
compressor: htmlMinifier,
input: file,
output: file,
options: {
collapseWhitespace: true,
conservativeCollapse: true
},
});
})
});
glob("dist/**/*.css", function (er, files) {
files.forEach(file => {
console.log(file);
minify({
compressor: crass,
input: file,
output: file
});
})
});

View file

@ -1,9 +1,28 @@
const pluginRev = require("eleventy-plugin-rev");
const eleventySass = require("eleventy-sass");
const tinyHTML = require('@sardine/eleventy-plugin-tinyhtml');
const eleventyNavigationPlugin = require("@11ty/eleventy-navigation"); const eleventyNavigationPlugin = require("@11ty/eleventy-navigation");
module.exports = function (eleventyConfig) { module.exports = function (eleventyConfig) {
eleventyConfig.addWatchTarget("./src/scss/"); eleventyConfig.addPlugin(pluginRev);
eleventyConfig.addPlugin(tinyHTML);
eleventyConfig.addPlugin(eleventySass, {
sass: {
loadPaths: ["node_modules"],
style: "compressed",
sourceMap: false,
},
compileOptions: {
permalink: function (contents, inputPath) {
return (data) => {
return data.page.filePathStem.replace(/^\/scss\//, "/css/") + ".css";
};
}
},
rev: true
});
eleventyConfig.addPlugin(eleventyNavigationPlugin); eleventyConfig.addPlugin(eleventyNavigationPlugin);
eleventyConfig.setUseGitIgnore(false); eleventyConfig.setUseGitIgnore(false);
eleventyConfig.addPassthroughCopy({ eleventyConfig.addPassthroughCopy({
"src/img": "img", "src/img": "img",
@ -19,7 +38,7 @@ module.exports = function (eleventyConfig) {
}); });
eleventyConfig.addFilter("sum", function (value) { eleventyConfig.addFilter("sum", function (value) {
return value.map(d => d.amount).reduce((a, b) => a + b); return value.map(d => d.amount).reduce((a, b) => a + b, 0);
}); });
eleventyConfig.addFilter("amount", function (value) { eleventyConfig.addFilter("amount", function (value) {
@ -43,6 +62,10 @@ module.exports = function (eleventyConfig) {
.length; .length;
}); });
eleventyConfig.addFilter('getServiceById', (services, serviceId) => {
return services.find(s => s.id === serviceId);
});
return { return {
// Pre-process *.md files with: (default: `liquid`) // Pre-process *.md files with: (default: `liquid`)
markdownTemplateEngine: "njk", markdownTemplateEngine: "njk",

View file

@ -3,12 +3,9 @@
"version": "1.0.0", "version": "1.0.0",
"description": "website for sp-codes.de", "description": "website for sp-codes.de",
"scripts": { "scripts": {
"compile-sass": "node-sass --output-style compressed --importer=node_modules/node-sass-tilde-importer src/scss/main.scss -o dist/css/", "minify-css": "uncss -n -H dist/ -o dist/css/main-*.css dist/**/*.html dist/**/**/*.html dist/**/**/**/*.html",
"minify-css": "uncss -n -H dist/ -o dist/css/main.css dist/**/*.html dist/**/**/*.html dist/**/**/**/*.html", "start": "eleventy --serve --watch",
"watch:eleventy": "eleventy --serve", "build": "eleventy && npm run move-index && npm run minify-css",
"watch:sass": "npm-run-all compile-sass minify-css -- --watch",
"start": "npm-run-all compile-sass minify-css --parallel watch:*",
"build": "npm run compile-sass && eleventy && npm run move-index && npm run minify-css && node .compress-all.js",
"move-index": "cpx dist/de/index.html dist/" "move-index": "cpx dist/de/index.html dist/"
}, },
"author": "samuel-p", "author": "samuel-p",
@ -25,15 +22,17 @@
"@node-minify/core": "^7.1.0", "@node-minify/core": "^7.1.0",
"@node-minify/crass": "^7.1.0", "@node-minify/crass": "^7.1.0",
"@node-minify/html-minifier": "^7.1.0", "@node-minify/html-minifier": "^7.1.0",
"@sardine/eleventy-plugin-tinyhtml": "^0.2.0",
"cpx": "^1.5.0", "cpx": "^1.5.0",
"eleventy-plugin-rev": "^1.0.2",
"eleventy-sass": "^2.1.6",
"glob": "^8.0.3", "glob": "^8.0.3",
"minify": "^9.1.0", "minify": "^9.1.0",
"node-sass": "^8.0.0", "postcss": "^8.4.21",
"node-sass-tilde-importer": "^1.0.2", "sass": "^1.57.1",
"npm-run-all": "^4.1.5",
"uncss": "^0.17.3" "uncss": "^0.17.3"
}, },
"dependencies": { "dependencies": {
"bootstrap": "^4.6.2" "bootstrap": "^5.2.3"
} }
} }

View file

@ -1,7 +1,18 @@
[ [
{
"year": 2023,
"donations": []
},
{ {
"year": 2022, "year": 2022,
"donations": [ "donations": [
{
"date": "15.12.2022",
"amount": 20,
"via": "banktransfer",
"from": "ub1x",
"first": false
},
{ {
"date": "16.11.2021", "date": "16.11.2021",
"amount": 25, "amount": 25,

View file

@ -0,0 +1,92 @@
---
layout: base.njk
---
<div class="row">
<div class="col-8 article-content">
{% if tags %}
<div class="mb-2">
{% for tag in tags %}
<span class="badge bg-primary text-black">{{tag}}</span>
{% endfor %}
</div>
{% endif %}
{{ content | safe }}
</div>
<div class="col-4">
{% if series %}
<div class="tab-card">
<div class="title">Alle Teile dieser Serie</div>
<div class="card">
{%- for post in collections.all %}
{% if post.data.series == series %}
<div class="p-2">
<a href="{{ post.url | url }}"
class="list-group-item list-group-item-action{% if post.url == page.url %} fw-bold{% endif %}">
{{ post.data.title }}
</a>
</div>
{% endif %}
{%- endfor %}
</div>
</div>
{% endif %}
{% set service = services | getServiceById(service) %}
{% if service %}
<div class="tab-card">
<div class="title">Zugehöriger Dienst</div>
<div class="card service">
<a class="link" {% if service.beta !=true %} href="/{{locale}}/services/{{service.id}}" {% endif %}></a>
{% if service.beta == true %}
<div class="beta">TEST-PHASE</div>
{% endif %}
<div class="inner">
<i class="{{service.icon}} i-4x i-fw"></i>
<h2 class="mt-2 mb-1">{{service.name}}{% if service.url %} <a href="{{service.url}}"
target="_blank"><i
class="i-external-link"></i></a>{% endif %}</h2>
{% if service.status %}
<div class="mb-2">
<a href="https://status.sp-codes.de" target="_blank">
<img alt="{{strings.state[locale]}}"
src="https://shields.sp-codes.de/endpoint?label={{strings.state[locale]}}&url=https%3A%2F%2Fstatus.sp-codes.de%2Fapi%2Fbadge%3Fservice%3D{{service.status}}%26operational%3D{{strings.operational[locale]}}%26outage%3D{{strings.outage[locale]}}%26maintenance%3D{{strings.maintenance[locale]}}">
</a>
</div>
{% endif %}
<div>{{service.summary[locale]}}</div>
</div>
</div>
</div>
{% endif %}
<div class="tab-card">
<div class="title">Über mich</div>
<div class="card">
<p>
Mein Name ist Samuel Philipp und ich bin ein Software Engineer aus Magdeburg. In meiner Freizeit
hoste ich verschiedene freie <a href="/de/services/">Dienste</a>. Hier schreibe ich Artikel rund um
Sicherheit und Datenschutz.
</p>
<a href="https://samuel-philipp.de">Mehr erfahren</a>
</div>
</div>
<div class="tab-card">
<div class="title">Schreib mir deine Meinung</div>
<div class="card">
<div class="d-flex justify-content-center flex-wrap my-3 contact-links">
<div class="m-2"><a href="mailto:mail@sp-codes.de">
<span class="d-none d-md-inline-block i-envelope i-4x i-fw"></span>
<span class="d-inline-block d-md-none i-envelope i-2x i-fw"></span>
</a></div>
<div class="m-2"><a href="https://matrix.to/#/@samuel-p:matrix.sp-codes.de">
<span class="d-none d-md-inline-block i-matrix i-4x i-fw"></span>
<span class="d-inline-block d-md-none i-matrix i-2x i-fw"></span>
</a></div>
<div class="m-2"><a rel="me" href="https://social.sp-codes.de/@samuel_p">
<span class="d-none d-md-inline-block i-mastodon i-4x i-fw"></span>
<span class="d-inline-block d-md-none i-mastodon i-2x i-fw"></span>
</a></div>
</div>
</div>
</div>
</div>
</div>

View file

@ -33,19 +33,19 @@ title: sp-codes
<meta name="twitter:image" content="https://sp-codes.de/img/sp-codes.jpg"> <meta name="twitter:image" content="https://sp-codes.de/img/sp-codes.jpg">
<link rel="shortcut icon" href="favicon.ico"> <link rel="shortcut icon" href="favicon.ico">
<link rel="icon" type="image/png" href="favicon.png"> <link rel="icon" type="image/png" href="favicon.png">
<link rel="stylesheet" href="/css/main.css"> <link rel="stylesheet" href="{{ '/css/main.css' | rev }}">
<script async defer data-website-id="47b8022b-0537-4bb2-baa5-455a87a36ff5" data-domains="sp-codes.de" src="https://umami.sp-codes.de/umami.js"></script> <script async defer data-website-id="47b8022b-0537-4bb2-baa5-455a87a36ff5" data-domains="sp-codes.de" src="https://umami.sp-codes.de/umami.js"></script>
</head> </head>
<body> <body>
<nav class="nav menu border-bottom"> <nav class="nav menu border-bottom">
<div class="toggle"> <div class="toggle">
<label for="menu" class="m-0"><span class="i-bars mr-1"></span>{{ strings.menu[locale] }}</label> <label for="menu" class="m-0"><span class="i-bars me-1"></span>{{ strings.menu[locale] }}</label>
<div class="flex-grow-1"></div> <div class="flex-grow-1"></div>
{% for language in site.languages %} {% for language in site.languages %}
<div {% if language.code== locale %} class="active" {% endif %}> <div {% if language.code== locale %} class="active" {% endif %}>
<a href="{% translatedUrl locale, language.code %}" class="ml-3"> <a href="{% translatedUrl locale, language.code %}" class="ms-3">
<span class="fi-{{ language.icon }}" title="{{ language.label }}"></span> <span class="fi-{{ language.icon }}" title="{{ language.label }}"></span>
</a> </a>
</div> </div>
@ -57,8 +57,8 @@ title: sp-codes
{%- for entry in collections.all | eleventyNavigation %} {%- for entry in collections.all | eleventyNavigation %}
{% if not entry.url.startsWith("https") and entry.url.includes(locale) or entry.locale == locale %} {% if not entry.url.startsWith("https") and entry.url.includes(locale) or entry.locale == locale %}
<div class="item{% if entry.url == page.url %} active{% endif %}"> <div class="item{% if entry.url == page.url %} active{% endif %}">
<a href="{{ entry.url | url }}" class="mr-3"> <a href="{{ entry.url | url }}" class="me-3">
{% if entry.icon %}<span class="{{ entry.icon }} mr-1"></span>{% endif %}{{ entry.title }} {% if entry.icon %}<span class="{{ entry.icon }} me-1"></span>{% endif %}{{ entry.title }}
</a> </a>
</div> </div>
{% endif %} {% endif %}
@ -70,7 +70,7 @@ title: sp-codes
<div class="lang-large"> <div class="lang-large">
{% for language in site.languages %} {% for language in site.languages %}
<div {% if language.code== locale %} class="active" {% endif %}> <div {% if language.code== locale %} class="active" {% endif %}>
<a href="{% translatedUrl locale, language.code %}" class="ml-3"> <a href="{% translatedUrl locale, language.code %}" class="ms-3">
<span class="fi-{{ language.icon }}" title="{{ language.label }}"></span> <span class="fi-{{ language.icon }}" title="{{ language.label }}"></span>
</a> </a>
</div> </div>
@ -84,19 +84,19 @@ title: sp-codes
</div> </div>
<div class="d-flex justify-content-start flex-wrap p-2 menu border-top"> <div class="d-flex justify-content-start flex-wrap p-2 menu border-top">
<div class="d-flex justify-content-start flex-wrap"> <div class="d-flex justify-content-start flex-wrap">
<div class="mr-3">Made with <span class="i-heart highlight"></span> in Germany</div> <div class="me-3">Made with <span class="i-heart highlight"></span> in Germany</div>
<div class="mr-3"><a href="https://samuel-philipp.de"><span class="i-copyright mr-1"></span>Samuel Philipp</a></div> <div class="me-3"><a href="https://samuel-philipp.de"><span class="i-copyright me-1"></span>Samuel Philipp</a></div>
</div> </div>
<div class="flex-sm-grow-1"></div> <div class="flex-sm-grow-1"></div>
<div class="d-flex justify-content-sm-start flex-wrap"> <div class="d-flex justify-content-sm-start flex-wrap">
<div class="mr-3"><a href="/{{locale}}/imprint"><span class="i-info-circle mr-1"></span>{{strings.imprint[locale]}}</a> <div class="me-3"><a href="/{{locale}}/imprint"><span class="i-info-circle me-1"></span>{{strings.imprint[locale]}}</a>
</div> </div>
<div class="mr-3"><a href="/{{locale}}/privacy"><span class="i-user-secret mr-1"></span>{{strings.privacy[locale]}}</a> <div class="me-3"><a href="/{{locale}}/privacy"><span class="i-user-secret me-1"></span>{{strings.privacy[locale]}}</a>
</div> </div>
<div class="mr-3"><a target="_blank" href="https://git.sp-codes.de/samuel-p/sp-codes.de"><span <div class="me-3"><a target="_blank" href="https://git.sp-codes.de/samuel-p/sp-codes.de"><span
class="i-code mr-1"></span>{{strings.code[locale]}}</a></div> class="i-code me-1"></span>{{strings.code[locale]}}</a></div>
<div><a target="_blank" href="https://umami.sp-codes.de/share/gaJcXEyG/sp-codes.de"><span <div><a target="_blank" href="https://umami.sp-codes.de/share/gaJcXEyG/sp-codes.de"><span
class="i-chart-line mr-1"></span>{{strings.stats[locale]}}</a></div> class="i-chart-line me-1"></span>{{strings.stats[locale]}}</a></div>
</div> </div>
</div> </div>
</body> </body>

View file

@ -1,7 +1,7 @@
--- ---
layout: base.njk layout: base.njk
--- ---
<a class="float-right mt-3" href="https://status.sp-codes.de" target="_blank"><strong><i class="i-heartbeat mr-2"></i>Status</strong></a> <a class="float-end mt-3" href="https://status.sp-codes.de" target="_blank"><strong><i class="i-heartbeat me-2"></i>Status</strong></a>
{{ content | safe }} {{ content | safe }}

View file

@ -26,6 +26,10 @@
</div> </div>
<div class="d-flex justify-content-center mb-3"> <div class="d-flex justify-content-center mb-3">
<div class="lead text-center"> <div class="lead text-center">
{% if locale == 'de' %}
<a href="https://samuel-philipp.de">samuel-philipp.de</a> <a href="https://samuel-philipp.de">samuel-philipp.de</a>
{% elseif locale == 'en' %}
<a href="https://samuel-philipp.com">samuel-philipp.com</a>
{% endif %}
</div> </div>
</div> </div>

11
src/de/about.md Normal file
View file

@ -0,0 +1,11 @@
---
key: about
eleventyNavigation:
key: about
title: Über mich
icon: i-user-secret
url: https://samuel-philipp.de/
locale: de
order: 1
permalink: false
---

35
src/de/articles.html Normal file
View file

@ -0,0 +1,35 @@
---
layout: base.njk
key: articles
title: Artikel
eleventyNavigation:
key: articles
title: Artikel
icon: i-book
order: 5
---
<h1><i class="i-book"></i> Artikel</h1>
<p class="mb-5">Hier findest du eine Übersicht aller Artikel, die ich auf dieser Webseite veröffentlicht habe.</p>
{% set tags = ['Matrix', 'Searx'] %}
{%- for tag in tags %}
<h3>Artikel zu {{tag}}:</h3>
<ul class="mb-5">
{%- for post in collections[ tag ] %}
<li>
<a href="{{ post.url | url }}">
{{ post.data.title }}
</a>
</li>
{%- endfor %}
</ul>
{%- endfor %}
<p class="mb-5">Gelegentlich kann es sein, dass ich die Zeit finde, einen neuen Artikel zu schreiben. Um keinen zu verpassen, folge
mir gerne auf Mastodon. Dort werde ich neue Artikel oder Aktualisierungen bereits veröffentlichter Artikel posten.</p>
{% include "profiles.html" %}

View file

@ -1,11 +0,0 @@
---
key: blog
eleventyNavigation:
key: blog
title: Blog
icon: i-book
url: https://samuels-blog.de/
locale: de
order: 1
permalink: false
---

View file

@ -7,7 +7,7 @@ title: Matrix
# <i class="i-comments"></i> Matrix # <i class="i-comments"></i> Matrix
[Matrix](https://matrix.org) ist eine moderne, quelloffene Software für dezentrale Kommunikation (wie E-Mail). Matrix [Matrix](https://matrix.org) ist eine moderne, quelloffene Software für dezentrale Kommunikation (wie E-Mail). Matrix
bietet von Haus aus Sprach- und Videoanrufe, inklusive Ende-zu-Ende Verschlüsselung und vieles mehr. Das Entscheidende bietet von Haus aus Sprach- und Videoanrufe, inklusive Ende-zu-Ende-Verschlüsselung und vieles mehr. Das Entscheidende
ist, dass es nicht den einen Matrix-Server gibt, den alle Nutzer:innen verwenden müssen, wie das beispielsweise bei ist, dass es nicht den einen Matrix-Server gibt, den alle Nutzer:innen verwenden müssen, wie das beispielsweise bei
WhatsApp, Telegram und vielen anderen verbreiteten Messengern der Fall ist. WhatsApp, Telegram und vielen anderen verbreiteten Messengern der Fall ist.
@ -41,10 +41,10 @@ Auf meinem Blog findest du eine Artikelserie für einen einfachen Einstieg in Ma
<div class="col-12 col-md-10 col-lg-8"> <div class="col-12 col-md-10 col-lg-8">
<div class="card-list"> <div class="card-list">
<div class="card"> <div class="card">
<a href="https://samuels-blog.de/werde-teil-der-matrix-matrix-teil-1/">Teil 1: Werde Teil der Matrix</a> <a href="/de/services/matrix/setup/part-1/">Teil 1: Werde Teil der Matrix</a>
</div> </div>
<div class="card"> <div class="card">
<a href="https://samuels-blog.de/sichere-chats-mit-matrix-matrix-teil-2/">Teil 2: Sichere Chats mit Matrix</a> <a href="/de/services/matrix/setup/part-2/">Teil 2: Sichere Chats mit Matrix</a>
</div> </div>
</div> </div>
</div> </div>

View file

@ -0,0 +1,80 @@
---
layout: article.njk
title: Werde Teil der Matrix - Matrix Teil 1
service: matrix
series: matrix-setup
tags:
- Tutorial
- Matrix
- Messenger
- Verschlüsselung
- Element
- FluffyChat
---
# Werde Teil der Matrix - Matrix Teil 1
[Matrix](https://matrix.org) ist ein dezentraler Messenger. Dezentral bedeutet, es gibt nicht den einen Server, den alle verwenden müssen, sondern jede:r kann sich einen eigenen Matrix-Server aussuchen. In etwa so wie bei E-Mail.
In diesem Beitrag möchte ich nun erklären, wie man sich dort anmelden kann und mit welchen Apps man mit seinen Liebsten in Kontakt treten kann. In den folgenden Artikeln dieser Serie werde ich auf weitere Themen, wie Ende-zu-Ende Verschlüsselung, Kontakt-Verifizierung und das Erstellen von privaten und öffentlichen Gruppen, eingehen.
## Anbieter wählen
Zunächst muss man sich einen Server-Anbieter auswählen, bei dem man sich registrieren möchte. Im Matrix-Netzwerk spricht man auch vom Homeserver, also der Server, bei dem man "zu Hause" ist, bzw. sein Konto hat. Hierfür kann man im Internet suchen oder eine der folgenden öffentlichen Listen verwenden, um einen Provider zu finden, der den eigenen Vorstellungen entspricht:
* [joinmatrix.org](https://joinmatrix.org/servers)
* [hello-matrix.net](https://www.hello-matrix.net/public_servers.php)
* [the-federation.info](https://the-federation.info/protocol/matrix)
Wichtig hierbei ist auch, dass der Servername immer ein Teil der eigenen Matrix-ID sein wird, also dem Anmeldenamen, mit dem man sich anmeldet, oder über den Anderen mit dir in Kontakt treten können. (Also genau wie mit deiner E-Mail-Adresse auch.) Die Matrix-ID sieht also folgendermaßen aus:
```
@[name]:[server]
```
In diesem Beitrag werde ich [matrix.sp-codes.de](https://matrix.sp-codes.de) als Home-Server verwenden. Gerne kannst du dich auch dort registrieren. Da ich selber diesen Server nutze, ist meine Matrix-ID also diese: [@samuel-p:matrix.sp-codes.de](https://matrix.to/#/@samuel-p:matrix.sp-codes.de)
## App wählen
Da Matrix ein quelloffenes Netzwerk ist, kann jede:r dazu beitragen und eigene Apps entwickeln. Dadurch gibt es nicht die eine App, die zwingend verwendet werden muss. Ich möchte deshalb hier kurz zwei Apps vorstellen, die meiner Ansicht nach gut für den Einstieg geeignet sind:
### [Element](https://element.io/)
Element ist die wohl am weitesten verbreitetste App im Matrix-Netzwerk. Die App ist für Android, iOS, PC und auch als Browser-Version verfügbar. Für Android kann Element über den [PlayStore](https://play.google.com/store/apps/details?id=im.vector.app) oder über [F-Droid](https://f-droid.org/packages/im.vector.app/) installiert werden. Für iOS kann die App über den [AppStore](https://apps.apple.com/app/vector/id1083446067) heruntergeladen werden. Um die Desktop-Version zu installieren, schau am besten auf der offiziellen [Seite](https://element.io/get-started) nach.
Alle Versionen (Android, iOS, Desktop und Web) sind kostenlos und Open-Source. Das heißt, jede:r kann den Quellcode einsehen, Fehler melden und an Verbesserungen mitarbeiten.
Da der Quellcode frei verfügbar ist, können auch andere Apps erstellt werden, die auf Element basieren. Einer davon ist SchildiChat.
[SchildiChat](https://f-droid.org/packages/de.spiritcroc.riotx/) ist ein Messenger, der auf Element basiert und ein paar kleinere Änderungen mit sich bringt. Darunter eine andere Darstellung der Chatverläufe mit Sprechblasen. SchildiChat ist nur für Android verfügbar.
### [FluffyChat](https://fluffychat.im/)
Eine andere, einfach zu bedienende App ist FluffyChat. Auch FluffyChat ist für [Android](https://play.google.com/store/apps/details?id=chat.fluffy.fluffychat), [iOS](https://testflight.apple.com/join/hL6Tyyaj), Desktop und als [Browser-Anwendung](https://web.fluffychat.im/) verfügbar. Um FluffyChat zu installieren, schau am besten direkt auf der Webseite [fluffychat.im](https://fluffychat.im/) vorbei. Wie Element, ist auch FluffyChat Open-Source. FluffyChat versucht sich in der Bedienung und im Design an herkömmlichen Messengern zu orientieren.
### Mehr Apps
Es gibt noch einige Apps mehr, die teilweise auch noch in der Entwicklung sind. Eine weitere Auswahl an Apps findest du auf der folgenden Seite: [https://matrix.org/clients/](https://matrix.org/clients/)
## Anmelden
Nachdem du dich nun für einen vertrauenswürdigen Anbieter entschieden und eine App installiert hast, die dir zusagt, kannst du dir nun einen Account anlegen. Im Folgenden werde ich die App Element unter Android verwenden, das Vorgehen wird aber in anderen Apps ähnlich sein.
Nach der Startseite wählst du zunächst „Andere“ und gibst anschließend die Server-Adresse deines Anbieters ein. Nun wählst du deinen Anmeldenamen und ein sicheres Passwort, gibst beides in die entsprechenden Felder ein und schon wird dein Matrix-Account erstellt. Es kann sein, dass du während des Erstellens deines Accounts ein bisschen warten musst, das kann je nach Server-Auslastung ein bisschen dauern.
## Kontakte hinzufügen
Nachdem du nun deinen Account erstellt hast, ist es an der Zeit, mit deinen Liebsten Kontakt aufzunehmen. Frage sie hierfür beispielsweise nach ihrer Matrix-ID. Gerne kannst du auch mir eine Nachricht zukommen lassen: [@samuel-p:matrix.sp-codes.de](https://matrix.to/#/@samuel-p:matrix.sp-codes.de)
Um einen neuen Chat zu starten, tippe auf den grünen Button unten rechts und anschließend auf „Mit matrix-ID hinzufügen“. Nun gibst du die Matrix-ID deines:deiner Chatpartner:in ein, wählst den ersten Treffer aus der Liste aus und tippst anschließend auf „Erstellen“. Jetzt heißt es ein bisschen warten, bis dein:e Chatpartner:in deine Einladung angenommen hat.
## Wie gehts weiter?
Im [nächsten Artikel](http://localhost:8080/de/services/matrix/setup/part-2/) dieser Serie werde ich über Ende-zu-Ende-Verschlüsselung und Verifikation der Kontakte schreiben. Bis dahin viel Spaß beim Chatten.
Falls du jetzt schon weiter lesen willst, kann ich dir die folgenden Links empfehlen, allerdings teilweise auf Englisch:
* [https://element.io/help](https://element.io/help)
* [https://matrix.org/faq/](https://matrix.org/faq/)
* [https://matrix.org/docs/guides/](https://matrix.org/docs/guides/)
* [https://www.freie-messenger.de/sys_matrix/](https://www.freie-messenger.de/sys_matrix/)

View file

@ -0,0 +1,54 @@
---
layout: article.njk
title: Sichere Chats mit Matrix Matrix Teil 2
service: matrix
series: matrix-setup
tags:
- Tutorial
- Matrix
- Messenger
- Verschlüsselung
- Element
---
# Sichere Chats mit Matrix Matrix Teil 2
Im [ersten Teil](/de/services/matrix/setup/part-1/) der Matrix-Serie habe ich erklärt, wie du dir einen Matrix-Account anlegen und mit deinen Kontakten einen Chat beginnen kannst. In diesem Teil möchte ich nun darauf aufbauen und erklären, was es mit Ende-zu-Ende-Verschlüsselung und der Verifizierung von Kontakten auf sich hat. Wenn Matrix also neu für dich ist, würde ich dir empfehlen, dir zunächst den [ersten Teil](/de/services/matrix/setup/part-1/) anzuschauen und anschließend hier weiterzulesen.
## Ende-zu-Ende-Verschlüsselung aktivieren
Durch [Ende-zu-Ende-Verschlüsselung](https://de.wikipedia.org/wiki/Ende-zu-Ende-Verschl%C3%BCsselung) wird sichergestellt, dass die Nachrichten, die du schreibst, auf deinem Gerät verschlüsselt und erst auf dem Gerät der Person, die die Nachrichten empfängt, entschlüsselt werden können. Dadurch ist es also selbst für den:die Server-Betreiber:in unmöglich, deine Nachrichten zu lesen. Deshalb ist es empfehlenswert, Ende-zu-Ende-Verschlüsselung zu nutzen.
Je nach App wird die Ende-zu-Ende-Verschlüsselung direkt beim Erstellen eines Chats aktiviert oder es wird dort die Möglichkeit zur Aktivierung gegeben. Wenn die Verschlüsselung nicht beim Erstellen aktiviert wird, sollte sie für private Chats danach aktiviert werden. In Element geht, das wie folgt:
Wenn du in einem Chat die Ende-zu-Ende-Verschlüsselung aktiviert hast, ist es außerdem ratsam, die Schlüsselsicherung einzurichten. Dafür musst du ein zusätzliches Schlüsselpasswort verwenden. Mit diesem Passwort kannst du verschlüsselte Chats auch auf anderen Geräten wiederherstellen. Element wird dich dazu auffordern, ein Schlüsselpasswort zu setzen, wenn es notwendig ist:
Wenn du diese Benachrichtigung nicht bekommst, kannst du auch in den Einstellungen unter „Sicherheit & Privatsphäre“ > „Wiederherstellung verschlüsselter Nachrichten“ die Schlüsselsicherung einrichten. Außerdem kannst du dort die Schlüsselsicherung zurücksetzen, wenn du dein Schlüsselpasswort vergessen hast.
Um die Schlüsselsicherung in einer neuen Sitzung wiederherzustellen, kannst du entweder die Sitzung von einem anderen Gerät verifizieren (siehe unten Cross Signing) oder du nutzt dein Schlüsselpasswort. Gehe hierfür in die Einstellungen und wähle unter „Sicherheit & Privatsphäre“ die Option „Wiederherstellung verschlüsselter Nachrichten“ und anschließend „Von Sicherung wiederherstellen“. Damit sollten alle Nachrichten in deinen verschlüsselten Chats auch in dieser Sitzung wieder lesbar sein.
## Kontakte verifizieren
Zusätzlich zur Ende-zu-Ende-Verschlüsselung kannst du mithilfe der Kontaktverifizierung sicherstellen, dass du mit der richtigen Person schreibst und du nicht Opfer eines [Man-In-The-Middle-Angriffs](https://de.wikipedia.org/wiki/Man-in-the-Middle-Angriff) wirst.
In Element kann die Kontakt-Verifizierung über einen QR-Code Scan oder über den Vergleich von Emojis oder eines Texts durchgeführt werden. Um einen Kontakt zu verifizieren, wähle den Chat mit der Person aus und tippe anschließend auf den Namen in der Titelzeile. Nun geht es wie folgt weiter:
Die einzelnen Schritte der Verifizierung können eine Weile dauern. Warte deshalb etwas ab, bevor du die Verifizierung abbrichst. Um die Verifizierung eines Kontakts sicher durchzuführen, mache sie entweder wenn ihr euch real trefft oder tauscht die Emojis über einen unabhängigen, vertrauenswürdigen Kanal, z.B. am Telefon aus.
## Cross Signing
Um in Matrix zu chatten, kannst du beliebig viele Apps auf verschiedenen Geräten, dem Handy, am PC, im Browser, etc. nutzen. Damit du aber nicht alle deine Geräte mit allen Geräten deiner Kontakte verifizieren musst, gibt es seit einiger Zeit das sogenannte Cross Signing. Hierfür verifiziert jede:r seine:ihre eigenen Geräte selbst. Die Verifizierung funktioniert wie die der Kontakte. Wenn du dich an einem neuen Gerät anmeldest, bekommst du in Element auf deinen anderen Geräten eine Benachrichtigung. Damit kannst du direkt die Verifizierung initiieren.
Alternativ kannst du auch alle deine Sitzungen in den Einstellungen verifizieren. Gehe hierfür in den Einstellungen auf „Sicherheit & Privatsphäre“ und dann auf „Zeige alle Sitzungen“. Dort siehst du nun, welche Sitzungen bereits verifiziert sind und du kannst die übrigen Sitzungen verifizieren.
Es ist wichtig, alle deine Sitzungen zu verifizieren, damit auch für deine Kontakte erkennbar ist, dass die Ende-zu-Ende-Verschlüsselung richtig funktioniert.
Wenn du nicht willst, dass Element automatisch neuen Sitzungen deines Kontakts vertraut, kannst du in den Einstellungen unter „Sicherheit & Privatsphäre“ die Option „Nur zu verifizierten Sitzungen verschlüsseln“ aktivieren. Dann musst du jede Sitzung einzeln verifizieren.
## Fehler beheben
Wenn du Probleme damit haben solltest, dass die Schlüsselsicherung oder das Cross Signing nicht richtig funktioniert, kann es hilfreich sein, das Schlüsselbackup und / oder die Schlüsselsicherung in den Einstellungen zurückzusetzen. Das kannst du in den Einstellungen unter „Sicherheit & Privatsphäre“ erledigen. Nutze die Option „Backup zurücksetzen“ und / oder „Wiederherstellung verschlüsselter Nachrichten“ und dann „Sicherung löschen“. Bei weiteren Problemen schreibe gerne einen Kommentar.
## Wie gehts weiter?
Ich hoffe, dieser Teil war nicht zu technisch / theoretisch und du konntest die einzelnen Punkte nachvollziehen. Im nächsten Teil dieser Serie werde ich über Gruppen und Kanäle in Matrix berichten und einige interessante davon vorstellen. Wenn du Vorschläge dafür hast, kannst du sie mir gerne zukommen lassen. Bis dahin viel Spaß beim sicheren Chatten mit deinen Freund:innen.

View file

@ -15,7 +15,7 @@ __Seit November 2019 betreibe ich eine öffentliche Searx Instanz.__ Schau gerne
__Hier gehts zu Searx: [searx.sp-codes.de](https://searx.sp-codes.de)__ __Hier gehts zu Searx: [searx.sp-codes.de](https://searx.sp-codes.de)__
Wenn du Searx als Standardsuchmaschine nutzen willst, findest du auf meinem Blog eine Anleitung dafür: [Nur noch Searx](https://samuels-blog.de/nur-noch-searx/) Wenn du Searx als Standardsuchmaschine nutzen willst, findest du hier eine Anleitung dafür: [Nur noch Searx](/de/services/searx/setup/)
## Weitere nützliche Links ## Weitere nützliche Links

View file

@ -0,0 +1,56 @@
---
layout: article.njk
title: Nur noch Searx
service: searx
tags:
- Tutorial
- Searx
- Standardsuchmaschine
- Browser
- Firefox
- Chrome
---
# Nur noch Searx
In diesem Artikel möchte ich kurz beschreiben, wie ihr Searx (oder jede beliebige andere Suchmaschine) in eurem Browser als Standard festlegen könnt.
Zunächst nochmal eine kurze Erläuterung, was Searx eigentlich ist: Searx ist eine sogenannte Meta-Suchmaschine. Das heißt, sie nutzt andere Suchmaschinen, um ihre Ergebnisse zu einer Suchanfrage bereitzustellen. Allerdings wird nur der Suchtext selber zu den fremden Suchmaschinen weitergeleitet, wodurch diese die Anfrage keiner bestimmten Person mehr zuordnen können. Dadurch und da Searx Open-Source ist, bietet Searx mehr Privatsphäre als andere Suchmaschinen.
Einige andere Searx-Instanzen, die du bei Interesse nutzen kannst:
* [searx.info](https://searx.info/)
* [search.disroot.org](https://search.disroot.org/)
Eine größere Übersicht findest du auch auf der folgenden Seite: [searx.space](https://searx.space)
Um nun standardmäßig Searx als Suchmaschine zu nutzen, musst du Folgendes in deinem Browser einstellen:
## Firefox
In Firefox musst du als Erstes die Searx Webseite (z.B. [searx.sp-codes.de](https://searx.sp-codes.de)) öffnen. Jetzt kannst du am Ende der Suchleiste auf den Button mit den drei Punkten klicken und anschließend auf _Suchmaschine hinzufügen_.
![Firefox Dropdown](/img/searx/firefox-1.png)
Wenn das erledigt ist, gehst du in die Einstellungen und wählst in der linken Leiste Suche aus. Nun kannst du im Bereich _Standardsuchmaschine_ deine Searx-Instanz aus der Liste auswählen. Das wars.
![Firefox Standardsuchmaschine](/img/searx/firefox-2.png)
## Chrome
Öffne zunächst die Webseite von Searx (z.B. [searx.sp-codes.de](https://searx.sp-codes.de)) und gehe anschließend in die Browsereinstellungen. Wähle in der linken Leiste _Suchmaschine_ und dann _Suchmaschinen verwalten_. In der unteren Liste müsstest du nun Searx finden, kannst bei dem entsprechenden Eintrag auf die drei Punkte und im Menü auf _Als Standard festlegen_ klicken. Fertig.
![Chrome Standardsuchmaschine](/img/searx/chrome-1.png)
Um deine neue Einstellung zu testen, gib einfach einen beliebigen Suchtext in die Adresszeile ein und drücke _Enter_.
## Andere Browser
In diesem Beitrag habe ich mich auf die beiden am häufigsten genutzten Browser beschränkt. Du kannst aber natürlich auch in vielen anderen Browsern Searx als Standardsuchmaschine festlegen. Hier habe ich die Erklärungen für ein paar andere Browser zusammen getragen:
* [Microsoft Edge](https://support.microsoft.com/de-de/help/4556712/change-your-default-search-engine-in-microsoft-edge)
* [Safari](https://support.apple.com/de-de/guide/safari/ibrwe75c2a3c/mac)
* [Opera](https://help.opera.com/de/latest/search/)
* [Brave](https://support.brave.com/hc/en-us/articles/360017479752-How-do-I-set-my-default-search-engine-)
Solle es in einem Browser nicht möglich sein die Standardsuchmaschine zu ändern, z.B. in Handybrowsern kannst du meistens Searx als Startseite einrichten und dann direkt dort das Suchfeld nutzen.

11
src/en/about.md Normal file
View file

@ -0,0 +1,11 @@
---
key: about
eleventyNavigation:
key: about
title: About me
icon: i-user-secret
url: https://samuel-philipp.com/
locale: en
order: 1
permalink: false
---

View file

@ -1,11 +0,0 @@
---
key: blog
eleventyNavigation:
key: blog
title: Blog
icon: i-book
url: https://samuels-blog.de/
locale: en
order: 1
permalink: false
---

View file

@ -31,10 +31,10 @@ On my blog (German) you will find an article series for an easy start to Matrix:
<div class="col-12 col-md-10 col-lg-8"> <div class="col-12 col-md-10 col-lg-8">
<div class="card-list"> <div class="card-list">
<div class="card"> <div class="card">
<a href="https://samuels-blog.de/werde-teil-der-matrix-matrix-teil-1/">Part 1: Werde Teil der Matrix</a> <a href="/de/services/matrix/setup/part-1/">Part 1: Werde Teil der Matrix</a>
</div> </div>
<div class="card"> <div class="card">
<a href="https://samuels-blog.de/sichere-chats-mit-matrix-matrix-teil-2/">Part 2: Sichere Chats mit Matrix</a> <a href="/de/services/matrix/setup/part-2/">Part 2: Sichere Chats mit Matrix</a>
</div> </div>
</div> </div>
</div> </div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View file

@ -1,22 +1,21 @@
$primary: #fea500;
$primary_dark: #e5a52e;
@import "logo"; @import "logo";
$icomoon-font-path: "../font"; $icomoon-font-path: "../font";
@import "icons/style"; @import "icons/style";
$flag-icon-path: '../img'; $flag-icon-path: '../img';
@import "icons/flags"; @import "icons/flags";
@import "node_modules/bootstrap/scss/bootstrap-grid"; @import "bootstrap/scss/bootstrap-grid";
@import "node_modules/bootstrap/scss/bootstrap-reboot"; @import "bootstrap/scss/bootstrap-reboot";
@import "node_modules/bootstrap/scss/utilities/align"; @import "bootstrap/scss/bootstrap-utilities";
@import "node_modules/bootstrap/scss/utilities/spacing"; @import "bootstrap/scss/badge";
@import "node_modules/bootstrap/scss/utilities/display"; @import "bootstrap/scss/functions";
@import "node_modules/bootstrap/scss/utilities/text"; @import "bootstrap/scss/variables";
@import "node_modules/bootstrap/scss/utilities/float"; @import "bootstrap/scss/mixins/_breakpoints";
@import "node_modules/bootstrap/scss/functions";
@import "node_modules/bootstrap/scss/variables";
@import "node_modules/bootstrap/scss/mixins/_breakpoints";
$primary: #fea500;
$primary_dark: #e5a52e;
html, body { html, body {
height: 100%; height: 100%;
@ -27,7 +26,6 @@ html, body {
body { body {
background-image: url("../img/bg.jpg"); background-image: url("../img/bg.jpg");
color: #fff; color: #fff;
font-weight: 300;
min-height: 100vh; min-height: 100vh;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
} }
@ -93,7 +91,7 @@ a {
} }
} }
@include media-breakpoint-down(xs) { @include media-breakpoint-down(sm) {
.nav { .nav {
display: block; display: block;
padding: 0; padding: 0;
@ -133,6 +131,11 @@ a {
.menu { .menu {
a { a {
color: #fff; color: #fff;
text-decoration: none;
&:hover {
text-decoration: underline;
}
} }
.active a { .active a {
@ -251,7 +254,7 @@ code {
pre { pre {
background-color: $primary; background-color: $primary;
color: #000; color: #000;
padding: 1px 3px; padding: 10px 15px;
border-radius: 4px; border-radius: 4px;
code { code {
@ -261,6 +264,13 @@ pre {
} }
} }
.article-content {
img {
display: block;
margin: 1rem auto;
}
}
@media (max-width: 767.98px) { @media (max-width: 767.98px) {
.logo { .logo {
max-width: 96px; max-width: 96px;
@ -295,3 +305,16 @@ table.table {
margin: 5px; margin: 5px;
max-width: 250px; max-width: 250px;
} }
.tab-card {
margin-bottom: 2rem;
.title {
background-color: $primary;
color: #000;
font-weight: bold;
padding: 5px 10px;
border: 1px solid #fff;
border-bottom: none;
}
}