diff --git a/.gitignore b/.gitignore
index 0c93a61..3fdb86f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,2 @@
-/build/
-/build_*/
-/.venv/
+/public/
+/resources/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 253015d..57021a2 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -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
diff --git a/.hugo_build.lock b/.hugo_build.lock
new file mode 100644
index 0000000..e69de29
diff --git a/CMakeLists.txt b/CMakeLists.txt
deleted file mode 100644
index 97d9202..0000000
--- a/CMakeLists.txt
+++ /dev/null
@@ -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()
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 08be00b..0000000
--- a/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-default: html
-
-.PHONY: html
-html:
- poetry run sphinx-build -b html src/shione build/doc
diff --git a/archetypes/default.md b/archetypes/default.md
new file mode 100644
index 0000000..00e77bd
--- /dev/null
+++ b/archetypes/default.md
@@ -0,0 +1,6 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+draft: true
+---
+
diff --git a/assets/main.scss b/assets/main.scss
new file mode 100644
index 0000000..9b0c5ea
--- /dev/null
+++ b/assets/main.scss
@@ -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;
+}
diff --git a/config.toml b/config.toml
new file mode 100644
index 0000000..de11d1d
--- /dev/null
+++ b/config.toml
@@ -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
diff --git a/content/_index.html b/content/_index.html
new file mode 100644
index 0000000..31b6d32
--- /dev/null
+++ b/content/_index.html
@@ -0,0 +1,3 @@
+---
+title: renken's weblog
+---
diff --git a/src/shione/log/archive/2022/03/1647095845/index.rst b/content/blog/2022-03-12-Random-rant.md
similarity index 90%
rename from src/shione/log/archive/2022/03/1647095845/index.rst
rename to content/blog/2022-03-12-Random-rant.md
index 974178e..aac3630 100644
--- a/src/shione/log/archive/2022/03/1647095845/index.rst
+++ b/content/blog/2022-03-12-Random-rant.md
@@ -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
diff --git a/src/shione/log/archive/2022/03/1647158350/index.rst b/content/blog/2022-03-13_todo_explore_meson.md
similarity index 80%
rename from src/shione/log/archive/2022/03/1647158350/index.rst
rename to content/blog/2022-03-13_todo_explore_meson.md
index df112de..0d1c094 100644
--- a/src/shione/log/archive/2022/03/1647158350/index.rst
+++ b/content/blog/2022-03-13_todo_explore_meson.md
@@ -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
diff --git a/content/blog/2022-04-02_frustration_with_web_developers.md b/content/blog/2022-04-02_frustration_with_web_developers.md
new file mode 100644
index 0000000..11ec2cf
--- /dev/null
+++ b/content/blog/2022-04-02_frustration_with_web_developers.md
@@ -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.
diff --git a/src/shione/log/archive/2022/06/1654960885/index.rst b/content/blog/2022-06-01_my_manga_collection_is_growing.md
similarity index 53%
rename from src/shione/log/archive/2022/06/1654960885/index.rst
rename to content/blog/2022-06-01_my_manga_collection_is_growing.md
index 42360eb..f6c563d 100644
--- a/src/shione/log/archive/2022/06/1654960885/index.rst
+++ b/content/blog/2022-06-01_my_manga_collection_is_growing.md
@@ -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)
diff --git a/src/shione/log/archive/2022/07/1657659932/index.rst b/content/blog/2022-07-12_graduation_munic.md
similarity index 77%
rename from src/shione/log/archive/2022/07/1657659932/index.rst
rename to content/blog/2022-07-12_graduation_munic.md
index c3e4f35..5a19b29 100644
--- a/src/shione/log/archive/2022/07/1657659932/index.rst
+++ b/content/blog/2022-07-12_graduation_munic.md
@@ -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
diff --git a/content/blog/2022-07-12_switching_to_markdown.md b/content/blog/2022-07-12_switching_to_markdown.md
new file mode 100644
index 0000000..c325331
--- /dev/null
+++ b/content/blog/2022-07-12_switching_to_markdown.md
@@ -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.
diff --git a/src/shione/log/archive/2023/04/1681123651/index.md b/content/blog/2023-04-10_conventional_commits.md
similarity index 92%
rename from src/shione/log/archive/2023/04/1681123651/index.md
rename to content/blog/2023-04-10_conventional_commits.md
index 1aa67b4..15ed2f6 100644
--- a/src/shione/log/archive/2023/04/1681123651/index.md
+++ b/content/blog/2023-04-10_conventional_commits.md
@@ -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
diff --git a/src/shione/log/archive/2023/06/1687104871/index.md b/content/blog/2023-06-18_siga_desktop.md
similarity index 93%
rename from src/shione/log/archive/2023/06/1687104871/index.md
rename to content/blog/2023-06-18_siga_desktop.md
index e26e31e..00fc981 100644
--- a/src/shione/log/archive/2023/06/1687104871/index.md
+++ b/content/blog/2023-06-18_siga_desktop.md
@@ -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
diff --git a/src/shione/log/archive/2023/12/1703353620/index.md b/content/blog/2023-12-23_self_hosting_shione_net.md
similarity index 93%
rename from src/shione/log/archive/2023/12/1703353620/index.md
rename to content/blog/2023-12-23_self_hosting_shione_net.md
index 4b86b4b..e4cd9bf 100644
--- a/src/shione/log/archive/2023/12/1703353620/index.md
+++ b/content/blog/2023-12-23_self_hosting_shione_net.md
@@ -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.
diff --git a/content/misc.md b/content/misc.md
new file mode 100644
index 0000000..6c87067
--- /dev/null
+++ b/content/misc.md
@@ -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)
diff --git a/src/shione/log/de/ch1.rst b/content/misc/archived/de/index.md
similarity index 50%
rename from src/shione/log/de/ch1.rst
rename to content/misc/archived/de/index.md
index 223acee..5b8ac3b 100644
--- a/src/shione/log/de/ch1.rst
+++ b/content/misc/archived/de/index.md
@@ -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 |
diff --git a/content/misc/archived/mqtt/index.md b/content/misc/archived/mqtt/index.md
new file mode 100644
index 0000000..5da6536
--- /dev/null
+++ b/content/misc/archived/mqtt/index.md
@@ -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.
+> * 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.
+
+
diff --git a/content/misc/p/birthday/index.md b/content/misc/p/birthday/index.md
new file mode 100644
index 0000000..7af81e5
--- /dev/null
+++ b/content/misc/p/birthday/index.md
@@ -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).
+
+
+
+
+# Wednyasday's nyan night!!
+
+pikanyan drew another picture of nonoka on a late Wednesday night comfy stream
+and it's amazing. I love it!
+
+
+
+# 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)
+
+
+
+# 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!
+
+
diff --git a/src/shione/_static/nonokasayshi.kra b/content/misc/p/birthday/nonokasayshi.kra
similarity index 100%
rename from src/shione/_static/nonokasayshi.kra
rename to content/misc/p/birthday/nonokasayshi.kra
diff --git a/src/shione/_static/nonokasayshi.png b/content/misc/p/birthday/nonokasayshi.png
similarity index 100%
rename from src/shione/_static/nonokasayshi.png
rename to content/misc/p/birthday/nonokasayshi.png
diff --git a/src/shione/_static/originalOCdonotsteal.kra b/content/misc/p/birthday/originalOCdonotsteal.kra
similarity index 100%
rename from src/shione/_static/originalOCdonotsteal.kra
rename to content/misc/p/birthday/originalOCdonotsteal.kra
diff --git a/src/shione/_static/originalOCdonotsteal.png b/content/misc/p/birthday/originalOCdonotsteal.png
similarity index 100%
rename from src/shione/_static/originalOCdonotsteal.png
rename to content/misc/p/birthday/originalOCdonotsteal.png
diff --git a/src/shione/_static/renkenbirthdaynichijou.kra b/content/misc/p/birthday/renkenbirthdaynichijou.kra
similarity index 100%
rename from src/shione/_static/renkenbirthdaynichijou.kra
rename to content/misc/p/birthday/renkenbirthdaynichijou.kra
diff --git a/src/shione/_static/renkenbirthdaynichijou.png b/content/misc/p/birthday/renkenbirthdaynichijou.png
similarity index 100%
rename from src/shione/_static/renkenbirthdaynichijou.png
rename to content/misc/p/birthday/renkenbirthdaynichijou.png
diff --git a/src/shione/_static/renkenbirthdaynichijouSakamotoava.kra b/content/misc/p/birthday/renkenbirthdaynichijouSakamotoava.kra
similarity index 100%
rename from src/shione/_static/renkenbirthdaynichijouSakamotoava.kra
rename to content/misc/p/birthday/renkenbirthdaynichijouSakamotoava.kra
diff --git a/src/shione/_static/renkenbirthdaynichijouSakamotoavaHat.png b/content/misc/p/birthday/renkenbirthdaynichijouSakamotoavaHat.png
similarity index 100%
rename from src/shione/_static/renkenbirthdaynichijouSakamotoavaHat.png
rename to content/misc/p/birthday/renkenbirthdaynichijouSakamotoavaHat.png
diff --git a/src/shione/_static/renkenwaifu.kra b/content/misc/p/birthday/renkenwaifu.kra
similarity index 100%
rename from src/shione/_static/renkenwaifu.kra
rename to content/misc/p/birthday/renkenwaifu.kra
diff --git a/src/shione/_static/renkenwaifu.png b/content/misc/p/birthday/renkenwaifu.png
similarity index 100%
rename from src/shione/_static/renkenwaifu.png
rename to content/misc/p/birthday/renkenwaifu.png
diff --git a/deploy.sh b/deploy.sh
index 614c16e..b007fa6 100755
--- a/deploy.sh
+++ b/deploy.sh
@@ -2,10 +2,11 @@
set -eu
-make
+hugo --minify
+
rsync \
-a \
--delete \
--progress \
- build/doc/ \
+ public/ \
'root@shione:/var/www/html/www.shione.net'
diff --git a/gen_blogpost.sh b/gen_blogpost.sh
deleted file mode 100755
index e33420f..0000000
--- a/gen_blogpost.sh
+++ /dev/null
@@ -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
diff --git a/layouts/_default/single.html b/layouts/_default/single.html
new file mode 100644
index 0000000..cc2c399
--- /dev/null
+++ b/layouts/_default/single.html
@@ -0,0 +1,11 @@
+{{ partial "head.html" . }}
+
+
+ {{$.Title}}
+
+
+
+ {{.Content}}
+
+
+{{ partial "foot.html" }}
diff --git a/layouts/blog/rss.xml b/layouts/blog/rss.xml
new file mode 100644
index 0000000..ce991d4
--- /dev/null
+++ b/layouts/blog/rss.xml
@@ -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 "" | safeHTML }}
+
+
+ renken's weblog
+ https://shione.net
+ Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}
+ Hugo -- gohugo.io{{ with .Site.LanguageCode }}
+ {{.}}{{end}}{{ with .Site.Author.email }}
+ {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Author.email }}
+ {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Copyright }}
+ {{.}}{{end}}{{ if not .Date.IsZero }}
+ {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}{{ end }}
+ {{ with .OutputFormats.Get "RSS" }}
+ {{ printf "" .Permalink .MediaType | safeHTML }}
+ {{ end }}
+ {{ range $pages }}
+ {{- if .OutputFormats.Get "HTML" -}}
+
+ {{ .Title }}
+ {{ .Permalink }}
+ {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}
+ {{ with .Site.Author.email }}{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}
+ {{ .Permalink }}
+ {{- .Content | html -}}
+
+ {{- end -}}
+ {{ end }}
+
+
diff --git a/layouts/blog/section.html b/layouts/blog/section.html
new file mode 100644
index 0000000..7819c86
--- /dev/null
+++ b/layouts/blog/section.html
@@ -0,0 +1,10 @@
+
+
+
+{{.Title}}
+{{ $style := resources.Get "main.scss" | resources.ToCSS | resources.Minify | resources.Fingerprint }}
+
+
+
+ {{.Content}}
+
diff --git a/layouts/blog/single.html b/layouts/blog/single.html
new file mode 100644
index 0000000..2a04523
--- /dev/null
+++ b/layouts/blog/single.html
@@ -0,0 +1,18 @@
+{{ partial "head.html" . }}
+
+