Skip to content
Snippets Groups Projects
Commit 77a4ed0c authored by Frederic Aust's avatar Frederic Aust
Browse files

.gitignore merged

parents 5e59855d 9ff848e5
No related branches found
No related tags found
No related merge requests found
Showing
with 2387 additions and 16 deletions
......@@ -4,9 +4,24 @@
__pycache__
*.gif
*.jpeg
.idea
*.log
config.json
gn.json
testitest.py
*.png
*.csv
docs/*.aux
docs/*.bbl
docs/*.blg
docs/*.bcf
docs/*.idx
docs/*.lof
docs/*.log
docs/*.lot
docs/*.nlo
docs/*.out
docs/*.synctex.gz
docs/*.toc
docs/*.toxc
docs/*.xml
LICENSE 0 → 100644
This diff is collapsed.
......@@ -3,7 +3,86 @@
This project realizes a signal community bot known from other social plattforms like Twitch, Discord & Mumble. It is based on the simple request to automatically remind a groupchat of upcoming birthdays and events.
# Installation
Install required packages: `pip3 install -r requirements.txt`
This chapter covers the whole installation of the signalbot while using a Raspberry Pi 4 with RaspberryOS already installed. Additionally you'll need a phonenumber that is not linked to an existing signal account.
If you just want to use the bot via Signal scroll down to [Features](# Features) .
## Installation preparation
This section describes how to install signal-cli on a Raspberry Pi 4. Note that earlier hardware versions are not supported due to the built-in processor generation.
* Installation JRE: `$ sudo apt-get install default-jre`
* Installation Gradle: `$ sudo apt-get install gradle`
* When installing Rust on a Raspberry Pi, it is recommended to install *rustup - The Rust Language installer* by [snapcraft](https://snapcraft.io/install/rustup/raspbian)
* Installation of the Snap Store: `$ sudo apt install snapd`
* Restart the Pi: `$ sudo reboot`
* Installation of core snap: `$ sudo snap install core`
* Installation of rustup: `$ sudo snap install rustup --classic`
* Installation of the protocol buffer compiler: `$ sudo apt install protobuf-compiler`
## Compilation of the signal-cli libraries
The *signal-cli* equires the libraries [Libsignal-client](https://github.com/AsamK/signal-cli/wiki/Provide-native-lib-for-libsignal) and [Libzkgroup](https://github.com/signalapp/zkgroup/releases). They will be downloaded from GitHub and then compiled.
* Installation of the Libsignal-client library
* Switch to the java directory: `$ cd java`
* Comment out the compilation of the Android Lib with `#`
* `$ sed -i "s/, ':android'//" settings.gradle`
* `$ ./build_jni.sh desktop`\
The compiled library is then located in the directory *libsignal-client* under *target/release/libsignal_jni.so*.
* Installation of the Libzkgroup library
* `$ make libzkgroup`
You can optionally compile with four processor cores using the `-j4` parameter.
## Compilation and installation of the signal-cli
This section corresponds to the [signal-cli instructions](https://github.com/AsamK/signal-cli#building) for compiling.
* Download the Git-Repository: `$ git clone https://github.com/AsamK/signal-cli.git`
* compile with Gradle: `$ ./gradlew build`
* Create a shell wrapper in the directory *build/install/signal-cli/bin*: `$ ./gradlew installDist`
* Create the tar file in the *build/distributions* directory: `$ ./gradlew distTar`
The libraries compiled in the previous section must now be replaced in the compiled signal-cli tar.
* Switch to directory *signal-cli/build/distributions*
* unzip tar: `$ sudo ln -sf /opt/signal-cli-"${VERSION}"/bin/signal-cli /usr/local/bin/`
* delete libsignal-client from the jar in the `/opt/signal-cli-*/lib` folder: `$ zip -d signal-client-java-*.jar libsignal_jni.so`
* delete the library libzkgroup from the jar: `$ zip -d zkgroup-java-*.jar libzkgroup.so`
* Specify the path to the compiled libraries in `/opt/signal-cli-*/bin/signal-cli`:
* `JAVA_LIBRARY_PATH="-Djava.library.path=/your/java/library/path"`
* `exec "$JAVACMD" "$JAVA_LIBRARY_PATH" "$@"`
## Installing the required Python libraries
Automatically install all required packages: `pip3 install -r requirements.txt`
# Create an Account
A phone number is required to create an account. It is possible to receive the opening code via SMS or voice call. In these instructions, a landline number is used for the account and thus the activation by voice call. Please note that the country code must be entered for the telephone number, which is +49 for Germany.
* Register the phone number. `USERNAME` must be replaced by the phone number.
* via SMS Verification: `signal-cli -u USERNAME register`
* via Voice verification: `signal-cli -u USERNAME register --voice`
* If the registration fails with the error message *Captcha invalid or required for verification*, a CAPTCHA must be solved:
* Visit the [Signal CAPTCHA Website](https://signalcaptchas.org/registration/generate.html)
* solve the CAPTCHA
* The token can be read out via the console of the web developer tools. In most common browsers, they can be called up via pressing F12. It should be noted that the website has no other content and is therefore completely empty.
The token is the entire content after the redirect address: `signalcaptcha://`
* Now the registration command from the first point is restarted with the additional parameter `--captcha TOKEN`.
* The code received by SMS or call is passed instead of `CODE`: `signal-cli -u USERNAME verify CODE`
# Set up the Deamon
When setting up the Deamon service, an article of the [c't 14/2021](https://www.heise.de/select/ct/2021/14/2110907424679785321) serves as a basis, which in turn builds on the signal-cli's [system-bus guide](https://github.com/AsamK/signal-cli/wiki/DBus-service#system-bus). The signal-cli is set up as a Systemd service, so that it is automatically started at system startup. In addition, the service is automatically restarted in the event of an error.
As described in c't and the signal-cli wiki, a separate user is set up for signal-cli. This is a common practice in order to simplify access rights. In addition, all users of the system have access to the running signal-cli session via the D-Bus.
The user *signal-cli* for the Deamon is created via the command \
`sudo adduser --system --home /var/lib/signal-cli signal-cli` \
The default config and service files are copied as root from the signal-cli directory with the following commands \
* `sudo cp data/org.asamk.Signal.conf /etc/dbus-1/system.d/`
* `sudo cp data/org.asamk.Signal.service /usr/share/dbus-1/system-services/`
The service file is stored under `/etc/system/system/signal-cli.service`. To save the file there, root privileges are also required. With the entry `\ExecStart=/usr/local/bin/signal-cli --config /var/lib/signal-cli -u USERNAME daemon --system `the command for the program call is specified. `USERNAME` has to be replaced again.
The created account data is stored in the home directory of the signal-cli user. The command `sudo cp -r ~/.local/share/signal-cli* /var/lib/signal-cli` copies all files from the personal directory.
Finally `sudo chown -R signal-cli /var/lib/signal-cli` is used to set that all files in the created home directory belong to the user with the same name.
The service is activated with the command `sudo sytemctl --now enable signal-cli` and started with `sudo systemctl start signal-cli`.
With the command `sudo systemctl status signal-cli.service` you can check if the setup was successful and if the service is active.
# Features
The signalbot listens to commands that start with a dot.
......@@ -29,33 +108,34 @@ You can use:\
`.dadjoke` - Make a really good pun
`.deepl <L1-L2>, <String>` or `.deepl <L2>, <String>` - Translate a language. `<L1-L2>` are Language Codes. If you use only `<L2>`, the bot will try to guess the language of `<String>`. Powered by [DeepL](https://www.deepl.com)
`.deepl <LC>, <String>` - Translate a word, sentence or even small texts with the DeepL translator. `<LC>` is a language code.\
The bot will try to guess the language of `<String>`. Example: `.deepl ES, Where is the library?` Powered by [DeepL](https://www.deepl.com)
## Crawlers
`.genderneutral <German String>` or `.gn <German String>` - Looks if a string (can be more than one sentence) is genderneutral and displays alternatives for genderspecific words.\
Powered by [geschicktgendern](https://www.geschicktgendern.de)
`.genderneutral <German String>` or `.gn <German String>` - Looks if a string (can be more than one sentence) is genderneutral and displays alternatives for genderspecific words. Powered by [geschicktgendern](https://www.geschicktgendern.de)
`.freegames` - Displays video games that are currently free, _but usually not_. Powered by [freegamesyo](https://www.freegamesyo.com)
`.freegames` - Displays video games that are currently free, *but usually not*. Powered by [freegamesyo](https://www.freegamesyo.com)
## Databases
`.saveQuote <"Quote"> <Person> <Year>` - Save a quote. Type .savequote "640 kB ought to be enough for anybody.", Not Gates, 1981
`.saveQuote <"Quote">, <Person>, <Year>` - Save a quote. Example: `.savequote "640 kB ought to be enough for anybody.", Not Gates, 1981`
`.randomQuote` - Take a random Quote and display it.
`.randomQuote` - Display a random quote.
`.saveEvent <Headline>; <Date>; <Description>` - Save an event. The bot will remind you one day before the event and at the actual day, each at 9 o'clock. To delete an event use .request!
`.saveEvent <Headline>; <Date>; <Description>` - Save an event. The bot will remind you one day before the event and at the actual day, each at 9 o'clock. Example: `.saveEvent CSD-Düsseldorf; 16.10.2021; 🏳️‍🌈 🏳️‍🌈 🏳️‍🌈`.
`.nextEvent` - Display the upcoming event.
`.saveBirthday <Name>, <Date>` - Save a birthday. The bot will congratulate on that day. To delete a birthday use .request!
`.saveBirthday <Name>, <Date>` - Save a birthday. The bot will congratulate on that day.
`.nextBirthday` - Display the next birthday.
`.allBirthdays` - Get a list of all birthdays.
*Hint: instead of save, you can also write create and add!*
*Hint: instead of save, you can also write create and add!* \
**To delete Quotes, Birthdays or Events please use** `.request`
## Misc
`.tex <equation>` - Convert a typed equation into a rendered formula.
`.tex <equation>` - Convert a typed equation into a rendered formular.
`.sips` - A simple drinking game. Hand out a number of sips. But be aware of backfiring.
......@@ -63,9 +143,7 @@ Powered by [geschicktgendern](https://www.geschicktgendern.de)
`.challenge` - Bored? Stuck in your own comfort-zone? Get a random challenge for the day! In cooperation with [Jugendkirche Düsseldorf](https://ejdus.de/einricht_gemeinden/jugendkirche/)
`.poll` - Create a cvhbot-ish poll (Coming soon)
`.roll <Range>` - Roll a number in a set range. If no range is stated it will generate an integer in the interval 1 <= x < 100
`.roll <X-Y>` - Roll a number *n* in a set range X <= n < Y. If no range is stated it will generate an integer in the interval 1 <= n < 100. Example: `.roll 3-7`
`.request <String>` - Do you wish for anything else? Request it!
......
% Encoding: UTF-8
@Booklet{jsopensource,
title = {JavaScript Tools},
author = {Wrobel, Gunnar},
year = {2015},
note = {Besserer Code durch eine professionelle Programmierumgebung - Open Source Press}
}
@Online{deepl,
author = {DeepL GmbH},
title = {{DeepL API Docs}},
url = {https://www.deepl.com/docs-api},
note = {Datum des Zugriffs: 21.10.2021},
timestamp = {2021-10-21}
}
@Online{sympy,
author = {SymPy Development Team},
title = {{SymPy Docs: Sympify}},
url = {https://docs.sympy.org/latest/modules/core.html},
note = {Datum des Zugriffs: 03.09.2021},
timestamp = {2021-09-03}
}
@Online{fourfours,
author = {Paul Bourke et al.},
title = {{Four Fours Problem}},
url = {http://paulbourke.net/fun/4444/},
note = {Datum des Zugriffs: 03.09.2021},
timestamp = {2021-09-03}
}
@Online{whatsapp1,
author = {Tagesschau},
title = {{WhatsApp verschiebt Datenschutz-Änderung}},
url = {https://www.tagesschau.de/wirtschaft/verbraucher/whatsapp-messenger-facebook-datenschutz-101.html},
note = {Datum des Zugriffs: 02.09.2021},
timestamp = {2021-09-02}
}
@Online{whatsapp2,
author = {Till Buecker},
title = {{WhatsApp mit neuen Datenschutz-Regeln}},
url = {tagesschau.de/ausland/amerika/whatsapp-datenschutz-verschiebung-101.html},
note = {Datum des Zugriffs: 02.09.2021},
timestamp = {2021-09-02}
}
@Online{whatsapp3,
author = {Christine Xuan Mueller},
title = {{WhatsApp muss Strafe von 225 Millionen Euro zahlen}},
url = {https://www.zeit.de/digital/2021-09/whatsapp-irland-bussgeld-rekordstrafe-datenschutz-millionen-facebook},
note = {Datum des Zugriffs: 03.09.2021},
timestamp = {2021-09-03}
}
@Online{whatsapp4,
author = {Panagiotis Kolokythas},
title = {{WhatsApp verwirrt Nutzer mit neuen Nutzungsbedingungen}},
url = {https://www.pcwelt.de/news/WhatsApp-verwirrt-Nutzer-mit-neuen-Nutzungsbedingungen-10954208.html},
note = {Datum des Zugriffs: 03.09.2021},
timestamp = {2021-09-03}
}
@Online{snowdensignaltweet,
author = {Edward Snowden},
title = {{Empfehlung des Signal Messengers}},
url = {https://twitter.com/Snowden/status/1094963047129628674?s=20},
note = {Datum des Zugriffs: 23.09.2021},
timestamp = {2021-09-23}
}
@Online{signaleucommission,
author = {Politico},
title = {{Empfehlung des Signal Messengers für Mitglieder der EU-Kommission}},
url = {https://www.politico.eu/article/eu-commission-to-staff-switch-to-signal-messaging-app/},
note = {Datum des Zugriffs: 23.09.2021},
timestamp = {2021-09-23}
}
@Online{signalhome,
author = {Signal Technology Foundation},
title = {{Signal Homepage}},
url = {signal.org},
note = {Datum des Zugriffs: 02.09.2021},
timestamp = {2021-09-02}
}
@Online{signalfoundationhome,
author = {Signal Technology Foundation},
title = {{Signal Foundation Homepage}},
url = {https://signalfoundation.org},
note = {Datum des Zugriffs: 23.09.2021},
timestamp = {2021-09-23}
}
@Online{signaldprotocolinwhatsapp,
author = {moxie0},
title = {{WhatsApp's Signal Protocol integration is now complete}},
url = {https://signal.org/blog/whatsapp-complete/},
note = {Datum des Zugriffs: 20.10.2021},
timestamp = {2021-10-20}
}
@Online{whatsappalternativen,
author = {Cornelia Möhring - heise online},
title = {{WhatsApp-Alternativen: Welche Messenger gibt es? }},
url = {https://www.heise.de/tipps-tricks/WhatsApp-Alternativen-Welche-Messenger-gibt-es-3976153.html/},
note = {Datum des Zugriffs: 20.10.2021},
timestamp = {2021-10-20}
}
@Online{kasperskysignal,
author = {Ivan Kwiatkowski - kaspersky daily},
title = {{Signal – der sichere Messenger für alle, die Wert auf mehr Datenschutz legen}},
url = {https://www.kaspersky.de/blog/signal-privacy-security/27011/},
note = {Datum des Zugriffs: 20.10.2021},
timestamp = {2021-10-20}
}
@Online{signaldoubleratchetaufbau,
author = {Signal Technology Foundation},
title = {{Double Ratchet Aufbau}},
url = {https://signal.org/docs/specifications/doubleratchet/Set0_1.png},
note = {Datum des Zugriffs: 20.10.2021},
timestamp = {2021-10-20}
}
@Online{signaldiffihellmanratchetablauf,
author = {Signal Technology Foundation},
title = {{Diffi-Hellman Ratchet Ablauf}},
url = {https://signal.org/docs/specifications/doubleratchet/Set2_1.png},
note = {Datum des Zugriffs: 20.10.2021},
timestamp = {2021-10-20}
}
@Online{signaldoubleratchetablauf,
author = {Signal Technology Foundation},
title = {{Double Ratchet Ablauf}},
url = {https://signal.org/docs/specifications/doubleratchet/Set3_2.png},
note = {Datum des Zugriffs: 20.10.2021},
timestamp = {2021-10-20}
}
@Online{signaldoubleratchetablaufmehrfachversand,
author = {Signal Technology Foundation},
title = {{Double Ratchet Ablauf}},
url = {https://signal.org/docs/specifications/doubleratchet/Set3_3.png},
note = {Datum des Zugriffs: 20.10.2021},
timestamp = {2021-10-20}
}
@Online{signaldoubleratchet,
author = {Signal Technology Foundation},
title = {{Double Ratchet Spezifikation}},
url = {https://signal.org/docs/specifications/doubleratchet/},
note = {Datum des Zugriffs: 20.10.2021},
timestamp = {2021-10-20}
}
@Booklet{diffihellman,
title = {Applied Cryptography: Protocols, Algorithms and Source Code in C, 20th Anniversary Edition},
author = {Bruce Schneider},
year = {2015},
publisher = {Wiley},
isbn = {9781119096726},
note = {". . .the best introduction to cryptography I've ever seen. . . .The book the National Security Agency wanted never to be published. . . ." -Wired Magazine}
}
@Online{signalx3dhaufbau,
author = {Signal Technology Foundation},
title = {{X3DH Aufbau}},
url = {https://signal.org/docs/specifications/x3dh/X3DH.png},
note = {Datum des Zugriffs: 20.10.2021},
timestamp = {2021-10-20}
}
@Online{signalx3dh,
author = {Signal Technology Foundation},
title = {{X3DH Spezifikation}},
url = {https://signal.org/docs/specifications/x3dh/},
note = {Datum des Zugriffs: 20.10.2021},
timestamp = {2021-10-20}
}
@Online{signalxeddsa,
author = {Signal Technology Foundation},
title = {{The XEdDSA and VXEdDSA Signature Schemes}},
url = {https://signal.org/docs/specifications/xeddsa/},
note = {Datum des Zugriffs: 20.10.2021},
timestamp = {2021-10-20}
}
@Online{nytinterview,
author = {Nicole Perlroth, Katie Benner - The New York Times},
title = {{Subpoenas and Gag Orders Show Government Overreach, Tech Companies Argue}},
url = {https://www.nytimes.com/2016/10/05/technology/subpoenas-and-gag-orders-show-government-overreach-tech-companies-argue.html},
note = {Datum des Zugriffs: 23.09.2021},
timestamp = {2021-09-23}
}
@Online{schedule,
author = {Dan Bader, Sijmen Huizenga},
title = {{Schedule Dokumentation}},
url = {https://schedule.readthedocs.io/en/stable/},
note = {Datum des Zugriffs: 01.09.2021},
timestamp = {2021-09-01}
}
@Online{gitsignalcli,
author = {AsamK},
title = {{signal-cli GitHub Repository}},
url = {https://github.com/AsamK/signal-cli/},
note = {Datum des Zugriffs: 26.09.2021},
timestamp = {2021-09-26}
}
@Online{snapcraftrustup,
author = {snapcraft},
title = {{rustup - The Rust Language installer}},
url = {https://snapcraft.io/install/rustup/raspbian},
note = {Datum des Zugriffs: 26.09.2021},
timestamp = {2021-09-26}
}
@Online{gitlibsignalclient,
author = {AsamK},
title = {{Provide native lib for libsignal}},
url = {https://github.com/AsamK/signal-cli/wiki/Provide-native-lib-for-libsignal},
note = {Datum des Zugriffs: 26.09.2021},
timestamp = {2021-09-26}
}
@Online{gitlibzkgroup,
author = {signalapp},
title = {{Library for the Signal Private Group System.}},
url = {https://github.com/signalapp/zkgroup/releases},
note = {Datum des Zugriffs: 26.09.2021},
timestamp = {2021-09-26}
}
@Online{gitsignalclibuilding,
author = {AsamK},
title = {{Building signal-cli}},
url = {https://github.com/AsamK/signal-cli#building},
note = {Datum des Zugriffs: 26.09.2021},
timestamp = {2021-09-26}
}
@Online{signalcatpchagenerator,
author = {Signal},
title = {{Signal CAPTCHA Generator}},
url = {https://signalcaptchas.org/registration/generate.html},
note = {Datum des Zugriffs: 26.09.2021},
timestamp = {2021-09-26}
}
@Online{ctsignalartikel,
author = {Barbara Eder - c't 14/2021},
title = {{ Signal aus dem Terminal }},
url = {https://www.heise.de/select/ct/2021/14/2110907424679785321},
note = {Datum des Zugriffs: 26.09.2021},
timestamp = {2021-09-26}
}
@Online{gitsignalsystembus,
author = {AsamK},
title = {{DBus service - System bus}},
url = {https://github.com/AsamK/signal-cli/wiki/DBus-service#system-bus},
note = {Datum des Zugriffs: 26.09.2021},
timestamp = {2021-09-26}
}
@Online{bs,
author = {Leonard Richardson},
title = {{Beautiful Soup Dokumentation}},
url = {https://beautiful-soup-4.readthedocs.io/en/latest/},
note = {Datum des Zugriffs: 27.08.2021},
timestamp = {2021-08-27}
}
@Online{dadjokeapi,
author = {C653 Labs},
title = {{icanhazdadjoke API}},
url = {https://icanhazdadjoke.com/api},
note = {Datum des Zugriffs: 15.08.2021},
timestamp = {2021-08-15}
}
@Online{requests,
author = {Kenneth Reitz},
title = {{Python Requests}},
url = {https://github.com/psf/requests},
note = {Datum des Zugriffs: 15.08.2021},
timestamp = {2021-08-15}
}
@Online{yesnowtf,
author = {Moritz Kobrna et al.},
title = {{yesnowtf API}},
url = {https://yesno.wtf/#api},
note = {Datum des Zugriffs: 15.08.2021},
timestamp = {2021-08-15}
}
@Online{pgfplots,
author = {Dr. Christian Feuersänger},
title = {{Manual for Package pgfplots}},
url = {http://pgfplots.sourceforge.net/pgfplots.pdf},
note = {Aktualisiert: 05.06.2017, Datum des Zugriffs: 24.03.2021},
timestamp = {2021-03-24}
}
@Online{latexdiagrams,
author = {Sebastian Blänsdorf},
title = {{Einführung in das Textsatzsystem \LaTeX: Diagramme}},
url = {https://latexkurs.github.io/lecture/06_diagramme.pdf},
note = {Aktualisiert: 27.11.2019, Datum des Zugriffs: 24.03.2021},
timestamp = {2021-03-24}
}
@Online{mqtt,
author = {MQTT},
title = {{MQTT Homepage}},
url = {https://mqtt.org/},
note = {Datum des Zugriffs: 28.09.2021},
timestamp = {2021-09-28}
}
@Online{mqttexplorer,
author = {Thomas Nordquist},
title = {{MQTT Explorer Homepage}},
url = {https://mqtt-explorer.com/},
note = {Datum des Zugriffs: 29.09.2021},
timestamp = {2021-09-29}
}
@Online{mqttwildcards,
author = {IBM Corporation},
title = {{MQTT Client - Subscription wildcards Documentation}},
url = {https://www.ibm.com/docs/en/ibm-mq/7.5?topic=SSFKSJ_7.5.0/com.ibm.mq.javadoc.doc/WMQMQxrCClasses/wildcard.html},
note = {Datum des Zugriffs: 29.09.2021},
timestamp = {2021-09-29}
}
@Online{pahomqtt,
author = {Roger Light},
title = {{paho-mqtt Documentation}},
url = {https://pypi.org/project/paho-mqtt/}},
note = {Datum des Zugriffs: 29.09.2021},
timestamp = {2021-09-29}
}
@Online{rsapgp,
author = {Jeff Petters},
title = {{What is PGP Encryption and How Does It Work?}},
url = {https://www.varonis.com/blog/pgp-encryption/#:~:text=been%20tampered%20with.-,Encrypting%20Files,Threat%20Detection%20and%20Response%20Solution.},
note = {Aktualisiert: 04.06.2020, Datum des Zugriffs: 10.02.2021},
timestamp = {2021-02-10}
}
@Online{imsprofil,
author = {{IMS Messsysteme GmbH}},
title = {Unternehmensprofil der IMS Messsysteme GmbH},
url = {http://www.ims-gmbh.de/wp-content/uploads/2016/10/IMS-D0100_de-Unternehmensprofil.pdf},
note = {[Datum des Zugriffs: 20.09.2017]}
}
@Misc{imsIntern,
author = {{IMS Messsysteme GmbH}},
title = {Firmeninterne Dokumente und Schriftverkehr}
}
@Booklet{skript,
title = {Grundlagen der Werkstoffkunde},
author = {Schmidt, Herbert},
year = {2015},
note = {Skriptum zum Modul Grundlagen der Werkstoffkunde der Hochschule Bochum am Campus Velbert/Heiligenhaus 2. Auflage}
}
@Manual{imspect,
author = {{IMS Messsysteme GmbH}},
title = {IMSpect Kalibrierprogramm},
owner = {IMS Messsysteme GmbH},
year = {2004}
}
@Misc{ims,
author = {{IMS Messsysteme GmbH}},
date = {2020},
title = {Interne Dokumente}
}
@Comment{jabref-meta: databaseType:biblatex;}
% -*- coding: utf-8 -*-
% !TEX encoding = UTF-8 Unicode
% !TEX root = main.tex
\chapter{Beispiel Kapitel}
\label{chap:beispiel-kapitel}
In diesem Kapitel wird eine sehr kurze Einleitung in die Verwendung von \verb|LaTeX| beschrieben.\\
Für die Erstellung der Arbeit kann über \url{http://www.texstudio.org/} mit installierter TeX-Distribution \url{https://miktex.org/} das TeXstudio heruntergeladen werden.
\section{Abbildungen}
Eine Abbildung lässt sich einfach über einfügen: \par\medskip
\lstset{language=TeX}
\begin{lstlisting}
\begin{figure}[h]
\centering
\includegraphics[width=\textwidth]{foc-ac-dc.pdf}
\caption{Beschriftung der Abbildung}
\label{fig:foc-ac-dc}
\end{figure}
\FloatBarrier
\end{lstlisting}
Die breite der Abbildung kann einerseits skaliert oder direkt im Maßstab von \SI{14.5}{\centi\meter} erstellt werden.
Wenn die Abbildung maßstabsgetreu erstellt wird, muss \verb|\centering| und der optionale Befehl \verb|[width=\textwidth]| nicht zwingend übernommen werden.\par\medskip
Es werden beim Auftreten des Befehls \verb|\FloatBarrier| alle bis dahin eingefügten Float-Umgebungen gesetzt Das kann z.B. dazu verwendet werden, dass Floats, wie figure oder table, nicht unterhalb einer neuen \verb|section| oder \verb|chapter| ausgegeben werden.\par\medskip
Abbildung \ref{fig:foc-dc-ac} zeigt \ldots \par\medskip
\begin{figure}[h]
\centering
\includegraphics[width=\textwidth]{foc-dc-ac.pdf}
\caption{Beschriftung der Abbildung}
\label{fig:foc-dc-ac}
\end{figure}
\FloatBarrier
Durch setzten des \verb|[h]| hinter der \verb|figure| Umgebung, kann die Positionierung der Abbildung festgelegt werden.\par\medskip
Dabei sind folgende Werte ebenfalls möglich:
\begin{enumerate}
\item h (here) - Gleicher Ort
\item t (top) - Oben auf der Seite
\item b (bottom) - Unten auf der Seite
\item p (page) - Auf einer eigenen Seite
\item ! (override) - Erzwingt die angegebene Position
\end{enumerate}
\section{Tabellen}\label{sec:tab}
Zur Erstellung einfacher Tabellen, bietet die Website \url{http://www.tablesgenerator.com/} eine einfach zu bedienende Oberfläche. \par\medskip %erzeugt einen mittleren Abstand
Für komplexere Tabellen können die \verb|multicol| und \verb|multirow| Pakete verwendet werden, wie in Tabelle \ref{tab:vgl_mosfet} dargestellt \cite{dalton}.
\begin{table}[h]
\centering
\renewcommand{\arraystretch}{1.6}
\begin{tabular}{lc|c|c|c|l}
\cline{3-5}
& \multicolumn{1}{l|}{} & \multicolumn{3}{c|}{MOSFET} & \\ \cline{3-5}
& \multicolumn{1}{l|}{} & IRFS7530 & IPB019N08N3 & CSD19536KCS & \\ \cline{3-5}
& \multicolumn{1}{l|}{} & International Rectifier & Infineon & Texas Instruments & \\ \cline{1-5}
\multicolumn{1}{|l|}{\multirow{4}{*}{\begin{turn}{90}Parameter\end{turn}}} & $Q_{\mathsf{G}}$ & 354 \nano\coulomb & 206 \nano\coulomb & 153 \nano\coulomb & \\ \cline{2-5}
\multicolumn{1}{|l|}{} & $Q_{\mathsf{GS}}$ & 62 \nano\coulomb & 50 \nano\coulomb & 37 \nano\coulomb & \\ \cline{2-5}
\multicolumn{1}{|l|}{} & $Q_{\mathsf{GD}}$ & 73 \nano\coulomb & 30 \nano\coulomb & 17 \nano\coulomb & \\ \cline{2-5}
\multicolumn{1}{|l|}{} & $R_{\mathsf{DSon}}$ & 1,4 \milli\ohm & 1,9 \milli\ohm & 3,5 \milli\ohm & \\ \cline{1-5}
\end{tabular}
\caption{Vergleich verschiedener MOSFET \cite{dalton}}
\label{tab:vgl_mosfet}
\end{table}
\FloatBarrier
\section{Zitate}\label{sec:cite}
Für Zitationen wird \verb|BibLaTeX| verwendet. Als Backend wird \verb|bibtex| vom Compiler verlangt.
\begin{quote}
\enquote{Bei jeder permanentmagneterregten Synchronmaschine ändern sich die Induktivitäten in Abhängigkeit von der Last. In erster Linie sind dafür die Sättigungseffekte, aber auch die Kreuzkopplung verantwortlich.} \autocite[S.~2]{ternes2015}
\end{quote}
Im Text zitierte Werke werden über die Syntax \verb|\textcite[S.~2]{ternes2015}| korrekt zitiert. Beispielsweise: Wie in \cite{ternes2015} erläutert, sind die Induktivitäten abhängig von der Last \ldots \par\medskip
Der aktuelle Stil des Literaturverzeichnisses und der Zitationen ist \verb|IEEEtran|, kann aber auch in Absprache geändert werden, dazu empfiehlt es sich, die \verb|BibLaTeX|-Dokumentation zu konsultieren.\\
\clearpage
\section{Anhänge}\label{sec:Anhang}
Um Anhänge zu referenzieren, können diese mit Hilfe des erstellten Anhangs (vgl. \ref{anhang_LastenheftEpOS}) referenziert werden.
\section{Formeln}\label{sec:Formeln}
Bei Implementierung von Formeln mit eingesetzten Werten, erweist sich eine Kombination von Tabelle und Formel als Sinnvoll. Tabelle \ref{tab:param_voltageDrop} zeigt die in Formel \ref{eq:voltagedrop} eingesetzten Parameter, mit Beschreibung sowie dem zugehörigen Wert \cite{drv8303}. \par\medskip
\begin{table}[h]
\centering
\begin{tabular}{ccc}
\hline
Parameter & Beschreibung & Wert \\ \hline
$V_{\mathsf{0}}$ & Maximale Ausgangsspannung & 3,3\ \volt \\
$V_{\mathsf{REF}}$ & Referenz-Spannung & 3,3\ \volt \\
$G$ & Verstärkungsfaktor & 40 $\frac{\volt}{\volt}$ \\
${R}_{\mathsf{SHUNT}}$ & Shunt-Widerstand & $500\ \micro\ohm$ \\ \hline
\end{tabular}
\caption{Parameter der Operationsverstärker-Einstellungen des DRV8303}
\label{tab:param_voltageDrop}
\end{table}
\begin{equation}
\centering
V_{\mathsf{Smax}} = {\lvert ({SN}_{\mathsf{x}} - {SP}_{\mathsf{x}}) \rvert}_{\mathsf{max}} = \left( \frac{ \left({V}_{0} - \frac{ {V}_{\mathsf{REF}}}{2} \right)}{G}\right) = 41,25\ \milli \volt
\label{eq:voltagedrop}
\end{equation}
\FloatBarrier
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "main"
%%% TeX-open-quote: "\\enquote{"
%%% TeX-close-quote: "}"
%%% LaTeX-csquotes-open-quote: "\\enquote{"
%%% LaTeX-csquotes-close-quote: "}"
%%% End:
\chapter{Anhang}
Der Anhang kann dazu dienen große Bilder oder langen Quellcode zu beinhalten, falls dieser für den Text der Dokumentation unübersichtlich gestalten würde.
\section{Skizze}
\label{sec:anhang_konzept}
\ No newline at end of file
This diff is collapsed.
% -*- coding: utf-8 -*-
% !TEX encoding = UTF-8 Unicode
% !TEX root = main.tex
\chapter{Fazit und Ausblick}
\label{chap:fazit}
Der Signalbot wurde mit dem Ziel programmiert verschiedene Gruppen um Funktionen zu bereichern, die Signal normalerweise nicht zur Verfügung stellt. Dabei waren Anregungen, Akzeptanz und Nutzverhalten der Anwender*innen der primäre Fokus. Einzelne, neue Funktionen wurden schnellstmöglich veröffentlicht, um diese von den Nutzer*innen testen zu lassen. Aus dieser Warte kann zum Projektabschluss behauptet werden, dass das Projekt ein voller Erfolg war. Die meisten Befehle des Bots werden regelmäßig und auf täglicher Basis genutzt.
Der Bot ist bereits ein Teil der Planung und Organisation vom GG eSport Jugendzentrum. Neben den Community-Funktionen werden auch regelmäßige Erinnerungen in die Gruppe geschrieben, um sich in das Wochenprogramm einzutragen oder die Stundenzettel am Ende des Monats abzuschicken.
Zusammen mit der Jugendkirche Düsseldorf ist der \lstinline[breaklines=true]|.challenge|-Command entstanden, welcher nun regelmäßig genutzt wird. Es ist zur Tradition geworden, dass die gestellten Herausforderungen ernst genommen und dokumentiert werden, sodass man trotz der Pandemiesituation ein virtuelles Gruppengefühl erzeugen kann.
Zuletzt wurde der Signalbot samt der zugrunde liegenden Technik am 06.08.21 der Firma \ac{IMS} vorgestellt. Es sollte eruiert werden, ob die M2M-Kommunikation aus Abschnitt \ref{sec:mods_m2m} sinnvoll für die Datenübertragung von Sensordaten sein könnte, um eine Basis für Predictive Maintenance zu schaffen. Diese Präsentation baute auf die Bachelorarbeit von Erik Balaščák auf. Die Rückmeldung der IMS war positiv und Signal wird in die Menge der möglichen Technologien zur Datenübertragung im Predicitve Maintenance aufgenommen.
\section{Persönliches Fazit}
\label{sec:fazit_persoenlich}
\subsection{Frederic Aust}
\label{sec:fazit_persoenlich_fred}
Das Projekt war eine interessante Erfahrung, da es vollständig remote absolviert wurde und so gezeigt hat, dass diese Arbeitsweise sehr gut funktionieren kann. Nach den ersten Anlaufschwierigkeiten wurde uns sehr schnell bewusst, dass der Signalbot viel Potential hat. Insbesondere der Wechsel auf einen deamon, welcher die Antwortzeit von mehreren Minuten zu weniger als eine Sekunde reduziert hat, war der Startschuss für eine rapide Weiterentwicklung des Bots. Diese Entwicklung war mit am faszinierendsten und hat auch immer neue Ideen hervorgebracht. Das super positive Feedback unserer User hat ebenfalls sehr angespornt auch bis in die Abendstunden hinein zu programmieren und den Bot immer weiter auszubauen. Ich denke es gibt noch viele weitere Anwendungszwecke, wie beispielsweise die Abwicklung von Buchungen für Restaurants, Steuerung der Smart-Home-Automatisierung oder als Supportbot für Unternehmen. Als Communitybot wird der Signalbot definitiv weitergepflegt und bekommt noch immer regelmäßig Anfragen für Erweiterungen über den \lstinline[breaklines=true]|.request| Befehl. Wann immer Zeit ist arbeite ich an der Umsetzung und wenn es zeitlich passt am liebsten mit geteilten Bildschirm, was die Entwicklungszeit drastisch reduziert hat. Abschließend hat dieses Projekt dazu geführt, dass ich mich in Python erheblich weiter entwickelt habe und auch die vorausschauende Planung von Programmstrukturen und den Modulen fällt mir noch leichter. Für ein neues Projekt wäre ich definitiv aufgeschlossen und hoffe dass wir mit unserem Bot noch mehr Leute begeistern können eigene Instanzen anzulegen.
\subsection{Philip Maas}
\label{sec:fazit_persoenlich_philip}
Die Arbeit am Signalbot hat unglaublich viel Spaß gemacht. Nachdem das anfängliche Hindernis der Signal-CLI-Installation überwunden war und wir mit dem ersten \lstinline[breaklines=true]|.echo|-Kommando eine automatische Reaktion des Bots forcieren konnten ist unser Ideen- und Arbeitspensum regelrecht explodiert. Für mich war dieses Semester ein vielfaches Novum. Dies war mein erstes Semester im Masterstudiengang, mein erstes Coronasemester und mein erstes Semester seit der Ausbildung in dem ich wieder in Vollzeit arbeiten muss. Die generelle Auslastung war fulminant und an manchen Tagen überwältigend. Deshalb wurden viele Abendstunden für die Programmierung des Bots verwendet. Allerdings hat unser Entdeckungsdrang und die regelmäßige positive Rückmeldung der Testpersonen und -Gruppen uns zu einem Endprodukt getrieben auf das Ich sehr stolz bin. Ich freue mich darauf in Zukunft privat den Signalbot weiter zu verbessern und neue Funktionen, ein Refactoring und die Nutzung einer tatsächlichen Datenbank zu implementieren. Ich hoffe, dass der Signalbot auch von kommenden Studierenden genutzt und weiterentwickelt wird.
\section{Ausblick}
\label{sec:fazit_ausblick}
Obwohl die Arbeit für die beiden Hochschulfächer beendet ist, wird der Signalbot in Zukunft weiterentwickelt. Sobald Nutzer*innen per \lstinline[breaklines=true]|.request| neue Funktionalitäten anfragen werden diese implementiert. Falls der Signalbot in einer höheren Gruppenzahl verwendet wird, müssen für die Geburtstags-, Zitat- und Veranstaltungsfunktionalitäten eine Datenbank verwendet werden. Da an diversen Stellen bereits präferiert mit dem JSON-Format gearbeitet wird, bietet sich eine MongoDB an, aber eine SQL-Variante wäre ebenso denkbar. Beide können mit wenigen Codezeilen über Python angesprochen werden. Da die jetzige Implementierung bereits dynamisch ist, wird der Umzug erleichtert. Zuletzt muss immer wieder Refactoring betrieben werden, um den Code möglichst schlank und lesbar zu halten. In der betterhelp.json gibt es bis dato einen Schlüssel \lstinline[breaklines=true]|_Func| für jedes Objekt, mit dem in Zukunft die Funktionen für die einzelnen Befehle hinterlegt und aufgerufen werden können.
Da in diesem Projekt mit diversen Anwendungsbereichen gearbeitet wurde, für die Python nicht die primäre Wahl ist, gibt es in den verwendeten Bibliotheken mit Sicherheit Funktionen, die nicht genutzt und somit eigens implementiert wurden. Hier lohnt es sich in regelmäßigen Zeitabständen neue Erkenntnisse, die in Python gemacht wurden, in das Projekt zu übernehmen.
\ No newline at end of file
This diff is collapsed.
docs/_img/KDFChain.png

26.3 KiB

File added
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.6, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 320 160" style="enable-background:new 0 0 320 160;" xml:space="preserve">
<style type="text/css">
.st0{fill:#F0F0F0;}
.st1{fill:none;stroke:#CB2029;stroke-width:2;stroke-miterlimit:10;}
.st2{fill:#CB2029;}
.st3{fill:#FFFFFF;}
</style>
<rect class="st0" width="320" height="160"/>
<g id="Layer_2_copy_3">
<line class="st1" x1="61.3" y1="49.7" x2="116.5" y2="75.9"/>
<line class="st1" x1="61.3" y1="110.9" x2="116.5" y2="84.7"/>
<line class="st1" x1="163.7" y1="80.3" x2="254" y2="80.3"/>
<circle class="st2" cx="133.1" cy="80.3" r="30.6"/>
<g>
<path class="st3" d="M114.2,76.4c0,0.1,0,0.1,0,0.2v0.2v10.6c0,0.4,0.3,0.7,0.7,0.7h36.7c0.4,0,0.7-0.3,0.7-0.7V76.6v-0.1
c0-0.1,0-0.1,0-0.2c0.1-0.3-0.1-0.7-0.4-0.7l-5.9-2.9c-0.1,0-0.2-0.1-0.3-0.1h-24.1c-0.1,0-0.2,0-0.3,0.1l-6.7,2.9
C114.3,75.7,114.1,76.1,114.2,76.4z M121.6,73.9h23.8l3.9,2h-32.2L121.6,73.9z M115.5,77.3h35.4v9.2h-35.4
C115.5,86.5,115.5,77.3,115.5,77.3z"/>
<path class="st3" d="M118.7,81c-0.6,0-0.8,0.4-0.8,0.8s0.4,0.8,0.8,0.8s0.8-0.4,0.8-0.8S119.2,81,118.7,81z"/>
<circle class="st3" cx="121.8" cy="82" r="0.8"/>
<path class="st3" d="M148.8,79h-2c-0.2,0-0.4,0.2-0.4,0.4v5c0,0.2,0.2,0.4,0.4,0.4h2c0.2,0,0.4-0.2,0.4-0.4v-5
C149.1,79.2,149,79,148.8,79z M148.4,84.1h-1.3v-4.5h1.3V84.1z"/>
<path class="st3" d="M145,79h-2c-0.2,0-0.4,0.2-0.4,0.4v5c0,0.2,0.2,0.4,0.4,0.4h2c0.2,0,0.4-0.2,0.4-0.4v-5
C145.3,79.2,145.2,79,145,79z M144.6,84.1h-1.3v-4.5h1.3V84.1z"/>
<path class="st3" d="M134,89.6h-1.3c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5h1.3c0.3,0,0.5-0.2,0.5-0.5
C134.5,89.9,134.2,89.6,134,89.6z"/>
<path class="st3" d="M137.2,89.6h-1.3c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5h1.3c0.3,0,0.5-0.2,0.5-0.5
C137.7,89.9,137.5,89.6,137.2,89.6z"/>
<path class="st3" d="M112.6,74.2c-0.3-0.2-0.6-0.1-0.7,0.2c-0.3,0.5-0.5,0.8-0.5,1.4c0,0.3,0.2,0.6,0.5,0.6c0,0,0,0,0.1,0
c0.3,0,0.5-0.2,0.5-0.5c0-0.4,0.2-0.7,0.4-0.9C112.9,74.7,112.8,74.4,112.6,74.2z"/>
<path class="st3" d="M124.4,89.6h-1.3c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5h1.3c0.3,0,0.5-0.2,0.5-0.5
C124.9,89.9,124.7,89.6,124.4,89.6z"/>
<path class="st3" d="M118.1,89.6h-1.3c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5h1.3c0.3,0,0.5-0.2,0.5-0.5
C118.5,89.9,118.3,89.6,118.1,89.6z"/>
<path class="st3" d="M114.8,89.6c-0.4,0-0.7-0.1-1-0.3c-0.3-0.1-0.6,0-0.7,0.3c-0.1,0.3,0,0.6,0.3,0.7c0.5,0.2,0.9,0.4,1.4,0.4
l0,0c0.3,0,0.5-0.2,0.5-0.5C115.4,89.9,115.1,89.6,114.8,89.6z"/>
<path class="st3" d="M140.4,89.6h-1.3c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5h1.3c0.3,0,0.5-0.2,0.5-0.5
C140.9,89.9,140.7,89.6,140.4,89.6z"/>
<path class="st3" d="M121.2,89.6h-1.3c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5h1.3c0.3,0,0.5-0.2,0.5-0.5
C121.7,89.9,121.5,89.6,121.2,89.6z"/>
<path class="st3" d="M127.6,89.6h-1.3c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5h1.3c0.3,0,0.5-0.2,0.5-0.5
C128.2,89.9,127.9,89.6,127.6,89.6z"/>
<path class="st3" d="M154.4,86.4c-0.3,0-0.5,0.2-0.5,0.5v0.3c0,0.3-0.1,0.6-0.2,0.7c-0.1,0.3,0.1,0.6,0.3,0.7c0.1,0,0.1,0,0.2,0
c0.2,0,0.4-0.1,0.5-0.4c0.1-0.4,0.2-0.7,0.2-1.1v-0.3C155,86.6,154.7,86.4,154.4,86.4z"/>
<path class="st3" d="M143.7,89.6h-1.3c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5h1.3c0.3,0,0.5-0.2,0.5-0.5
C144,89.9,143.9,89.6,143.7,89.6z"/>
<path class="st3" d="M154.4,80.1c-0.3,0-0.5,0.2-0.5,0.5v1.3c0,0.3,0.2,0.5,0.5,0.5c0.3,0,0.5-0.2,0.5-0.5v-1.3
C155,80.3,154.7,80.1,154.4,80.1z"/>
<path class="st3" d="M154.4,76.8c-0.3,0-0.5,0.2-0.5,0.5v1.3c0,0.3,0.2,0.5,0.5,0.5c0.3,0,0.5-0.2,0.5-0.5v-1.3
C155,77.1,154.7,76.8,154.4,76.8z"/>
<path class="st3" d="M154.4,83.3c-0.3,0-0.5,0.2-0.5,0.5V85c0,0.3,0.2,0.5,0.5,0.5c0.3,0,0.5-0.2,0.5-0.5v-1.3
C155,83.5,154.7,83.3,154.4,83.3z"/>
<path class="st3" d="M146.7,89.6h-1.3c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5h1.3c0.3,0,0.5-0.2,0.5-0.5
C147.3,89.9,147,89.6,146.7,89.6z"/>
<path class="st3" d="M150,89.6h-1.3c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5h1.3c0.3,0,0.5-0.2,0.5-0.5
C150.5,89.9,150.3,89.6,150,89.6z"/>
<path class="st3" d="M152.8,89.2c-0.3,0.2-0.7,0.4-0.9,0.4s-0.5,0.3-0.5,0.6c0,0.3,0.3,0.5,0.5,0.5h0.1c0.6-0.1,0.9-0.3,1.4-0.6
c0.3-0.2,0.3-0.5,0.2-0.7C153.4,89.2,153.1,89.1,152.8,89.2z"/>
<path class="st3" d="M130.9,89.6h-1.3c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5h1.3c0.3,0,0.5-0.2,0.5-0.5
C131.3,89.9,131.1,89.6,130.9,89.6z"/>
<path class="st3" d="M135.5,70.9h1.3c0.3,0,0.5-0.2,0.5-0.5c0-0.3-0.2-0.5-0.5-0.5h-1.3c-0.3,0-0.5,0.2-0.5,0.5
S135.3,70.9,135.5,70.9z"/>
<path class="st3" d="M141.9,70.9h1.3c0.3,0,0.5-0.2,0.5-0.5c0-0.3-0.2-0.4-0.5-0.4h-1.3c-0.3,0-0.5,0.2-0.5,0.5
C141.4,70.7,141.6,70.9,141.9,70.9z"/>
<path class="st3" d="M129.2,70.9h1.3c0.3,0,0.5-0.2,0.5-0.5c0-0.3-0.2-0.5-0.5-0.5h-1.3c-0.3,0-0.5,0.2-0.5,0.5
C128.6,70.7,128.9,70.9,129.2,70.9z"/>
<path class="st3" d="M132.4,70.9h1.3c0.3,0,0.5-0.2,0.5-0.5c0-0.3-0.3-0.4-0.5-0.4h-1.3c-0.3,0-0.5,0.2-0.5,0.5
C131.9,70.7,132.1,70.9,132.4,70.9z"/>
<path class="st3" d="M138.7,70.9h1.3c0.3,0,0.5-0.2,0.5-0.5c0-0.3-0.2-0.5-0.5-0.5h-1.3c-0.3,0-0.5,0.2-0.5,0.5
S138.4,70.9,138.7,70.9z"/>
<path class="st3" d="M150.9,73.1l1.1,0.6c0.1,0,0.2,0.1,0.2,0.1c0.2,0,0.4-0.1,0.5-0.3c0.1-0.3,0-0.6-0.3-0.7l-1.1-0.6
c-0.3-0.1-0.6,0-0.7,0.3C150.5,72.7,150.6,73,150.9,73.1z"/>
<path class="st3" d="M145.2,70.9h0.6c0.2,0,0.5,0,0.7,0.1h0.1c0.2,0,0.5-0.2,0.5-0.4c0.1-0.3-0.1-0.6-0.4-0.7
c-0.3-0.1-0.7-0.1-0.8-0.1h-0.7c-0.3,0-0.5,0.2-0.5,0.5C144.7,70.7,144.9,70.9,145.2,70.9z"/>
<path class="st3" d="M153.8,75.5c0.1,0.2,0.3,0.4,0.5,0.4h0.1c0.3-0.1,0.5-0.4,0.4-0.7c-0.1-0.5-0.4-0.9-0.7-1.3
c-0.2-0.2-0.5-0.3-0.7-0.1c-0.2,0.2-0.3,0.5-0.1,0.7C153.7,74.9,153.7,75.1,153.8,75.5z"/>
<path class="st3" d="M148,71.7l1.1,0.6c0.1,0,0.2,0.1,0.2,0.1c0.2,0,0.4-0.1,0.5-0.3c0.1-0.3,0-0.6-0.3-0.7l-1.1-0.6
c-0.3-0.1-0.6,0-0.7,0.3C147.6,71.3,147.7,71.6,148,71.7z"/>
<path class="st3" d="M111.9,82.7c0.3,0,0.5-0.2,0.5-0.5v-1.3c0-0.3-0.2-0.5-0.5-0.5c-0.3,0-0.5,0.2-0.5,0.5v1.3
C111.4,82.5,111.7,82.7,111.9,82.7z"/>
<path class="st3" d="M113.8,73.9c0.1,0,0.1,0,0.2,0l1.1-0.6c0.3-0.1,0.4-0.4,0.3-0.7c-0.1-0.3-0.4-0.4-0.7-0.3l-1.1,0.6
c-0.3,0.1-0.4,0.4-0.3,0.7C113.4,73.7,113.6,73.9,113.8,73.9z"/>
<path class="st3" d="M111.9,79.4c0.3,0,0.5-0.2,0.5-0.5v-1.3c0-0.3-0.2-0.5-0.5-0.5c-0.3,0-0.5,0.2-0.5,0.5V79
C111.4,79.3,111.7,79.4,111.9,79.4z"/>
<path class="st3" d="M112.4,87.4c0-0.3-0.3-0.6-0.6-0.5c-0.3,0-0.5,0.3-0.5,0.6c0,0.6,0.2,0.9,0.4,1.4c0.1,0.2,0.3,0.3,0.5,0.3
c0.1,0,0.2,0,0.3-0.1c0.3-0.1,0.4-0.5,0.2-0.7C112.5,88,112.4,87.7,112.4,87.4z"/>
<path class="st3" d="M111.9,85.9c0.3,0,0.5-0.2,0.5-0.5v-1.3c0-0.3-0.2-0.5-0.5-0.5c-0.3,0-0.5,0.2-0.5,0.5v1.3
C111.4,85.7,111.7,85.9,111.9,85.9z"/>
<path class="st3" d="M119.7,71.4c0.1,0,0.1,0,0.2,0l0.7-0.4c0.1-0.1,0.3-0.1,0.4-0.1c0.3-0.1,0.5-0.4,0.4-0.7
c-0.1-0.3-0.4-0.5-0.7-0.4c-0.2,0-0.4,0.1-0.6,0.2l-0.7,0.4c-0.3,0.1-0.4,0.4-0.3,0.7C119.3,71.3,119.5,71.4,119.7,71.4z"/>
<path class="st3" d="M122.8,70.9h1.3c0.3,0,0.5-0.2,0.5-0.5c0-0.3-0.2-0.5-0.5-0.5h-1.3c-0.3,0-0.5,0.2-0.5,0.5
S122.5,70.9,122.8,70.9z"/>
<path class="st3" d="M125.9,70.9h1.3c0.3,0,0.5-0.2,0.5-0.5c0-0.3-0.2-0.5-0.5-0.5h-1.3c-0.3,0-0.5,0.2-0.5,0.5
S125.7,70.9,125.9,70.9z"/>
<path class="st3" d="M116.8,72.6c0.1,0,0.1,0,0.2,0l1.1-0.6c0.3-0.1,0.4-0.4,0.3-0.7s-0.4-0.4-0.7-0.3l-1.1,0.6
c-0.3,0.1-0.4,0.4-0.3,0.7C116.3,72.5,116.6,72.6,116.8,72.6z"/>
</g>
<path class="st3" d="M41,60.1c-10.5,0-21-1.7-21-4.9V42.7c0-3.2,10.6-4.9,21-4.9s21,1.8,21,4.9v12.5C62,58.4,51.5,60.1,41,60.1z"/>
<path class="st3" d="M41,122.3c-10.5,0-21-1.7-21-4.9v-12.5c0-3.2,10.6-4.9,21-4.9s21,1.7,21,4.9v12.5
C62,120.6,51.5,122.3,41,122.3z"/>
<g>
<g>
<path d="M29.6,46.7C29.6,46.7,29.5,46.7,29.6,46.7c-2.2-0.4-4.2-0.7-5.7-1.2c-0.2-0.1-0.3-0.2-0.2-0.4c0.1-0.2,0.2-0.3,0.4-0.2
c1.5,0.5,3.4,0.8,5.6,1.1c0.2,0,0.3,0.2,0.3,0.4C29.9,46.5,29.7,46.7,29.6,46.7z"/>
<path d="M41,47.4c-2.2,0-4.6-0.1-6.6-0.3c-0.3,0-0.5-0.2-0.4-0.5c0-0.3,0.2-0.4,0.5-0.4c2.1,0.2,4.4,0.3,6.6,0.3
c7,0,13.4-0.7,17.2-2c0.2-0.1,0.5,0.1,0.6,0.3c0.1,0.2-0.1,0.5-0.3,0.6C54.6,46.8,48.1,47.4,41,47.4z"/>
<path d="M41,60.1c-10.5,0-21-1.7-21-4.9V42.7c0-3.2,10.6-4.9,21-4.9s21,1.8,21,4.9v12.5C62,58.4,51.5,60.1,41,60.1z M41,38.9
c-12.3,0-20,2.1-20,3.7v12.5c0,1.6,7.7,3.7,20,3.7s20-2.1,20-3.7V42.7C61,41.2,53.3,38.9,41,38.9z"/>
</g>
</g>
<g>
<g>
<path d="M29.6,108.8C29.6,108.8,29.5,108.8,29.6,108.8c-2.2-0.4-4.2-0.7-5.7-1.2c-0.2-0.1-0.3-0.2-0.2-0.4
c0.1-0.2,0.2-0.3,0.4-0.2c1.5,0.5,3.4,0.8,5.6,1.1c0.2,0,0.3,0.2,0.3,0.4C29.9,108.7,29.7,108.8,29.6,108.8z"/>
<path d="M41,109.6c-2.2,0-4.6-0.1-6.6-0.3c-0.3,0-0.5-0.2-0.4-0.5c0-0.3,0.2-0.4,0.5-0.4c2.1,0.2,4.4,0.3,6.6,0.3
c7,0,13.4-0.7,17.2-2c0.2-0.1,0.5,0.1,0.6,0.3c0.1,0.2-0.1,0.5-0.3,0.6C54.6,108.9,48.1,109.6,41,109.6z"/>
<path d="M41,122.3c-10.5,0-21-1.7-21-4.9v-12.5c0-3.2,10.6-4.9,21-4.9s21,1.7,21,4.9v12.5C62,120.6,51.5,122.3,41,122.3z
M41,101.1c-12.3,0-20,2.1-20,3.7v12.5c0,1.6,7.7,3.7,20,3.7s20-2.1,20-3.7v-12.5C61,103.4,53.3,101.1,41,101.1z"/>
</g>
</g>
<path class="st3" d="M298,89.9c1.2,0.7,2,1.6,2,2.5V105c0,4.3-13.8,5.9-23.1,5.9c-9.3,0-23.1-1.6-23.1-5.9V92.4
c0-0.9,0.7-1.9,2-2.5c-1.2-0.7-2-1.6-2-2.5V74.9c0-0.9,0.7-1.9,2.1-2.5c-1.2-0.7-2.1-1.6-2.1-2.5V57.1c0-4.3,13.8-5.9,23.1-5.9
c9.3,0,23.1,1.6,23.1,5.9v12.6c0,0.9-0.7,1.9-2.1,2.5c1.2,0.7,2.1,1.6,2.1,2.5v12.6C300,88.4,299.3,89.2,298,89.9z"/>
<path d="M269.7,95.5c2.4,0.2,4.9,0.3,7.7,0.3c7.2,0,14-0.7,18.1-2.1c0.4-0.1,0.7,0.1,0.7,0.4c0.1,0.4-0.1,0.7-0.5,0.7
c-4.2,1.4-11.1,2.1-18.5,2.1c-2.6,0-5.2-0.1-7.7-0.4c-0.4,0-0.7-0.4-0.7-0.7C269,95.8,269.4,95.5,269.7,95.5z M264.5,95.1
c-2.5-0.5-4.7-0.9-6.3-1.5c-0.2-0.1-0.5,0-0.6,0.3c-0.1,0.2,0,0.5,0.3,0.6c1.7,0.7,3.7,1.1,6.3,1.6h0.1c0.2,0,0.4-0.2,0.5-0.4
C265,95.4,264.8,95.1,264.5,95.1z M298,89.9c1.2,0.7,2,1.6,2,2.5V105c0,4.3-13.8,5.9-23.1,5.9c-9.3,0-23.1-1.6-23.1-5.9V92.4
c0-0.9,0.7-1.9,2-2.5c-1.2-0.7-2-1.6-2-2.5V74.9c0-0.9,0.7-1.9,2.1-2.5c-1.2-0.7-2.1-1.6-2.1-2.5V57.1c0-4.3,13.8-5.9,23.1-5.9
c9.3,0,23.1,1.6,23.1,5.9v12.6c0,0.9-0.7,1.9-2.1,2.5c1.2,0.7,2.1,1.6,2.1,2.5v12.6C300,88.4,299.3,89.2,298,89.9z M257.7,71.4
c0.7,0.3,1.7,0.7,2.8,0.8c3.5,0.8,9.1,1.7,16.3,1.7c7.4,0,12.8-0.7,16.3-1.7c1.1-0.3,2.1-0.7,2.8-0.8c1.5-0.7,2.1-1.2,2.1-1.7V57.1
c0-1.5-7.4-4.2-21.5-4.2c-14.1,0-21.5,2.7-21.5,4.2v12.6C255.5,70.2,256.2,70.9,257.7,71.4z M296.2,90.7
c-4.9,1.8-13.1,2.4-19.2,2.4c-6.3,0-14.6-0.7-19.2-2.4c-1.4,0.7-2.1,1.1-2.1,1.7V105c0,1.5,7.4,4.2,21.5,4.2
c14.1,0,21.5-2.7,21.5-4.2V92.4C298.3,92,297.7,91.4,296.2,90.7z M298.3,74.9c0-0.5-0.7-1-2.2-1.7c-4.9,1.8-13,2.4-19.1,2.4
c-6.3,0-14.4-0.7-19.1-2.4c-1.5,0.7-2.1,1.2-2.1,1.7v12.6c0,0.5,0.7,1,2.1,1.7c0.7,0.3,1.7,0.7,2.7,0.8c3.5,0.9,9.1,1.7,16.5,1.7
c7.4,0,13-0.7,16.5-1.7c1-0.3,2.1-0.7,2.7-0.8c1.4-0.7,2.1-1.1,2.1-1.7L298.3,74.9L298.3,74.9z M295.4,76.1
c-4.1,1.3-10.8,2.1-18.1,2.1c-2.6,0-5.1-0.1-7.7-0.3c-0.4,0-0.7,0.3-0.7,0.6c0,0.4,0.3,0.7,0.7,0.7c2.4,0.2,5,0.4,7.7,0.4
c7.4,0,14.3-0.7,18.5-2.1c0.4-0.1,0.6-0.5,0.5-0.7C296.2,76.2,295.8,76,295.4,76.1z M264.5,77.5c-2.5-0.5-4.7-0.9-6.3-1.5
c-0.2-0.1-0.5,0-0.6,0.3c-0.1,0.2,0,0.5,0.3,0.6c1.7,0.7,3.7,1.1,6.3,1.6h0.1c0.2,0,0.4-0.2,0.5-0.4
C265,77.8,264.8,77.6,264.5,77.5z M269.6,61.4c2.4,0.2,5,0.4,7.7,0.4c7.4,0,14.3-0.7,18.5-2.1c0.4-0.1,0.6-0.5,0.5-0.7
c-0.1-0.3-0.5-0.6-0.7-0.4c-4.1,1.3-10.8,2.1-18.1,2.1c-2.6,0-5.1-0.1-7.7-0.3c-0.4,0-0.7,0.3-0.7,0.6
C268.9,61.1,269.2,61.4,269.6,61.4z M264.4,60.7c0.2,0,0.4-0.2,0.5-0.4c0-0.3-0.1-0.5-0.4-0.5c-2.5-0.5-4.7-0.9-6.3-1.5
c-0.2-0.1-0.5,0-0.6,0.3c-0.1,0.2,0,0.5,0.3,0.6C259.7,59.7,261.8,60.2,264.4,60.7L264.4,60.7z"/>
</g>
</svg>
docs/_img/SignalCaptcha.png

359 KiB

docs/_img/SignalCaptchaToken.png

31.2 KiB

docs/_img/X3DH.png

32.8 KiB

File added
docs/_img/doubleRatchetDHRatchetSet2_1.png

42.8 KiB

docs/_img/doubleRatchetSet3_2.png

21.7 KiB

docs/_img/doubleRatchetSet3_3.png

24.8 KiB

docs/_img/freegames.png

233 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment