migrate to hugo static site generator

This commit is contained in:
Renken 2024-05-12 15:01:12 +02:00
parent 83e81919a0
commit 7f01f154a6
Signed by: renken
GPG key ID: 1F2BB159B645E575
82 changed files with 951 additions and 1858 deletions

5
.gitignore vendored
View file

@ -1,3 +1,2 @@
/build/
/build_*/
/.venv/
/public/
/resources/

View file

@ -1,4 +1,4 @@
image: python:3.9.16-slim-bullseye
image: debian:bookworm
stages:
- analyse
@ -15,35 +15,25 @@ cache:
- apt-get dist-upgrade -y
- >
apt-get install --no-install-recommends -y
curl
git
make
plantuml
python3
python3-distutils
hugo
rsync
- ln -s /usr/bin/python3 /usr/bin/python
- curl -sSL https://install.python-poetry.org | python3 - --version 1.4.1
- export PATH="/root/.local/bin:$PATH"
doc:
stage: test
needs: []
script:
- *setup_build
- poetry install -n
- make
- hugo --minify
artifacts:
paths:
- build/doc
- public
pages:
stage: deploy
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
needs: ["doc"]
script:
- mv build/doc public
artifacts:
paths:
- public

0
.hugo_build.lock Normal file
View file

View file

@ -1,59 +0,0 @@
# 3.8.2 required because template/c requires it
cmake_minimum_required(VERSION 3.8.2 FATAL_ERROR)
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
# set build type to release if none is specified
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE Release CACHE STRING
"Choose the type of build." FORCE)
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
"Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif()
# options
option(LINE_LIMIT "Check files with line_limit." OFF)
option(REGEX_CHECK "Check files with regex_check." OFF)
option(WERROR "Make all warnings into errors." OFF)
if(NOT DEFINED DOC)
set(DOC html CACHE STRING
"The documentation type to generate." FORCE)
endif()
# disable base languages
unset(PROJECT_LANGUAGES)
project(shione
VERSION 0.0.0
DESCRIPTION "shione"
LANGUAGES ${PROJECT_LANGUAGES})
set(PROJECT_VERSION_SUFFIX "") # alpha/beta/rc, e.g. "-rc0"
set(PROJECT_VERSION "${PROJECT_VERSION}${PROJECT_VERSION_SUFFIX}")
set(PROJECT_AUTHOR "renken")
set(PROJECT_COPYRIGHT "2023, renken")
set(PROJECT_MAIL "renken@shione.net")
# only set CMAKE variant when local name matches CMAKE name
# this avoids clashing when being used as a subproject
if(PROJECT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
set(CMAKE_PROJECT_VERSION "${PROJECT_VERSION}")
set(CMAKE_PROJECT_VERSION_SUFFIX "${PROJECT_VERSION_SUFFIX}")
set(CMAKE_PROJECT_AUTHOR "${PROJECT_AUTHOR}")
set(CMAKE_PROJECT_COPYRIGHT "${PROJECT_COPYRIGHT}")
set(CMAKE_PROJECT_MAIL "${PROJECT_MAIL}")
endif()
include(version)
if(NOT DOC STREQUAL "OFF")
add_subdirectory(doc)
endif()
if(${LINE_LIMIT})
include(line_limit)
endif()
if(${REGEX_CHECK})
include(regex_check)
endif()
if(${LINE_LIMIT} OR ${REGEX_CHECK})
include(check)
endif()

View file

@ -1,5 +0,0 @@
default: html
.PHONY: html
html:
poetry run sphinx-build -b html src/shione build/doc

6
archetypes/default.md Normal file
View file

@ -0,0 +1,6 @@
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
---

341
assets/main.scss Normal file
View file

@ -0,0 +1,341 @@
$black: #080808;
html {
font-family: sans-serif;
color: $black;
}
body {
max-width: 920px;
margin: 0 auto;
padding: 1rem;
}
h1 {
margin-top: 0;
font-size: 1.5rem;
small {
display: block;
font-size: 1rem;
}
}
.index {
display: flex;
flex-direction: row;
.article-list {
flex-grow: 1;
.article {
margin-bottom: 1rem;
}
.date {
display: block;
color: #333;
}
}
aside {
width: 40%;
img {
display: block;
margin: 0 auto 1rem;
border-radius: 5px;
}
dt {
font-size: 0.9rem;
}
dd {
margin-left: 0;
&:not(:last-child) {
margin-bottom: 0.5rem;
}
}
}
@media(max-width: 640px) {
aside {
display: none;
}
}
}
article {
margin: 0 auto;
max-width: 720px;
line-height: 1.3;
img, video, iframe {
// !important for asciinema frames
display: block !important;
margin: 0 auto !important;
max-width: 90%;
@media(max-width: 640px) {
max-width: calc(100% - 2rem);
}
}
sup {
line-height: 1;
}
.comment {
margin: 2rem auto 0;
max-width: 80%;
color: #333;
}
}
.footnotes {
font-size: 0.85rem;
}
footer {
margin-top: 2rem;
text-align: center;
font-size: 0.8rem;
color: #333;
}
.float-img {
float: right;
display: inline;
padding-left: 1rem;
@media(max-width: 640px) {
display: block;
float: none;
padding-left: inherit;
}
}
pre {
background-color: #eee;
padding: 0.25rem 1rem;
margin: 0 -1rem;
max-width: 100%;
overflow-x: auto;
.cp {
color: #800;
}
.k {
color: #008;
}
.kt, .kd, .kc {
color: #44F;
}
.s {
color: #484;
font-style: italic;
}
.cm, .c1 {
color: #333;
font-style: italic;
}
.gi {
color: green;
}
.gd {
color: red;
}
.gu {
color: blue;
}
}
.webring {
margin-top: 2rem;
h2 {
font-size: 1.2rem;
}
.articles {
display: flex;
@media(max-width: 640px) {
flex-direction: column;
}
}
.title {
margin: 0;
}
.article {
flex: 1 1 0;
display: flex;
flex-direction: column;
background: #eee;
padding: 0.5rem;
margin: 0 0.5rem;
@media(max-width: 640px) {
margin: 0.5rem 0;
}
}
.article:first-child {
margin-left: 0;
}
.article:last-child {
margin-right: 0;
}
.summary {
font-size: 0.8rem;
flex: 1 1 0;
}
.attribution {
float: right;
font-size: 0.8rem;
color: #555;
line-height: 3;
}
.date {
color: black;
}
}
summary {
cursor: pointer;
background-color: #eee;
padding: 0.25rem 1rem;
margin: 0 -1rem;
}
details[open] {
border-bottom: 1rem solid #eee;
margin: 0 -1rem 1rem;
padding: 0 1rem;
}
.text-center {
text-align: center;
}
blockquote {
border-left: 5px solid #777;
background-color: #eee;
padding: 0 1rem;
margin-left: 0;
margin-right: 0;
blockquote {
margin-right: 0;
margin-left: 0;
}
}
dl {
display: grid;
grid-template-columns: auto 1fr;
grid-gap: 0.2rem 1rem;
dt {
font-weight: bold;
grid-column-start: 1;
}
dd {
grid-column-start: 2;
margin: 0;
}
}
.alert {
padding: 0.5rem;
border: 1px solid transparent;
margin-bottom: 1rem;
&.alert-danger {
background: #f8d7da;
color: #721c24;
border-color: #f5c6cb;
}
&.alert-info {
background: #d1ecf1;
color: #0c5460;
border-color: #bee5eb;
}
}
table {
color: #333;
background: white;
border: 1px solid grey;
font-size: 12pt;
border-collapse: collapse;
}
table thead th,
table tfoot th {
background: rgba(0,0,0,.1);
}
table caption {
padding:.5em;
}
table th,
table td {
padding: .5em;
border: 1px solid lightgrey;
}
td.red {
background: #F8D7DA;
}
td.yellow {
background: #FFF3CD;
}
td.blue {
background: #CFE2FF;
}
.error,
.info,
.warn
.todo {
background: #efefef;
border-left-style: solid;
border-left-width: 0.4rem;
border-radius: 0.2rem;
margin-left: 0;
> p {
padding: 0.5rem 1rem;
}
}
.warn {
border-left-color: #ffbb00;
}
.info {
border-left-color: #0000ee;
}
.error {
border-left-color: #ee0000;
}
.todo {
border-left-color: #eeee00;
}

22
config.toml Normal file
View file

@ -0,0 +1,22 @@
baseURL = "https://shione.net/"
title = "shione"
pygmentsUseClasses = true
uglyurls = true
disablePathToLower = true
rssLimit = 10
[permalinks]
blog = "/:year/:month/:day/:slugorfilename"
[markup.goldmark.renderer]
unsafe = true
[markup.tableOfContents]
ordered = true
[outputs]
section = ["HTML", "RSS"]
[markup.goldmark.parser.attribute]
block = true
title = true

3
content/_index.html Normal file
View file

@ -0,0 +1,3 @@
---
title: renken's weblog
---

View file

@ -1,10 +1,11 @@
Random rant
===========
---
title: Random rant
date: 2022-03-12
slug: random-rant
---
.. contents::
The lurking problem
-------------------
## The lurking problem
It's been quite a while since I wrote my last blog post. While I've been always
thinking that the reason behind this was the lack of having interesting/advanced
@ -18,16 +19,15 @@ add, how I lack expertise in such advanced topics... etc, but in reality, I'm
just holding myself from doing so because it's easier not to engage, it's easier
to be lazy.
Imperfection
------------
## Imperfection
It's easier to find excuses as for why my next project will suck, not be used by
others and so on compared to simply working on it. I think my main problem is
losing motivation over time, I need to figure out how to get motivation out of
the equation and possibly discipline myself more.
Close-up
--------
## Close-up
Oh well, my thoughts are still unclear and messy but I will push them online
anyway. It's something I plan on working on over time not ship only after it's

View file

@ -1,7 +1,8 @@
TODO: Explore meson
===================
.. contents::
---
title: 'TODO: Explore meson'
date: 2022-03-13
slug: todo-explore-meson
---
I should definitely play around with meson one day, maybe add template/c support
for it. I think working on template/c is a good entry to understanding how build

View file

@ -0,0 +1,13 @@
---
title: Frustration with web developers
date: 2022-04-02
slug: frustration-with-web-devs
---
Past few days, at least 5 websites rejected my email address
`mail@renken.systems` because it doesn't match their regular expression. I
might consider switching to something shorter/common that isn't taken already.
I was thinking of renken.no maybe but that would imply I am from/live in Norway
which isn't an assumption I want others to have. I'll see what I can do about
this.

View file

@ -1,10 +1,13 @@
My manga collection is growing!
===============================
---
title: My manga collection is growing!
date: 2022-06-01
slug: my-manga-collection-growing
---
I visited fnac, https://www.fnac.com/, around a month ago or so and noticed that
they sell manga. I wasn't aware that the French are huge weebs, they have a wide
variety of titles, separated by genres mainly shounen, shoujo and seinen and
*all* of them are in French.
I visited [fnac](https://www.fnac.com) around a month ago or so and noticed
that they sell manga. I wasn't aware that the French are huge weebs, they have
a wide variety of titles, separated by genres mainly shounen, shoujo and seinen
and *all* of them are in French.
While the majority of their selection consists of popular and recent titles out
there, you might also find niche ones like Yokohama Kaidashi Kikou and Yotsuba.
@ -16,7 +19,4 @@ Yesterday I ended up buying YKK's first three volumes because I figured gazing
at the landscapes on paper would make me appreciate it even more and I was
right! They're also helping me improve my French too which is nice.
.. image:: ../../../../../_static/manga_1654960885.jpg
:name: My manga collection 11/06/2022
:alt: My manga collection 11/06/2022
:align: center
![My manga collection 11/06/2022](/blog/2022-06-11_manga_collection.jpg)

View file

@ -1,5 +1,8 @@
Graduation and moving forward with Munic
========================================
---
title: Graduation and moving forward with Munic
date: 2022-07-12
slug: graduation-munic
---
I graduated from my school last Thursday, I am officially a certified (tm)
engineer! Consequently, I'm joining Munic as a full-time employee after my

View file

@ -0,0 +1,11 @@
---
title: Switching to Markdown
date: 2022-07-12T23:59:00+02:00
slug: switching-to-markdown
---
Sphinx supports Markdown through `myst-parser` as documented
[here](https://www.sphinx-doc.org/en/master/usage/markdown.html). This is nice
because most of the time I am writing Markdown especially on GitLab, I don't
have a hard dependency on RestructuredText itself meaning I can safely just
make the switch.

View file

@ -1,8 +1,8 @@
# Conventional commits
*Written 2023-04-10 12:47*
```{contents}
```
---
title: Conventional commits
date: 2023-04-10T12:47:00+01:00
slug: conventional-commits
---
I recently came across [conventional
commits](https://www.conventionalcommits.org/en/v1.0.0/) and I find the idea

View file

@ -1,8 +1,8 @@
# Siga desktop has joined the game.
*Written 2023-06-18 18:14*
```{contents}
```
---
title: Siga desktop has joined the game.
date: 2023-06-18T18:14:00
slug: siga-desktop
---
Around the 25th of May, I ended up building siga in its Desktop PC form. It's
entirely based on AMD because I wanted the best possible compatibility with

View file

@ -1,10 +1,11 @@
# Self-hosting shione.net
*Written 2023-12-23 18:47*
---
title: Self-hosting shione.net
date: 2023-12-23T18:47:00
slug: self-hosting-shione
---
```{contents}
```
I recently managed to get my hands on a mini PC, [Union NiPoGi CK10 - 10810U](https://www.notebookcheck.net/NiPoGi-CK10-with-the-Intel-Core-i7-10810U-reviewed-Small-office-PC-offering-space-for-three-SSDs.671211.0.html)
I recently managed to get my hands on a mini PC, [Union NiPoGi CK10 -
10810U](https://www.notebookcheck.net/NiPoGi-CK10-with-the-Intel-Core-i7-10810U-reviewed-Small-office-PC-offering-space-for-three-SSDs.671211.0.html)
thanks to my friend Lucien and thought it'd be a good opportunity to host my
own server to experiment with a bunch of stuff.

13
content/misc.md Normal file
View file

@ -0,0 +1,13 @@
---
title: Miscellaneous links
layout: page
---
# Multimedia
- [Birthday drawings](/misc/p/birthday.html)
# Archived
- [German notes](/misc/archived/de.html)
- [MQTT notes](/misc/archived/mqtt.html)

View file

@ -1,53 +1,34 @@
Chapter 1: introduction
=======================
---
title: German notes
date: 2019-04-23
layout: page
---
Cognates
--------
An abandoned series of posts highlighting things I have learned about the
German language.
# Chapter 1: introduction
## Cognates
A cognate is a word that is derived from the same original form such as kühl and
cool. We'll explore some consonant relationships that exist between German and
English to make guessing more accurate and faster but of course, always consider
checking the dictionary for the definitive answer.
.. list-table:: Cognates
:header-rows: 1
* * German
* English
* Examples
* * f, ff (medial or final)
* p
* hoffen - to hope, scharf - sharp
* * pf
* p, pp
* Apfel - apple, Pfeife - pipe
* * b (medial or final)
* v or f
* geben - to give, halb - half
* * d
* th
* Ding - thing
* * ch
* k
* Buch - book, machen - to make, suchen - to seek
* * cht
* ght
* Macht - might, Sicht - sight, Recht - right, Nacht - night
* * g
* y or i
* sagen - to say, legen - to lay, Nagel - nail, fliegen - to fly
* * k
* c
* kommen - to come, kritisch - critical
* * s, ss, ß (medial or final)
* t
* hassen - to hate, grüßen - to greet, besser - better, Fuß - foot
* * tz, z
* t
* Katze - cat
* * t
* d
* trinken - to drink, kalt - cold, Tochter - daughter
| German | English | Examples |
| --- | --- | --- |
| f, ff (medial or final) | p | hoffen - to hope, scharf - sharp |
| pf | p, pp | Apfel - apple, Pfeife - pipe |
| b (medial or final) | v or f | geben - to give, halb - half |
| d | th | Ding - thing |
| ch | k | Buch - book, machen - to make, suchen - to seek |
| cht | ght | Macht - might, Sicht - sight, Recht - right, Nacht - night |
| g | y or i | sagen - to say, legen - to lay, Nagel - nail, fliegen - to fly |
| k | c | kommen - to come, kritisch - critical |
| s, ss, ß (medial or final) | t | hassen - to hate, grüßen - to greet, besser - better, Fuß - foot |
| tz, z | t | Katze - cat |
| t | d | trinken - to drink, kalt - cold, Tochter - daughter |
Note that sometimes it may require some flexibility with vowels to get the
correct word e.g., hören - to hear. Try to figure out the following words: Haus,
@ -71,8 +52,7 @@ Book titles! Buchtitel, apparently used for both singular and plural.
* Yasmina Khadra, was der Tag der Nacht schuldet (haven't read it yet by the
way).
Genders
-------
## Genders
.. note::
Find a way to ease the process of memorizing these? being able to
@ -85,22 +65,14 @@ It's very important to know what your subject's gender is to understand the
context of the passage in hand. The corresponding German definite articles are
as follows
.. list-table:: Genders articles
:header-rows: 1
| Gender | Article |
| --- | --- |
| Masculine | der |
| Feminine | die |
| Neuter | das |
| Plural | die |
* * Gender
* Article
* * Masculine
* der
* * Feminine
* die
* * Neuter
* das
* * Plural
* die
Masculine
^^^^^^^^^
### Masculine
1. Nouns denoting male beings.
2. Most nouns ending with -er that are agents of a specific activity e.g., der
@ -110,20 +82,19 @@ Masculine
Socialismus (Socialism).
5. Points of compass. Norden, Süden, Oster und Westen.
Feminine
^^^^^^^^
### Feminine
1. Nouns denoting female beings.
2. Nouns of most trees, fruits and flowers. Look your favorites up!
3. Nouns ending with -er, -ie, -ik, -in, -ion, -hiet, kiet, -schaft, -tät,
-ung, -ur e.g., die Gesundheit (health), die Gesellschaft (society) und die
Hoffung.
Neuter
^^^^^^
### Neuter
.. note::
Diminutive nouns usually have an umlaut if the stem vowel is a, o, u or
au so a becomes ä...
> Diminutive nouns usually have an umlaut if the stem vowel is a, o, u or au
so a becomes ä...
{.info}
1. Nouns with diminutive endings -chen, -lein e.g., das Buch -> das Büchlein,
das Männlein.
@ -131,8 +102,7 @@ Neuter
3. Infinitives used as a noun e.g., das Kommen.
4. Nouns ending with -ium, -um e.g., das Vism.
Compounds
---------
## Compounds
New words in German sometimes can be formed by combining simpler words. Some of
these words can be particularly graphic. For example.
@ -154,5 +124,52 @@ difficult...
unterteilt. Die Länder habt lokal Kontrolle uber Bildung und jeder hat sein
Landesregierung.
Plural
------
# Chapter 2: Pronunciation
This, in addition to the tables provided by Colloquial German, should serve as a
good document for how German pronunciation is like. Of course, you *should*
always look up the pronunciation in its audio format and/or learn how to read
IPA table efficiently to improve your pronunciation skills.
This is also helpful to have a, sometimes misleading, sometimes correct guess of
the word's definition simply by saying them. For example, jung is pronounced
young and indeed does mean young.
Keep in mind that all German nouns are capitalized e.g., Buch for book.
## Vowels
> Keep in mind that I myself don't know most of these words. They're used
to simply give an example on how German sounds like in a way. It'd be
good if you pick up a word or two from this guide. I don't think you'll
be revisiting this page much. Maybe I'll consider updating the tables
with better/more fitting examples that you *may* find interesting.
{.info}
Vowels are either short or long like most languages. They are long when
* They are doubled: Paar (Pair), Haar (hair), Schnee (Snow).
* They are followed by h: sehen (to look. Sehen is the noun view, notice the
capitalization matters!), Jahr (year), Ohr (ear).
* They are followed by a single consonant: gut (good), rot (red).
They are shower when
* They are followed a double consonant: Bett (bed), Mann (man), hoffen (to
hope).
* They are followed by two or more consonants: sitzen (to sit), ernst (serious,
look it up!).
| Vowel | Type | English equivalent sound | German words |
| --- | --- | --- | --- |
| a | long | father | Vater, haben, sagen |
| a | short | hot | Vasser, Hand, alt |
| e | long | may | See, geben |
| e | short | let | Ende |
| i | long | greet | Tiger, Universität |
| i | short | sit | ist, dick, Mitte, Mittag, Mittwoch |
| ie | long | similar to here, look up how the following are pronounced. | Bier, hier, fliegen, liegen |
| o | long | open | Sohn, Brot, Segelboot |
| o | song | Sonne, Sommer | (none) |
| u | long | dune | Blume, Pudel, Handschuh |
| u | short | bush | Mutter, und, unter |

View file

@ -0,0 +1,136 @@
---
title: MQTT notes
layout: page
---
I first came across the MQTT protocol when I was looking for possible
alternative ideas and implementations to Syncplay. The key concept was that
video players such as mpv would connect to a central server, share information
about their media they're playing and synchronize their state with other peers.
MQTT stands for Message Queuing Telemetry Transport and is an open OASIS and ISO
standard. It is designed to be lightweight and primarily for as a
publish-subscribe protocol which is what synchronization-based software such as
Syncplay *should* use. Another aspect of MQTT that makes it a viable design
option for media synchronization is its simplicity of design. That leaves the
implementer with a small well-defined logic to implement which means higher
chances of an efficient implementation and less unintentional errors. It also is
reasonable to go for a minimal transport protocol to provide a minimal service
such as media synchronization.
I'll be reading through the standard version 5.0.0 published in 07 March 2019
and trying to provide a UML-based representation of the MQTT standard with few
notes to the C implementation. Keep in mind that at the time of writing this, I
do not plan on implementing myself but I believe these notes would be helpful
for anyone wishing to implement MQTT themselves.
Another note to keep in mind is that I do not have prior MQTT experience so I'm
not familiar with "best solutions" or "practice workarounds". I'll solely view
MQTT through the lens of the standards I have downloaded. Possible notes *may*
be added in the future.
* Keep in mind that I'm by no means an expert and have very little experience
with real-word software. I'll be researching things I do not understand and
share my explanation here if possible. I suggest you double-check every
information provided here as well in order to spot any misconception or
misunderstanding.
* Do note expect a strict and regulated publishing schedule, I'll only read the
standard and write about it in my free time whenever I wish. You *may*
contribute if you wish too. Alternatively you may advance on your own.
* I *may not* respect the styling and indentation of the standard e.g., I *may*
choose to merge a sub-header back with its parent-head.
Below are notes about each chapter in separate pages in the order provided by
the standard.
# Introduction
## Terminology
MQTT is a server-client protocol in which all clients *must* connect to a server
in order to exchange information which have to go through the server.
## Network connection
The standard defines network connection as the following.
> A construct provided by the underlying transport protocol that is being
used by MQTT. <br>
> * It connects the Client to the Server.
> * It provides the means to send an ordered, lossless, stream of bytes in
both directions.
I believe that this definition was mainly provided as to not limit the network
connection, specifically the network protocol, to TCP as it is possibly the most
common network protocol used when implementing MQTT. You can emulate the bullet
points under non-TCP network protocols e.g., UDP and implement MQTT on top of
it.
## Session
> A stateful interaction between a Client and a Server. Some Sessions last
only as long as the Network Connection, others can span multiple
consecutive Network Connections between a Client and a Server.
This allows for the possibility of attempting re-connection after it has been
lost to preserve the same session.
## Application message
The information sent between clients through servers is called the application
message which is carried by the MQTT protocol across the network. It contains
payload data, a Quality of Service (QoS), a collection of properties and a topic
name.
### Subscription
A subscription comprises a topic filter and a maximum QoS. A subscription is
associated with a single session. A session can contain more than one
subscription. Each subscription within a session has a different topic filter.
Shared subscription can be associated with more than one session. I assume this
is used for the case of multiple servers? I don't see the need to have multiple
sessions to the same server but it is allowed by the standard.
Wildcard subscription is a subscription with a topic filter containing one or
more wildcard characters. This allows the subscription to match more than one
topic name. Basically ``*`` in regular expression.
> TODO: write UML diagram about user <-- session 0..* -- 1..1 subscription
{.todo}
### Topic name
The label attached to an application message which is matched against the
subscriptions known to the server. This is up to the application to use it
efficiently. In the case of media synchronization, would you rather use do
central topics e.g., ``/media/filename`` and users push to that topic or would
you do per-user topics ``/renken/media/filename`` and only ``renken`` can
publish to that topic. Similar ideas to that come to mind I guess.
### Topic filter
An expression contained in a subscription to indicate an interest in one or more
topics. A topic filter can include wildcard characters.
### Client
As discussed before, in MQTT, the client can only communicate with a server and
not with other clients. Note that the client is not limited to a single server.
It also not limited to a fixed number of application messages published or
requested.
The server acts as an intermediary between clients which publish application
messages and clients which have made subscriptions.
<figure style="text-align: center;">
<img
src="https://www.planttext.com/api/plantuml/svg/ZSyn3i8m38NXdLFu0bo0WILYHweuG18zQ4Hg5pifrsypm50oiFlxzUno0XSwdcc0Bj0JNQpua9EDCFB4A6_H9qLXHYn9-E1-oBL-0PEVvvoYRwSqmVm37J7KO55Js4WHKhmghEnfizR1DxOTdsJ1DlRJkOl-st9Ph5L6z5vT0G00"
name="client UML diagram"
alt="client UML diagram">
<figcaption>
<a href="https://www.planttext.com/?text=ZSyn3i8m38NXdLFu0bo0WILYHweuG18zQ4Hg5pifrsypm50oiFlxzUno0XSwdcc0Bj0JNQpua9EDCFB4A6_H9qLXHYn9-E1-oBL-0PEVvvoYRwSqmVm37J7KO55Js4WHKhmghEnfizR1DxOTdsJ1DlRJkOl-st9Ph5L6z5vT0G00">client UML diagram</a>
</figcaption>
</figure>

View file

@ -0,0 +1,81 @@
---
title: Birthday drawings
layout: page
---
# Happy birthday!!
I'd like to thank pika and verm for this lovely picture, it never fails to put
a smile on my face. Hacker/Artist pika can be found on
[Pixiv](https://www.pixiv.net/en/users/46770896).
<figure style="text-align: center;">
<img
src="./birthday/renkenwaifu.png"
name="nonoka-birthday"
alt="nonoka-birthday"
width="407.5px"
height="671.75px">
<figcaption>
<a href="./birthday/renkenwaifu.kra">renkenwaifu.kra</a>
</figcaption>
</figure>
# Wednyasday's nyan night!!
pikanyan drew another picture of nonoka on a late Wednesday night comfy stream
and it's amazing. I love it!
<figure style="text-align: center;">
<img
src="./birthday/nonokasayshi.png"
name="nonoka-wednyasday"
alt="nonoka-wednyasday"
width="50%"
height="50%">
<figcaption>
<a href="./birthday/nonokasayshi.kra">nonokasayshi.kra</a>
</figcaption>
</figure>
# Original Do NOT Steal!!
pikapyon drew yet another amazing picture, this time with the three of us
together. From left to right.
1. ximin @ [ximinity.net](https://ximinity.net)
2. verm @ [mel.vin](https://mel.vin), spam him with emails if his website still
doesn't have a proper homepage
3. renken @ [shione.net](https://shione.net)
<figure style="text-align: center;">
<img
src="./birthday/originalOCdonotsteal.png"
name="nonoka-wednyasday"
alt="nonoka-wednyasday"
width="80%"
height="80%">
<figcaption>
<a href="./birthday/originalOCdonotsteal.kra">originalOCdonotsteal.kra</a>
</figcaption>
</figure>
# Happy nichijou birthday!!
pikadesu picked an amazing theme for this year's birthday's gift, nichijou! I
really love it and I'm looking forward to using sakamoto as my avatar in case
nonoka was considered too much for wörk :^) Thank you very much for this
pikadesu!
<figure style="text-align: center;">
<img
src="./birthday/renkenbirthdaynichijou.png"
name="nonoka-wednyasday"
alt="nonoka-wednyasday"
width="80%"
height="80%">
<figcaption>
<a href="./birthday/renkenbirthdaynichijou.kra">renkenbirthdaynichijou.kra</a>
</figcaption>
</figure>

View file

@ -2,10 +2,11 @@
set -eu
make
hugo --minify
rsync \
-a \
--delete \
--progress \
build/doc/ \
public/ \
'root@shione:/var/www/html/www.shione.net'

View file

@ -1,48 +0,0 @@
#!/bin/sh
set -eu
timestamp="$(date '+%s')"
title="$(date '+%Y-%m-%d %H:%M' --date="@$timestamp")"
year="$(date '+%Y')"
month="$(date '+%m')"
archive=./src/shione/log/archive
for dir in "$archive" "$archive/$year" "$archive/$year/$month"; do
if [ ! -d "$dir" ]; then
mkdir -- "$dir"
name="$(basename -- "$dir")"
if [ "$name" = archive ]; then
name=Archive
fi
<<-EOF cat - >"$dir/index.md"
# $name
\`\`\`{toctree}
---
maxdepth: 1
glob:
---
*/index
\`\`\`
EOF
fi
done
mkdir -- "$archive/$year/$month/$timestamp"
<<-EOF cat - >"$archive/$year/$month/$timestamp/index.md"
# $title
*Written $title*
\`\`\`{contents}
\`\`\`
## TODO
EOF
printf '%s\n' "$archive/$year/$month/$timestamp"
exit 0

View file

@ -0,0 +1,11 @@
{{ partial "head.html" . }}
<h1>
{{$.Title}}
</h1>
<main>
{{.Content}}
</main>
{{ partial "foot.html" }}

41
layouts/blog/rss.xml Normal file
View file

@ -0,0 +1,41 @@
{{- $pctx := . -}}
{{- if .IsHome -}}{{ $pctx = .Site }}{{- end -}}
{{- $pages := slice -}}
{{- if or $.IsHome $.IsSection -}}
{{- $pages = $pctx.RegularPages -}}
{{- else -}}
{{- $pages = $pctx.Pages -}}
{{- end -}}
{{- $limit := .Site.Config.Services.RSS.Limit -}}
{{- if ge $limit 1 -}}
{{- $pages = $pages | first $limit -}}
{{- end -}}
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>renken's weblog</title>
<link>https://shione.net</link>
<description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description>
<generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }}
<language>{{.}}</language>{{end}}{{ with .Site.Author.email }}
<managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }}
<webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }}
<copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }}
<lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
{{ with .OutputFormats.Get "RSS" }}
{{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
{{ end }}
{{ range $pages }}
{{- if .OutputFormats.Get "HTML" -}}
<item>
<title>{{ .Title }}</title>
<link>{{ .Permalink }}</link>
<pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
{{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}}
<guid>{{ .Permalink }}</guid>
<description>{{- .Content | html -}}</description>
</item>
{{- end -}}
{{ end }}
</channel>
</rss>

10
layouts/blog/section.html Normal file
View file

@ -0,0 +1,10 @@
<!doctype html>
<html lang="en">
<meta charset="utf-8" />
<title>{{.Title}}</title>
{{ $style := resources.Get "main.scss" | resources.ToCSS | resources.Minify | resources.Fingerprint }}
<link rel="stylesheet" href="{{ $style.RelPermalink }}">
<main>
{{.Content}}
</main>

18
layouts/blog/single.html Normal file
View file

@ -0,0 +1,18 @@
{{ partial "head.html" . }}
<h1>
{{$.Title}}
<small>
<span class="date">{{.Date.Format "January 2, 2006"}}</span>
on
<span class="site"><a href="{{.Site.BaseURL}}">{{.Site.Title}}</a></span>
</small>
</h1>
<main>
<article>
{{.Content}}
</article>
</main>
{{ partial "foot.html" }}

51
layouts/index.html Normal file
View file

@ -0,0 +1,51 @@
{{ partial "head.html" . }}
<main class="index">
<section class="article-list">
<h1>{{$.Title}}</h1>
{{ range (where (where .Site.RegularPages "Section" "blog") "Params.nohtml" "!=" "true") }}
{{- if .OutputFormats.Get "html" }}
<div class="article">
<span class="date">{{.Date.Format "January 2, 2006"}}</span>
<a href="{{.Permalink}}">{{.Title}}</a>
</div>
{{ end }}
{{ end }}
</section>
<aside>
<img
src="/avatar.png"
alt="My avatar: Nonoka Sasaki from Mitsuboshi Colors"
width="148" height="148" />
<div class="text-center">
<a class="rss" href="/blog/index.xml">rss</a>
·
<a href="misc.html">misc</a>
</div>
<dl class="external-links">
<dt>email</dt>
<dd><a href="mailto:renken@shione.net">renken@shione.net</a></dd>
<dt>gitlab</dt>
<dd><a href="https://gitlab.com/renken">renken</a></dd>
<dt>telegram</dt>
<dd><a href="https://t.me/renken">renken</a></dd>
<dt>last.fm</dt>
<dd><a href="https://www.last.fm/user/renkenrc">renkenrc</a></dd>
<dt>pgp</dt>
<dd><a href="/renken.asc">53334B09D2066FCF</a></dd>
</dl>
<small>
Hi, Im Renken, 25 years old from Algeria and I manage shione. The name
Shione translates to “sound of tide” (汐音).
</small>
</aside>
</main>
{{ partial "foot.html" . }}

View file

@ -0,0 +1,6 @@
<footer>
<a href="https://www.debian.org"><img id="rss" src="/debian.png" alt="debian"></a>
<br>
<br>
<a href="https://gitlab.com/renken/shione">source code</a>
</footer>

View file

@ -0,0 +1,14 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
{{ if $.Params.noindex }}
<meta name="robots" content="noindex">
{{ end }}
<title>{{$.Title}}</title>
<link rel="alternate" type="application/rss+xml" title="RSS" href="/index.xml">
<link rel="icon" type="image/png" href="/avatar.png">
{{ $style := resources.Get "main.scss" | resources.ToCSS | resources.Minify | resources.Fingerprint }}
<link rel="stylesheet" href="{{ $style.RelPermalink }}">
</head>

661
poetry.lock generated
View file

@ -1,661 +0,0 @@
# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand.
[[package]]
name = "alabaster"
version = "0.7.13"
description = "A configurable sidebar-enabled Sphinx theme"
category = "main"
optional = false
python-versions = ">=3.6"
files = [
{file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"},
{file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"},
]
[[package]]
name = "babel"
version = "2.12.1"
description = "Internationalization utilities"
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"},
{file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"},
]
[[package]]
name = "certifi"
version = "2022.12.7"
description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false
python-versions = ">=3.6"
files = [
{file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"},
{file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"},
]
[[package]]
name = "charset-normalizer"
version = "3.1.0"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
python-versions = ">=3.7.0"
files = [
{file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"},
{file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"},
{file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"},
{file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"},
{file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"},
{file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"},
{file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"},
{file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"},
{file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"},
{file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"},
{file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"},
{file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"},
{file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"},
{file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"},
{file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"},
{file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"},
{file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"},
{file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"},
{file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"},
{file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"},
{file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"},
{file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"},
{file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"},
{file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"},
{file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"},
{file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"},
{file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"},
{file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"},
{file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"},
{file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"},
{file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"},
{file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"},
{file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"},
{file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"},
{file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"},
{file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"},
{file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"},
{file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"},
{file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"},
{file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"},
{file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"},
{file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"},
{file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"},
{file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"},
{file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"},
{file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"},
{file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"},
{file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"},
{file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"},
{file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"},
{file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"},
{file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"},
{file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"},
{file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"},
{file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"},
{file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"},
{file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"},
{file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"},
{file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"},
{file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"},
{file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"},
{file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"},
{file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"},
{file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"},
{file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"},
{file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"},
{file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"},
{file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"},
{file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"},
{file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"},
{file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"},
{file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"},
{file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"},
{file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"},
{file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"},
]
[[package]]
name = "colorama"
version = "0.4.6"
description = "Cross-platform colored terminal text."
category = "main"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
files = [
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
]
[[package]]
name = "docutils"
version = "0.19"
description = "Docutils -- Python Documentation Utilities"
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "docutils-0.19-py3-none-any.whl", hash = "sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc"},
{file = "docutils-0.19.tar.gz", hash = "sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6"},
]
[[package]]
name = "idna"
version = "3.4"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false
python-versions = ">=3.5"
files = [
{file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
{file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
]
[[package]]
name = "imagesize"
version = "1.4.1"
description = "Getting image size from png/jpeg/jpeg2000/gif file"
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
{file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"},
{file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"},
]
[[package]]
name = "importlib-metadata"
version = "6.3.0"
description = "Read metadata from Python packages"
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "importlib_metadata-6.3.0-py3-none-any.whl", hash = "sha256:8f8bd2af397cf33bd344d35cfe7f489219b7d14fc79a3f854b75b8417e9226b0"},
{file = "importlib_metadata-6.3.0.tar.gz", hash = "sha256:23c2bcae4762dfb0bbe072d358faec24957901d75b6c4ab11172c0c982532402"},
]
[package.dependencies]
zipp = ">=0.5"
[package.extras]
docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
perf = ["ipython"]
testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"]
[[package]]
name = "jinja2"
version = "3.1.2"
description = "A very fast and expressive template engine."
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"},
{file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"},
]
[package.dependencies]
MarkupSafe = ">=2.0"
[package.extras]
i18n = ["Babel (>=2.7)"]
[[package]]
name = "markdown-it-py"
version = "2.2.0"
description = "Python port of markdown-it. Markdown parsing, done right!"
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"},
{file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"},
]
[package.dependencies]
mdurl = ">=0.1,<1.0"
[package.extras]
benchmarking = ["psutil", "pytest", "pytest-benchmark"]
code-style = ["pre-commit (>=3.0,<4.0)"]
compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"]
linkify = ["linkify-it-py (>=1,<3)"]
plugins = ["mdit-py-plugins"]
profiling = ["gprof2dot"]
rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"]
testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
[[package]]
name = "markupsafe"
version = "2.1.2"
description = "Safely add untrusted strings to HTML/XML markup."
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"},
{file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"},
{file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"},
{file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"},
{file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"},
{file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"},
{file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"},
{file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"},
{file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"},
{file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"},
{file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"},
{file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"},
{file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"},
{file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"},
{file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"},
{file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"},
{file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"},
{file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"},
{file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"},
{file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"},
{file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"},
{file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"},
{file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"},
{file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"},
{file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"},
{file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"},
{file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"},
{file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"},
{file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"},
{file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"},
{file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"},
{file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"},
{file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"},
{file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"},
{file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"},
{file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"},
{file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"},
{file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"},
{file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"},
{file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"},
{file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"},
{file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"},
{file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"},
{file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"},
{file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"},
{file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"},
{file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"},
{file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"},
{file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"},
{file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"},
]
[[package]]
name = "mdit-py-plugins"
version = "0.3.5"
description = "Collection of plugins for markdown-it-py"
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "mdit-py-plugins-0.3.5.tar.gz", hash = "sha256:eee0adc7195e5827e17e02d2a258a2ba159944a0748f59c5099a4a27f78fcf6a"},
{file = "mdit_py_plugins-0.3.5-py3-none-any.whl", hash = "sha256:ca9a0714ea59a24b2b044a1831f48d817dd0c817e84339f20e7889f392d77c4e"},
]
[package.dependencies]
markdown-it-py = ">=1.0.0,<3.0.0"
[package.extras]
code-style = ["pre-commit"]
rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"]
testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
[[package]]
name = "mdurl"
version = "0.1.2"
description = "Markdown URL utilities"
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"},
{file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
]
[[package]]
name = "myst-parser"
version = "1.0.0"
description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser,"
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "myst-parser-1.0.0.tar.gz", hash = "sha256:502845659313099542bd38a2ae62f01360e7dd4b1310f025dd014dfc0439cdae"},
{file = "myst_parser-1.0.0-py3-none-any.whl", hash = "sha256:69fb40a586c6fa68995e6521ac0a525793935db7e724ca9bac1d33be51be9a4c"},
]
[package.dependencies]
docutils = ">=0.15,<0.20"
jinja2 = "*"
markdown-it-py = ">=1.0.0,<3.0.0"
mdit-py-plugins = ">=0.3.4,<0.4.0"
pyyaml = "*"
sphinx = ">=5,<7"
[package.extras]
code-style = ["pre-commit (>=3.0,<4.0)"]
linkify = ["linkify-it-py (>=1.0,<2.0)"]
rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.7.5,<0.8.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"]
testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"]
testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,<0.4.0)"]
[[package]]
name = "packaging"
version = "23.1"
description = "Core utilities for Python packages"
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"},
{file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"},
]
[[package]]
name = "pygments"
version = "2.15.0"
description = "Pygments is a syntax highlighting package written in Python."
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "Pygments-2.15.0-py3-none-any.whl", hash = "sha256:77a3299119af881904cd5ecd1ac6a66214b6e9bed1f2db16993b54adede64094"},
{file = "Pygments-2.15.0.tar.gz", hash = "sha256:f7e36cffc4c517fbc252861b9a6e4644ca0e5abadf9a113c72d1358ad09b9500"},
]
[package.extras]
plugins = ["importlib-metadata"]
[[package]]
name = "pyyaml"
version = "6.0"
description = "YAML parser and emitter for Python"
category = "main"
optional = false
python-versions = ">=3.6"
files = [
{file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
{file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
{file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
{file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
{file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
{file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
{file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
{file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"},
{file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"},
{file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"},
{file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"},
{file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"},
{file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"},
{file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"},
{file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
{file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
{file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
{file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
{file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
{file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
{file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
{file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
{file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
{file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
{file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
{file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
{file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
{file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
{file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
{file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
{file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
{file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
{file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
{file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
{file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
{file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
{file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
{file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
{file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
{file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
[[package]]
name = "requests"
version = "2.28.2"
description = "Python HTTP for Humans."
category = "main"
optional = false
python-versions = ">=3.7, <4"
files = [
{file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"},
{file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"},
]
[package.dependencies]
certifi = ">=2017.4.17"
charset-normalizer = ">=2,<4"
idna = ">=2.5,<4"
urllib3 = ">=1.21.1,<1.27"
[package.extras]
socks = ["PySocks (>=1.5.6,!=1.5.7)"]
use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
[[package]]
name = "snowballstemmer"
version = "2.2.0"
description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms."
category = "main"
optional = false
python-versions = "*"
files = [
{file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"},
{file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"},
]
[[package]]
name = "sphinx"
version = "6.1.3"
description = "Python documentation generator"
category = "main"
optional = false
python-versions = ">=3.8"
files = [
{file = "Sphinx-6.1.3.tar.gz", hash = "sha256:0dac3b698538ffef41716cf97ba26c1c7788dba73ce6f150c1ff5b4720786dd2"},
{file = "sphinx-6.1.3-py3-none-any.whl", hash = "sha256:807d1cb3d6be87eb78a381c3e70ebd8d346b9a25f3753e9947e866b2786865fc"},
]
[package.dependencies]
alabaster = ">=0.7,<0.8"
babel = ">=2.9"
colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""}
docutils = ">=0.18,<0.20"
imagesize = ">=1.3"
importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""}
Jinja2 = ">=3.0"
packaging = ">=21.0"
Pygments = ">=2.13"
requests = ">=2.25.0"
snowballstemmer = ">=2.0"
sphinxcontrib-applehelp = "*"
sphinxcontrib-devhelp = "*"
sphinxcontrib-htmlhelp = ">=2.0.0"
sphinxcontrib-jsmath = "*"
sphinxcontrib-qthelp = "*"
sphinxcontrib-serializinghtml = ">=1.1.5"
[package.extras]
docs = ["sphinxcontrib-websupport"]
lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"]
test = ["cython", "html5lib", "pytest (>=4.6)"]
[[package]]
name = "sphinxcontrib-applehelp"
version = "1.0.4"
description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books"
category = "main"
optional = false
python-versions = ">=3.8"
files = [
{file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"},
{file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"},
]
[package.extras]
lint = ["docutils-stubs", "flake8", "mypy"]
test = ["pytest"]
[[package]]
name = "sphinxcontrib-devhelp"
version = "1.0.2"
description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document."
category = "main"
optional = false
python-versions = ">=3.5"
files = [
{file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"},
{file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"},
]
[package.extras]
lint = ["docutils-stubs", "flake8", "mypy"]
test = ["pytest"]
[[package]]
name = "sphinxcontrib-htmlhelp"
version = "2.0.1"
description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files"
category = "main"
optional = false
python-versions = ">=3.8"
files = [
{file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"},
{file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"},
]
[package.extras]
lint = ["docutils-stubs", "flake8", "mypy"]
test = ["html5lib", "pytest"]
[[package]]
name = "sphinxcontrib-jsmath"
version = "1.0.1"
description = "A sphinx extension which renders display math in HTML via JavaScript"
category = "main"
optional = false
python-versions = ">=3.5"
files = [
{file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"},
{file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"},
]
[package.extras]
test = ["flake8", "mypy", "pytest"]
[[package]]
name = "sphinxcontrib-plantuml"
version = "0.25"
description = "Sphinx \"plantuml\" extension"
category = "main"
optional = false
python-versions = "*"
files = [
{file = "sphinxcontrib-plantuml-0.25.tar.gz", hash = "sha256:8fde531d92d1cfc2817fe3647b3f2d07e76682c4a84889c04a53e831f7c54432"},
]
[package.dependencies]
Sphinx = ">=1.6"
[package.extras]
test = ["Pillow", "flake8", "pytest"]
[[package]]
name = "sphinxcontrib-qthelp"
version = "1.0.3"
description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document."
category = "main"
optional = false
python-versions = ">=3.5"
files = [
{file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"},
{file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"},
]
[package.extras]
lint = ["docutils-stubs", "flake8", "mypy"]
test = ["pytest"]
[[package]]
name = "sphinxcontrib-serializinghtml"
version = "1.1.5"
description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)."
category = "main"
optional = false
python-versions = ">=3.5"
files = [
{file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"},
{file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"},
]
[package.extras]
lint = ["docutils-stubs", "flake8", "mypy"]
test = ["pytest"]
[[package]]
name = "toml"
version = "0.10.2"
description = "Python Library for Tom's Obvious, Minimal Language"
category = "main"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
files = [
{file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
[[package]]
name = "urllib3"
version = "1.26.15"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
files = [
{file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"},
{file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"},
]
[package.extras]
brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
version = "3.15.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"},
{file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"},
]
[package.extras]
docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "2.0"
python-versions = "^3.9"
content-hash = "84375b9f6f6504b34111a9776d1cc20815af4ef4e4444dc21a863496859b9e61"

View file

@ -1,19 +0,0 @@
[tool.poetry]
name = "shione"
version = "0.1.0"
description = "My personal website"
authors = ["Renken <renken@shione.net>"]
license = "AGPL-3.0-only"
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.9"
Sphinx = "^6.1.3"
myst-parser = "^1.0.0"
sphinxcontrib-plantuml = "^0.25"
toml = "^0.10.2"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

View file

@ -0,0 +1 @@
html{font-family:sans-serif;color:#080808}body{max-width:920px;margin:0 auto;padding:1rem}h1{margin-top:0;font-size:1.5rem}h1 small{display:block;font-size:1rem}.index{display:flex;flex-direction:row}.index .article-list{flex-grow:1}.index .article-list .article{margin-bottom:1rem}.index .article-list .date{display:block;color:#333}.index aside{width:40%}.index aside img{display:block;margin:0 auto 1rem;border-radius:5px}.index aside dt{font-size:.9rem}.index aside dd{margin-left:0}.index aside dd:not(:last-child){margin-bottom:.5rem}@media(max-width:640px){.index aside{display:none}}article{margin:0 auto;max-width:720px;line-height:1.3}article img,article video,article iframe{display:block!important;margin:0 auto!important;max-width:90%}@media(max-width:640px){article img,article video,article iframe{max-width:calc(100% - 2rem)}}article sup{line-height:1}article .comment{margin:2rem auto 0;max-width:80%;color:#333}.footnotes{font-size:.85rem}footer{margin-top:2rem;text-align:center;font-size:.8rem;color:#333}.float-img{float:right;display:inline;padding-left:1rem}@media(max-width:640px){.float-img{display:block;float:none;padding-left:inherit}}pre{background-color:#eee;padding:.25rem 1rem;margin:0 -1rem;max-width:100%;overflow-x:auto}pre .cp{color:#800}pre .k{color:#008}pre .kt,pre .kd,pre .kc{color:#44f}pre .s{color:#484;font-style:italic}pre .cm,pre .c1{color:#333;font-style:italic}pre .gi{color:green}pre .gd{color:red}pre .gu{color:blue}.webring{margin-top:2rem}.webring h2{font-size:1.2rem}.webring .articles{display:flex}@media(max-width:640px){.webring .articles{flex-direction:column}}.webring .title{margin:0}.webring .article{flex:1;display:flex;flex-direction:column;background:#eee;padding:.5rem;margin:0 .5rem}@media(max-width:640px){.webring .article{margin:.5rem 0}}.webring .article:first-child{margin-left:0}.webring .article:last-child{margin-right:0}.webring .summary{font-size:.8rem;flex:1}.webring .attribution{float:right;font-size:.8rem;color:#555;line-height:3}.webring .date{color:#000}summary{cursor:pointer;background-color:#eee;padding:.25rem 1rem;margin:0 -1rem}details[open]{border-bottom:1rem solid #eee;margin:0 -1rem 1rem;padding:0 1rem}.text-center{text-align:center}blockquote{border-left:5px solid #777;background-color:#eee;padding:0 1rem;margin-left:0;margin-right:0}blockquote blockquote{margin-right:0;margin-left:0}dl{display:grid;grid-template-columns:auto 1fr;grid-gap:.2rem 1rem}dl dt{font-weight:700;grid-column-start:1}dl dd{grid-column-start:2;margin:0}.alert{padding:.5rem;border:1px solid transparent;margin-bottom:1rem}.alert.alert-danger{background:#f8d7da;color:#721c24;border-color:#f5c6cb}.alert.alert-info{background:#d1ecf1;color:#0c5460;border-color:#bee5eb}table{color:#333;background:#fff;border:1px solid grey;font-size:12pt;border-collapse:collapse}table thead th,table tfoot th{background:rgba(0,0,0,.1)}table caption{padding:.5em}table th,table td{padding:.5em;border:1px solid lightgrey}td.red{background:#f8d7da}td.yellow{background:#fff3cd}td.blue{background:#cfe2ff}.error,.info,.warn .todo{background:#efefef;border-left-style:solid;border-left-width:.4rem;border-radius:.2rem;margin-left:0}.error>p,.info>p,.warn .todo>p{padding:.5rem 1rem}.warn{border-left-color:#fb0}.info{border-left-color:#00e}.error{border-left-color:#e00}.todo{border-left-color:#ee0}

View file

@ -0,0 +1 @@
{"Target":"main.min.c1a322d943111db1cfbc3d645c87c52ef2b23a1d1fd6988387a706ae3357e3b5.css","MediaType":"text/css","Data":{"Integrity":"sha256-waMi2UMRHbHPvD1kXIfFLvKyOh0f1piDh6cGrjNX47U="}}

View file

@ -1,12 +0,0 @@
:orphan:
Not found
=========
.. note::
Our hard-working Cirnos cannot find the requested resource!
.. image:: _static/cirnos.png
:name: cirnos
:alt: cirnos
:align: center

View file

@ -1,74 +0,0 @@
set(DOC_SRC "${PROJECT_SOURCE_DIR}/doc")
set(DOC_DEST "${PROJECT_BINARY_DIR}/doc/${DOC}")
set(DOC_TMP "${PROJECT_BINARY_DIR}/tmp/doc")
if(DOC STREQUAL "html")
set(EXTRA_PYTHON_MODULES "sphinx_rtd_theme")
else()
unset(EXTRA_PYTHON_MODULES)
endif()
find_package(PythonInterp REQUIRED)
include(find_python_module)
# do not change the ENV, doesn't work with add_custom_target
# https://cmake.org/Bug/view.php?id=5145
if(ENV{PYTHONPATH})
set(PYTHONPATH "$ENV{PYTHONPATH}")
else()
# PYTHONPATH disables defaults, manually append them
execute_process(COMMAND "${PYTHON_EXECUTABLE}" "-c"
"import sys; sys.stdout.write(':'.join(sys.path))"
OUTPUT_VARIABLE PYTHONPATH)
endif()
foreach(module
sphinx
sphinxcontrib.plantuml
${EXTRA_PYTHON_MODULES})
string(TOUPPER "${module}" module_upper)
find_python_module("${module}" "${module_upper}")
set(PYTHONPATH "${${module_upper}_PATH}:${PYTHONPATH}")
endforeach(module)
if(${WERROR})
set(SPHINX_WERROR "-W")
else()
unset(SPHINX_WERROR)
endif()
include(plantuml)
configure_file(
"${DOC_SRC}/conf.py.in"
"${DOC_TMP}/sphinx/conf.py"
@ONLY)
add_custom_target(doc ALL
COMMAND "${CMAKE_COMMAND}" -E echo
"Generating sphinx ${DOC} documentation"
COMMAND "${CMAKE_COMMAND}" -E env "PYTHONPATH=${PYTHONPATH}"
"${PYTHON_EXECUTABLE}" -m sphinx -b "${DOC}"
-d "${DOC_TMP}/sphinx/doctrees" -j auto
-c "${DOC_TMP}/sphinx" -q ${SPHINX_WERROR}
"${DOC_SRC}" "${DOC_DEST}")
add_custom_command(TARGET doc POST_BUILD
COMMAND ;
COMMENT "Output at ${DOC_DEST}")
add_custom_target(doc_nocache
COMMAND "${CMAKE_COMMAND}" -E echo
"Generating sphinx ${DOC} documentation, no cache"
COMMAND "${CMAKE_COMMAND}" -E env "PYTHONPATH=${PYTHONPATH}"
"${PYTHON_EXECUTABLE}" -m sphinx -b "${DOC}" -E
-d "${DOC_TMP}/sphinx/doctrees" -j auto
-c "${DOC_TMP}/sphinx" -q ${SPHINX_WERROR}
"${DOC_SRC}" "${DOC_DEST}")
add_custom_command(TARGET doc_nocache POST_BUILD
COMMAND ;
COMMENT "Output at ${DOC_DEST}")
add_custom_target(doc_clean
COMMAND "${CMAKE_COMMAND}" -E remove_directory "${DOC_DEST}"
COMMAND "${CMAKE_COMMAND}" -E remove_directory
"${DOC_TMP}/sphinx/doctrees")

BIN
src/shione/_static/cirnos.png (Stored with Git LFS)

Binary file not shown.

BIN
src/shione/_static/manga_1654960885.jpg (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

BIN
src/shione/_static/shione.jpg (Stored with Git LFS)

Binary file not shown.

View file

@ -1,9 +0,0 @@
/* override table width restrictions */
@media screen and (min-width: 767px) {
.wy-table-responsive table td, .wy-table-responsive table th {
white-space: normal !important;
}
.wy-table-responsive {
overflow: visible !important;
}
}

View file

@ -1,143 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
# import os
# import sys
# sys.path.insert(0, os.path.abspath('.'))
import os
import toml
import subprocess
current_path = os.path.abspath('.')
project_config = toml.load('config.toml')
project_version = subprocess.check_output(
['git', 'rev-parse', '--short', 'HEAD']
).decode('ascii').strip()
# -- General configuration ------------------------------------------------
# General information about the project.
project = project_config['name']
copyright = project_config['copyright']
author = project_config['author']
description_formatted = project_config['description_formatted']
# If your documentation needs a minimal Sphinx version, state it here.
#
# needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = ['sphinxcontrib.plantuml', 'myst_parser']
# plantuml config
project_plantuml_config_path = '{}/{}'.format(
current_path, project_config['plantuml_config']
)
plantuml = 'plantuml -config "{}"'.format(
project_plantuml_config_path,
)
plantuml_output_format = 'svg_img'
# Add any paths that contain templates here, relative to this directory.
templates_path = []
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
#
# source_suffix = ['.rst', '.md']
source_suffix = {
'.md': 'markdown',
'.rst': 'restructuredtext',
}
# The master toctree document.
master_doc = 'index'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = project_version
# The full version, including alpha/beta/rc tags.
release = version
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = 'en'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This patterns also effect to html_static_path and html_extra_path
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'colorful'
# The name of a reST role to use as the default role, that is, for text marked
# up `like this`. The default role can always be set within individual
# documents using the standard reST default-role directive.
default_role = 'any'
# The default language to highlight source code.
highlight_language = 'rst'
# -- Options for HTML output ----------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = 'alabaster'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#
# html_theme_options = {}
html_theme_options = {
'font_family': 'Inconsolata',
'font_size': '16px',
'show_powered_by': 'false',
'description': eval(f"f'{description_formatted}'"),
'show_related': True,
}
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = [f'{current_path}/_static']
# Custom sidebar templates, must be a dictionary that maps document names
# to template names.
#
# This is required for the alabaster theme
# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
html_sidebars = {
'**': [
'about.html',
'navigation.html',
'relations.html', # needs 'show_related': True theme option to display
'searchbox.html',
]
}

View file

@ -1,5 +0,0 @@
name = "shione"
copyright = "2024, renken"
author = "renken"
plantuml_config = "plantuml.cfg"
description_formatted = "managed by {author}"

View file

@ -1,50 +0,0 @@
Welcome to shione!
==================
.. toctree::
:glob:
:maxdepth: 1
*/index
Renken
------
Hi, I'm Renken, 25 years old from Algeria and I manage shione. I like a bunch
of stuff that I may talk about in the future.
I worked at vermware on various interesting projects. I enjoyed a
university-free year focusing on vermware back in 2020. As of 2021, I am back to
university.
I moved to Paris, France in February 2022 for a 6 months internship at Munic. I
then joined the company as a full-time employee starting November 2022!
I'm writing plenty of Rust at work, mainly asynchronous using Tokio which is
pretty fun.
I also do bouldering frequently nowadays, mainly at
https://paris-porteditalie.climb-up.fr/ but open to try out other gyms.
You can email me at renken@shione.net and I'll be glad to reply.
You can also find me on.
* GitLab at https://gitlab.com/renken
* LastFM at https://www.last.fm/user/renkenrc
* Telegram at https://t.me/renken
PGP
~~~
My `public key`_ fingerprint:
53334B09D2066FCF3A4A27BF1F2BB159B645E575
.. _public key: _static/renken.asc
Shione
------
The name Shione means "sound of tide" (汐音). She is Yune's sister from Ikoku
Meiro no Croisée.

View file

@ -1,8 +0,0 @@
03
==
.. toctree::
:glob:
:maxdepth: 1
*/index

View file

@ -1,15 +0,0 @@
.. _frustration-with-web-developers:
Frustration with web developers
===============================
.. contents::
Past few days, at least 5 websites rejected my email address because it doesn't
match their regular expression. I might consider switching to something
shorter/common that isn't taken already.
I was thinking of renken.no maybe but that would imply I am from/live in Norway
which isn't an assumption I want others to have. I'll see what I can do about
this.

View file

@ -1,29 +0,0 @@
Farewell vermware
=================
.. contents::
vermware
--------
vermware is one of the major reasons behind every positive aspect of me, be it
specific to programming or my personality in general. I'll be leaving vermware
soon after I get some stuff done such as migrating shione somewhere else.
Big thanks and love to my dear brothers verm and ximin :D
shione
------
I'll hack some GitLab pages-specific CICD config some time soon maybe. As for a
VPS, I'm still investigating the prices and stuff. Since I barely serve/host
anything other than shione itself, I was wondering if I could have a cheap VPS
with enough storage to turn it into my backup server instead of backing up on a
separate host such as borgbase.
Emails
------
I'm always reachable through my personal email, which might change as mentioned
in :ref:`frustration-with-web-developers`, but I should note that both my
verm.im and vermwa.re will likely become inactive after a while.

View file

@ -1,10 +0,0 @@
Welcome to shione.net!
======================
.. contents::
I have embraced the name shione to refer to my remote host. It became natural
over time so I figured I might as well buy shione.net domain.
It also blends in well with my localhost name, siga, knowing that the latter is
a coastal place whereas the former translates to the sound of tide.

View file

@ -1,8 +0,0 @@
04
==
.. toctree::
:glob:
:maxdepth: 1
*/index

View file

@ -1,8 +0,0 @@
06
==
.. toctree::
:glob:
:maxdepth: 1
*/index

View file

@ -1,8 +0,0 @@
# Switching to Markdown
*Written 2022-07-12 23:59*
Sphinx supports Markdown through `myst-parser` as documented in
[https://www.sphinx-doc.org/en/master/usage/markdown.html](https://www.sphinx-doc.org/en/master/usage/markdown.html).
This is nice because most of the time I am writing Markdown especially on
GitLab, I don't have a hard dependency on RestructuredText itself meaning I can
safely just make the switch.

View file

@ -1,8 +0,0 @@
07
==
.. toctree::
:glob:
:maxdepth: 1
*/index

View file

@ -1,8 +0,0 @@
2022
====
.. toctree::
:glob:
:maxdepth: 1
*/index

View file

@ -1,10 +0,0 @@
# 04
```{toctree}
---
maxdepth: 1
glob:
---
*/index
```

View file

@ -1,10 +0,0 @@
# 06
```{toctree}
---
maxdepth: 1
glob:
---
*/index
```

View file

@ -1,10 +0,0 @@
# 12
```{toctree}
---
maxdepth: 1
glob:
---
*/index
```

View file

@ -1,10 +0,0 @@
# 2023
```{toctree}
---
maxdepth: 1
glob:
---
*/index
```

View file

@ -1,8 +0,0 @@
Archive
=======
.. toctree::
:glob:
:maxdepth: 1
*/index

View file

@ -1,9 +0,0 @@
German notes
============
.. toctree::
:glob:
:maxdepth: 1
ch1
pronunciation

View file

@ -1,92 +0,0 @@
Pronunciation guide
===================
This, in addition to the tables provided by Colloquial German, should serve as a
good document for how German pronunciation is like. Of course, you *should*
always look up the pronunciation in its audio format and/or learn how to read
IPA table efficiently to improve your pronunciation skills.
This is also helpful to have a, sometimes misleading, sometimes correct guess of
the word's definition simply by saying them. For example, jung is pronounced
young and indeed does mean young.
Keep in mind that all German nouns are capitalized e.g., Buch for book.
.. contents::
Vowels
------
.. note::
Keep in mind that I myself don't know most of these words. They're used
to simply give an example on how German sounds like in a way. It'd be
good if you pick up a word or two from this guide. I don't think you'll
be revisiting this page much. Maybe I'll consider updating the tables
with better/more fitting examples that you *may* find interesting.
Vowels are either short or long like most languages. They are long when
* They are doubled: Paar (Pair), Haar (hair), Schnee (Snow).
* They are followed by h: sehen (to look. Sehen is the noun view, notice the
capitalization matters!), Jahr (year), Ohr (ear).
* They are followed by a single consonant: gut (good), rot (red).
They are shower when
* They are followed a double consonant: Bett (bed), Mann (man), hoffen (to
hope).
* They are followed by two or more consonants: sitzen (to sit), ernst (serious,
look it up!).
.. list-table:: Examples
:header-rows: 3
* * Vowel
* Type
* English equivalent sound
* German words
* * a
* long
* father
* Vater, haben, sagen
* * a
* short
* hot
* Vasser, Hand, alt
* * e
* long
* may
* See, geben
* * e
* short
* let
* Ende
* * i
* long
* greet
* Tiger, Universität
* * i
* short
* sit
* ist, dick, Mitte, Mittag, Mittwoch
* * ie
* long
* similar to here, look up how the following are pronounced.
* Bier, hier, fliegen, liegen
* * o
* long
* open
* Sohn, Brot, Segelboot
* * o
* song
* Sonne, Sommer
* (none)
* * u
* long
* dune
* Blume, Pudel, Handschuh
* * u
* short
* bush
* Mutter, und, unter

View file

@ -1,22 +0,0 @@
Weblog
======
Unfinished thoughts, unfinished projects.
Series
------
.. toctree::
:glob:
:maxdepth: 1
*/index
Posts
-----
.. toctree::
:glob:
:maxdepth: 1
*/*/*/*/index

View file

@ -1,50 +0,0 @@
MQTT
====
I first came across the MQTT protocol when I was looking for possible
alternative ideas and implementations to Syncplay. The key concept was that
video players such as mpv would connect to a central server, share information
about their media they're playing and synchronize their state with other peers.
MQTT stands for Message Queuing Telemetry Transport and is an open OASIS and ISO
standard. It is designed to be lightweight and primarily for as a
publish-subscribe protocol which is what synchronization-based software such as
Syncplay *should* use. Another aspect of MQTT that makes it a viable design
option for media synchronization is its simplicity of design. That leaves the
implementer with a small well-defined logic to implement which means higher
chances of an efficient implementation and less unintentional errors. It also is
reasonable to go for a minimal transport protocol to provide a minimal service
such as media synchronization.
I'll be reading through the standard version 5.0.0 published in 07 March 2019
and trying to provide a UML-based representation of the MQTT standard with few
notes to the C implementation. Keep in mind that at the time of writing this, I
do not plan on implementing myself but I believe these notes would be helpful
for anyone wishing to implement MQTT themselves.
Another note to keep in mind is that I do not have prior MQTT experience so I'm
not familiar with "best solutions" or "practice workarounds". I'll solely view
MQTT through the lens of the standards I have downloaded. Possible notes *may*
be added in the future.
* Keep in mind that I'm by no means an expert and have very little experience
with real-word software. I'll be researching things I do not understand and
share my explanation here if possible. I suggest you double-check every
information provided here as well in order to spot any misconception or
misunderstanding.
* Do note expect a strict and regulated publishing schedule, I'll only read the
standard and write about it in my free time whenever I wish. You *may*
contribute if you wish too. Alternatively you may advance on your own.
* I *may not* respect the styling and indentation of the standard e.g., I *may*
choose to merge a sub-header back with its parent-head.
Below are notes about each chapter in separate pages in the order provided by
the standard.
.. toctree::
:glob:
:maxdepth: 1
*/index

View file

@ -1,3 +0,0 @@
@startuml
@enduml

View file

@ -1,9 +0,0 @@
@startuml
Client -> Server: Establishes a network connection
Client -> Server: Publishes an application mesage
Client -> Server: Subscribes to request application messages
Client -> Server: Unsubscribes to remove a request for application messages
Client -> Server: Closes the network connection
@enduml

View file

@ -1,95 +0,0 @@
Introduction
============
.. contents::
Terminology
-----------
MQTT is a server-client protocol in which all clients *must* connect to a server
in order to exchange information which have to go through the server.
Network connection
~~~~~~~~~~~~~~~~~~
The standard defines network connection as the following.
::
A construct provided by the underlying transport protocol that is being
used by MQTT.
* It connects the Client to the Server.
* It provides the means to send an ordered, lossless, stream of bytes in
both directions.
I believe that this definition was mainly provided as to not limit the network
connection, specifically the network protocol, to TCP as it is possibly the most
common network protocol used when implementing MQTT. You can emulate the bullet
points under non-TCP network protocols e.g., UDP and implement MQTT on top of
it.
Session
~~~~~~~
::
A stateful interaction between a Client and a Server. Some Sessions last
only as long as the Network Connection, others can span multiple
consecutive Network Connections between a Client and a Server.
This allows for the possibility of attempting re-connection after it has been
lost to preserve the same session.
Application message
~~~~~~~~~~~~~~~~~~~
The information sent between clients through servers is called the application
message which is carried by the MQTT protocol across the network. It contains
payload data, a Quality of Service (QoS), a collection of properties and a topic
name.
Subscription
^^^^^^^^^^^^
A subscription comprises a topic filter and a maximum QoS. A subscription is
associated with a single session. A session can contain more than one
subscription. Each subscription within a session has a different topic filter.
Shared subscription can be associated with more than one session. I assume this
is used for the case of multiple servers? I don't see the need to have multiple
sessions to the same server but it is allowed by the standard.
Wildcard subscription is a subscription with a topic filter containing one or
more wildcard characters. This allows the subscription to match more than one
topic name. Basically ``*`` in regular expression.
write UML diagram about user <-- session 0..* -- 1..1 subscription
Topic name
^^^^^^^^^^
The label attached to an application message which is matched against the
subscriptions known to the server. This is up to the application to use it
efficiently. In the case of media synchronization, would you rather use do
central topics e.g., ``/media/filename`` and users push to that topic or would
you do per-user topics ``/renken/media/filename`` and only ``renken`` can
publish to that topic. Similar ideas to that come to mind I guess.
Topic filter
^^^^^^^^^^^^
An expression contained in a subscription to indicate an interest in one or more
topics. A topic filter can include wildcard characters.
Client
~~~~~~
As discussed before, in MQTT, the client can only communicate with a server and
not with other clients. Note that the client is not limited to a single server.
It also not limited to a fixed number of application messages published or
requested.
The server acts as an intermediary between clients which publish application
messages and clients which have made subscriptions.
.. uml:: client.uml

View file

@ -1,8 +0,0 @@
Miscellaneous
=============
.. toctree::
:glob:
:maxdepth: 1
*/index

View file

@ -1,70 +0,0 @@
Pictures
========
.. contents::
:depth: 3
Happy birthday!!
----------------
I'd like to thank pika and verm for this lovely picture, it never fails to
put a smile on my face. Here's the original krita file `renkenwaifu`_!
Hacker/Artist pika can be found on Pixiv at https://www.pixiv.net/en/users/46770896
.. _renkenwaifu: ../../_static/renkenwaifu.kra
.. image:: ../../_static/renkenwaifu.png
:name: nonoka-birthday
:alt: nonoka-birthday
:align: center
:width: 407.5px
:height: 671.75px
Wednyasday's nyan night!!
-------------------------
pikanyan drew another picture of nonoka on a late Wednesday night comfy stream
and it's amazing. I love it! Here's the krita file `nonokasayshi`_.
.. _nonokasayshi: ../../_static/nonokasayshi.kra
.. image:: ../../_static/nonokasayshi.png
:name: nonoka-wednyasday
:alt: nonoka-wednyasday
:align: center
Original Do NOT Steal!!
-----------------------
pikapyon drew yet another amazing picture, this time with the three of us
together. From left to right.
1. ximin https://ximinity.net/
2. verm https://mel.vin/, spam him with emails if his website still doesn't have
a proper homepage
3. renken (me)
Krita file at `donotsteal`_.
.. image:: ../../_static/originalOCdonotsteal.png
:name: ximin-verm-renken
:alt: ximin-verm-renken
:align: center
.. _donotsteal: ../../_static/originalOCdonotsteal.kra
Happy nichijou birthday!!
-------------------------
pikadesu picked an amazing theme for this year's birthday's gift, nichijou! I
really love it and I'm looking forward to using sakamoto as my avatar in case
nonoka was considered too much for wörk :^) Thank you very much for this
pikadesu! Here's the krita file as always `renkenbirthdaynichijou`_.
.. image:: ../../_static/renkenbirthdaynichijou.png
:name: renken-birthday-nichijou
:alt: renken-birthday-nichijou
:align: center
.. _renkenbirthdaynichijou: ../../_static/renkenbirthdaynichijou.kra

View file

@ -1,96 +0,0 @@
skinparam ActivityBackgroundColor White
skinparam ActivityBorderColor Black
skinparam ActivityDiamondBackgroundColor #e6e6e6
skinparam ActivityDiamondBorderColor Black
skinparam ActivityDiamondFontStyle Italic
skinparam ActorBackgroundColor White
skinparam ActorBorderColor Black
skinparam AgentBackgroundColor White
skinparam AgentBorderColor Black
skinparam ArrowColor Black
skinparam ArtifactBackgroundColor White
skinparam ArtifactBorderColor Black
skinparam BackgroundColor White
skinparam BoundaryBackgroundColor White
skinparam BoundaryBorderColor Black
skinparam CardBackgroundColor White
skinparam CardBorderColor Black
skinparam ClassBackgroundColor White
skinparam ClassBorderColor Black
skinparam ClassHeaderBackgroundColor White
skinparam CloudBackgroundColor White
skinparam CloudBorderColor Black
skinparam CollectionsBackgroundColor White
skinparam CollectionsBorderColor Black
skinparam ComponentBackgroundColor White
skinparam ComponentBorderColor Black
skinparam ControlBackgroundColor White
skinparam ControlBorderColor Black
skinparam DatabaseBackgroundColor White
skinparam DatabaseBorderColor Black
skinparam EntityBackgroundColor White
skinparam EntityBorderColor Black
skinparam FileBackgroundColor White
skinparam FileBorderColor Black
skinparam FolderBackgroundColor White
skinparam FolderBorderColor Black
skinparam FrameBackgroundColor White
skinparam FrameBorderColor Black
skinparam IconPackageBackgroundColor White
skinparam IconPrivateBackgroundColor White
skinparam IconProtectedBackgroundColor White
skinparam IconPublicBackgroundColor White
skinparam InterfaceBackgroundColor White
skinparam InterfaceBorderColor Black
skinparam LegendBackgroundColor White
skinparam LegendBorderColor Black
skinparam NodeBackgroundColor White
skinparam NodeBorderColor Black
skinparam NoteBackgroundColor #e7f2fa
skinparam NoteBorderColor #6ab0de
skinparam ObjectBackgroundColor White
skinparam ObjectBorderColor Black
skinparam PackageBackgroundColor White
skinparam PackageBorderColor Black
skinparam PageBorderColor Black
skinparam ParticipantBackgroundColor White
skinparam ParticipantBorderColor Black
skinparam PartitionBackgroundColor White
skinparam PartitionBorderColor Black
skinparam QueueBackgroundColor White
skinparam QueueBorderColor Black
skinparam RectangleBackgroundColor White
skinparam RectangleBorderColor Black
skinparam SequenceBoxBackgroundColor White
skinparam SequenceBoxBorderColor Black
skinparam SequenceDividerBackgroundColor White
skinparam SequenceDividerBorderColor Black
skinparam SequenceGroupBackgroundColor White
skinparam SequenceGroupBodyBackgroundColor White
skinparam SequenceGroupBorderColor Black
skinparam SequenceLifeLineBackgroundColor #e6e6e6
skinparam SequenceLifeLineBorderColor Grey
skinparam SequenceReferenceBackgroundColor White
skinparam SequenceReferenceBorderColor Black
skinparam SequenceReferenceHeaderBackgroundColor White
skinparam StackBackgroundColor White
skinparam StackBorderColor Black
skinparam StateBackgroundColor White
skinparam StateBorderColor Black
skinparam StereotypeABackgroundColor White
skinparam StereotypeABorderColor Black
skinparam StereotypeCBackgroundColor White
skinparam StereotypeCBorderColor Black
skinparam StereotypeEBackgroundColor White
skinparam StereotypeEBorderColor Black
skinparam StereotypeIBackgroundColor White
skinparam StereotypeIBorderColor Black
skinparam StereotypeNBackgroundColor White
skinparam StereotypeNBorderColor Black
skinparam StorageBackgroundColor White
skinparam StorageBorderColor Black
skinparam SwimlaneBorderColor Black
skinparam TitleBackgroundColor White
skinparam TitleBorderColor Black
skinparam UsecaseBackgroundColor White
skinparam UsecaseBorderColor Black

BIN
static/debian.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -12,19 +12,19 @@ SNNvQjC9Uu6+E0p/omWvTtaSHdAgDiFC2MsCG7uenXMaKZRrbuPoGsFwGsm8kmBW
x9wXfty1TVQpN58hWMJCrpbzor3puny5eptf/owbArurYEI7xnO9gfZv9SEAVWTy
r+naEkut7b7MDtoal/7oVpSQk4sgyb2earQ68cYoDf4qg0pChibTKWaXbQARAQAB
tCpNb2hhbW1lZCBBbWFyLUJlbnNhYmVyIDxyZW5rZW5Ac2hpb25lLm5ldD6JAlcE
EwEKAEECGwMFCQQtTCkFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQRTM0sJ0gZv
zzpKJ78fK7FZtkXldQUCZDP1xAIZAQAKCRAfK7FZtkXldZRlD/4jbaC/5WIK5ktj
1SX9gpisTxbihJGrU5zqFppBBNd231cpmhLohd5CXywSdMVo3RhopPn5D6zJ5Ps4
Ix7lhyY1pD4rZokOV4OGdHsvBHecaJpS1elAsdUdynuFIcakui68by/rFhHQH/Ei
hvJpzAKvBsEDb/0a1Hu23JciIcNFcaPnynpDbb93YPRkVV8BJSA2Sbq+GXGCki89
Vawdld0noZqhEfPd8FmusEpfuZ8qSmZ5sQEv424ouHvOUGLqklcYHxByhlfm52WV
b9g67ERoTDOhqQp2Ykmcb4y8yi6YVWSCxyKiXqXgHKB/R5cn3I0t6keNblbYLVsK
d3SHB5PsUrqQAZhr4ZIYQlnQEH/7oHSSG+OyojPsGVkIEzVXBV+p7GhJOWrHiGAH
9NJD4Da3v5EBGNUgQU/vxPTXjnR5UHFK6aYmcQCRQUYKYj6gKhtTy/7Klgr7pHuD
nuNv6F7wRgjfBewYHdlISECaTyAO+wVSfoUryL29rrk3xy0CQMNEL55BxNvQ7GmZ
RpweGGD45hFtMYT1SgrO7TIu0QxPXxpvXGRHki2iWzrT6oKQ2yu8vLfikqOWPX1w
2ASc3Ff+cmwucdD7S5seBs1Z5fmX/G1Ly5FcPbchBe5Z+LBOMQIwI6lkej2o5BVm
DGU3aqXO9Q9wYf1rfWzUpl19MDC0WLRATW9oYW1tZWQgQW1hci1CZW5zYWJlciAo
EwEKAEECGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4ACGQEWIQRTM0sJ0gZvzzpK
J78fK7FZtkXldQUCZjZHbgUJBi+hSgAKCRAfK7FZtkXldVljD/43wrsRRG8CQTX8
0t1MHeCyHd6BzO1m6U9U1zH4NNiroAPvhWoI9JX4p83KjU9SlUTeEsMDi7H6keMw
cyzK9tKKN4cc1koHks0Obf987D8jqnl7ZdWcSFwdf3PVeR1jWJKwgKw9c4Waiin2
Jnva4Q2ZJccwRsFCZtAFpl/x4YBlN41nmUmWec0xF3atPh1Amz/apa62+08x5rVD
x3SpQ/Hsp56jZYSTBqdNt+THfQW3HcCUBT16Ph22ZNFNKzS1pB6XgLD2CpEf8Ukw
VW1QcJFwyyS1aPdftkx70M+6S+4ufQ74bb7s6LbRmbgfPIrHjXET4X9Fpgowvi4G
yhnQ24Of0lRsxa0ahZYS/NAVNdhdzJzfJlgw3q0X/5l4+y+e5JCDLxzSuqizbTo7
Ki6lSxfNtgU/PNTouymtB2/NRzyeIWlvZZsnI62lipBpchhIJkzAsxbg4fPpN4y5
fbcubFnUBKvPD+FXMX/BIDU4BCFKtZ+F4O/Rbk1jMRC5PqohTQ9POxE0zmGtqVtF
3grnmlu5FKkVtibOWSPkWQDeo+xtjELiPsxoaT3FFyNjJBzB2+ebvMPdTlNA0uvu
OMla4Q++STDgQ3bsA9mqaKtN0p2hMXe8Uw6yfUIG7I67V21c7gsfAE5kq50vvV3T
yWTd7oR+8K4lB9WVvc14Lt6pksB8B7RATW9oYW1tZWQgQW1hci1CZW5zYWJlciAo
TXVuaWMpIDxtb2hhbW1lZC5hbWFyLWJlbnNhYmVyQG11bmljLmlvPokCWwQwAQoA
RRYhBFMzSwnSBm/POkonvx8rsVm2ReV1BQJkM/yWJx0gQ3JlYXRpbmcgYSBzZXBh
cmF0ZSBQR1Aga2V5IGZvciB3b3JrLgAKCRAfK7FZtkXldRyVD/4hgcZV9Ez6W/yy
@ -352,17 +352,17 @@ ldwC3RdWMcRo5XctpsopMvEsayRrDad61U/ZnzYBd9eTx/97I+67j3uFDiAgBEVb
n8V0G1OPIOY+PVIKAndUNgm33xLPmg4qaHoP/HdwAImpHCbPOWiln/BOFt0lMvey
KfYudaBRmsmLtqUN4zVbxBSMxT8tVGEaFhjuHAv0cFVG4vkB8KNy/diPic3ECqNB
i5uG7SgfUbTJuoKx7tB/9taJABEBAAGJAjwEGAEKACYCGwwWIQRTM0sJ0gZvzzpK
J78fK7FZtkXldQUCZDPzKAUJBC1NBAAKCRAfK7FZtkXldSCXD/9ScEJ/SZI4YAw7
Eea1ZTFCMOLzmkb52aX/HiGDDplG4nvPEdT4x0v/tkWkfL6/6Bfa+JFp+Uo+/hFX
Z76XP24kwqpgMmz3VgQq7jK1HScSM+dZojsIII2Wo3cAF0gVVEGAzUniN0tNIrIF
Qsw44o7LeTl3Odx2m/q+e1g2Fu0B32q0+jEGzRSIwYrASdAJCT8VC5JzJrlWKOBf
RKHJ9m3JYwNsABjX9mMGiqWjF/YKm7z1pKMrHuvNtSswx8KrbLVPuh+sWZWh+BpP
B1Qt/J2d2fXyTFP3E5zY4XnYP+RJya/LO7pJ3aF1U+QaRlVzMOQYp14PO1E4NEL+
H7kNpXndoOwaBG/f4YVY661s3yQSkJFt2AXiNC/UCFzMu3THOvNdmijYZOzpzwQN
6n6zixL52BkuPnR2V+NZj0Uhz+Y0nw3CyW/Nwf+CNlaUiHH8X3bqM3/G0aO9+4v2
FbvDfNyqPZy6Leoy3ix/t38HZX2ORWCsYyboJcGZkqtkLDt3aMIHB2z2KOPw6WnI
vppwvBaswzoTsY61Lg0LINE385CRfUwel1Xacaz1VYMwB8rU1bEI0v9eXaAM50Ew
5XZB7FqtvbA5KcV2hQXyCVF4nMHKElwkT/BUutoNTUW/PzgIWH5oHO0mlzH6Krbc
1/IDwydkcI6IdygNP3VXtMLTo3of0w==
=dwnC
J78fK7FZtkXldQUCZjZHHwUJBi+g+wAKCRAfK7FZtkXldfrxEACmIYKDSzkcql7U
3MizkdDQpJEydu8K/uDWcBenaAIbsrSBH1oLTlHnfA+98JWROdXX06M3ZVdef1bl
T7jMagbMjBH/WFfghKBnm1/RKbPbj/MsbVXor2MMrHg8rSFhhtc0HafaPIki4HHQ
zdmrTqQ4Nq/Nv0vCmxD8WkCYpUkSiYv78itYcEQaZBGSxV2kvzfjBDA9LtF7Ah6j
SGErjf1LtaaAY0MHhvG0Mds5QOyENi4/B+0DSHKNYH8gSv1JMYc4xjnMqian61M7
WD24NS6Fq0NpBOJUx+9kYPG4MVBvYKztHYLGgj7xSzlYGdxXy/fMy+Y4HgdJTUD+
wN1A/84s1iukWZ+wDMhfUZ4PDyKgprqsX8zJXPSmXGzKNqJkeE/cPw7GldBED6mh
rqNsyP+ZZPDp3pqi4M9VMmeg3juS/4wpX5EpgngVrReknCuyEPITs8QBmwBpkVdB
cnaQ2lPSj0rFvzfSc8E74qzESbq+ViuEcLSRKEZq3mr4qjOu+fPTZsH8rK7vzQZr
tyqS9kge53dvr2W+lfuGSKfKKoXEOCm7jnKWIlGrQoe2tCvBatqwdxq9B49v5Ok5
MmViBJ3jhDwbHizePXVx01FT8EEU4k0PGqE9Jh5mYlQFtpwkttsggVV8tB9wjFkm
K2PrOlFYvydZvMutE99EtR1nkj2u5w==
=j72I
-----END PGP PUBLIC KEY BLOCK-----