migrate to multilanguage setup
authorMart Lubbers <mart@martlubbers.net>
Mon, 9 Oct 2023 09:03:58 +0000 (11:03 +0200)
committerMart Lubbers <mart@martlubbers.net>
Mon, 9 Oct 2023 09:03:58 +0000 (11:03 +0200)
52 files changed:
_config.yml
_data/snippets.yml [new file with mode: 0644]
_includes/footer.html [new file with mode: 0644]
_includes/index_header.html [new file with mode: 0644]
_includes/language-switch.html [new file with mode: 0644]
_includes/localizations.html [new file with mode: 0755]
_includes/posts.html [new file with mode: 0755]
_includes/toc.html [new file with mode: 0644]
_layouts/default.html [deleted file]
_layouts/index.html [new file with mode: 0644]
_layouts/post.html [moved from _layouts/posts.html with 74% similarity]
_posts/2021-06-14-zomereikwijn.md [deleted file]
_posts/en/2020-09-16-nonm.md [moved from nonm.md with 94% similarity]
_posts/en/2021-06-16-dvorak.md [moved from dvorak.md with 91% similarity]
_posts/nds/2023-10-09-nds-intro.md [new file with mode: 0644]
_posts/nl/2021-06-12-look-zonder-look.md [moved from _posts/2021-06-12-look-zonder-look.md with 97% similarity]
_posts/nl/2021-06-16-aalbessen-krentjesjam.md [moved from _posts/2021-06-16-aalbessen-krentjesjam.md with 95% similarity]
_posts/nl/2021-06-16-langes.md [moved from langes.md with 86% similarity]
archive/o.html [moved from o.html with 100% similarity]
assets/thesisboekenlegger-thumb.jpg [new file with mode: 0644]
assets/thesisboekenlegger.jpg [new file with mode: 0644]
assets/thesisbookmark-thumb.jpg [new file with mode: 0644]
assets/thesisbookmark.jpg [new file with mode: 0644]
assets/thesiscover-thumb.jpg [new file with mode: 0644]
assets/thesiscover.jpg [new file with mode: 0644]
en/home.md [new symlink]
en/thesis.md [new file with mode: 0644]
en/triest.md [new file with mode: 0644]
files/gc/GC8WNDQ.png [deleted file]
files/gc/GC8WNDQ_klein.png [deleted file]
files/gc/GC8YY6C.png [deleted file]
files/gc/GC8ZV56_a-c.png [deleted file]
files/gc/GC8ZV56_d-g.png [deleted file]
files/gc/GC8ZV56_h-j.png [deleted file]
files/phdthesis.pdf [deleted file]
files/praatje.pdf [new file with mode: 0644]
files/thesiscover.jpg [new file with mode: 0644]
files/thesispraatje.pdf [new file with mode: 0644]
files/thesistalk.pdf [new file with mode: 0644]
foerageer.md [deleted file]
foerageer.xml [deleted file]
index.md
nds/thoos.md [new file with mode: 0644]
nds/triest.md [new file with mode: 0644]
nds/walrus.md [new file with mode: 0644]
nl/thesis.md [new file with mode: 0644]
nl/thuis.md [new file with mode: 0644]
nl/triest.md [new file with mode: 0644]
nl/walrus.md [moved from walrus.md with 94% similarity]
test.php [deleted file]
thesis.md [deleted file]
triest/index.html [deleted file]

index 4b153be..f530e41 100644 (file)
@@ -1,11 +1,45 @@
-#baseurl: https://martlubbers.net
+# Site settings
 livereload: true
+
+  #version: '2021-01-01'
+
+default_language: 'en'
+fallback_page: home
+
+timezone: Europe/Amsterdam
+encoding: utf-8
+
+# Build settings
 markdown: kramdown
+
+# Markdown Processors
 kramdown:
-    parse_block_html: true
+  parse_block_html: true
+  auto_ids: true
+  footnote_nr: 1
+  entity_output: as_char
+  toc_levels: 2..3
+
+# Defaults
 defaults:
-  -
-    scope:
-      path: ""
-    values:
-      layout: "default"
+-
+  scope:
+    path: '_posts/en'
+    type: 'posts'
+  values:
+    permalink: 'en/:title'
+    language: en
+-
+  scope:
+    path: '_posts/nl'
+    type: 'posts'
+  values:
+    permalink: 'nl/:title'
+    language: nl
+-
+  scope:
+    path: '_posts/nds'
+    type: 'posts'
+  values:
+    permalink: 'nds/:title'
+    language: nds
diff --git a/_data/snippets.yml b/_data/snippets.yml
new file mode 100644 (file)
index 0000000..6b5cec8
--- /dev/null
@@ -0,0 +1,63 @@
+title:
+  en: Mart Lubbers' Website
+  nl: Mart Lubbers' Webpagina
+  nds: Mart Lubbers zien Webstie
+languages:
+  en:
+    value: en
+    slug: en
+  nl:
+    value: nl
+    slug: nl
+  nds:
+    value: nds
+    slug: nds
+top:
+  en: top
+  nl: boven
+  nds: båm
+backto:
+  en: Back to
+  nl: Terug naar
+  nds: Teruw noar
+home:
+  en: home
+  nl: thuis
+  nds: thoos
+languagename:
+  en: Languages
+  nl: Talen
+  nds: Språken
+currentfunction:
+  en: Scientific programmer at TOP Software
+  nl: Wetenschappelijk programmeur bij TOP Software
+  nds: Wetenschoppelyk programmeur by TOP Software
+fingerprint:
+  en: Fingerprint
+  nl: Vingerafdruk
+  nds: Vingerofdruk
+toc:
+  en: Table of contents
+  nl: Inhoudsopgaaf
+  nds: Inhoaltsopgoaf
+posts:
+  en: Posts
+  nl: Postberichten
+  nds: Stu'kes
+footer:
+  en: '
+       Valid HTML 5 and optimized for screen readers.<br />
+       Best viewed with a screen resolution at least &ge;640x480 or at
+       least &ge;80x24 text mode in one of <a href="https://en.wikipedia.org/wiki/List_of_web_browsers">these web browsers.</a><br />
+       Powered by <a href="https://jekyllrb.com">Jekyll</a>'
+  nl: '
+       Geldige HTML 5 en geöptimaliseerd voor schermlezers..<br />
+       Het best te bekijken met een schermresolutie van tenminste &ge;640x480 of
+    tenminste &ge;80x24 tekstmodus in een van <a href="https://nl.wikipedia.org/wiki/Lijst_van_webbrowsers">deze webbrowsers.</a><br />
+       Gedreven door <a href="https://jekyllrb.com">Jekyll</a> (linkt naar een Engelse site)'
+  nds: '
+       Gooien HTML 5 en optimaliseerd veur schearmlèèzers..<br />
+       Doew kanst dit et beste bekieken met nen schermresolutie van mear as &ge;640x480 of
+    mear as &ge;80x24 in tekstmodus in een van <a href="https://nl.wikipedia.org/wiki/Lijst_van_webbrowsers">dissen webbrowsers.</a><br />
+       Maakt deur <a href="https://jekyllrb.com">Jekyll</a> (geet noar nen Engelse webstie)'
+
diff --git a/_includes/footer.html b/_includes/footer.html
new file mode 100644 (file)
index 0000000..dd33bdb
--- /dev/null
@@ -0,0 +1,6 @@
+               <footer>
+                       <span style="font-size: 0.75em">
+                       <a href="#">{{ site.data.snippets.backto[page.language] }} {{ site.data.snippets.top[page.language] }}</a><br />
+                       {{ site.data.snippets.footer[page.language] }}<br />
+                       </span>
+               </footer>
diff --git a/_includes/index_header.html b/_includes/index_header.html
new file mode 100644 (file)
index 0000000..876769b
--- /dev/null
@@ -0,0 +1,8 @@
+{% include img.html alt='A photo of Mart Lubbers' img='p' %}<br />
+{{ site.data.snippets.currentfunction[page.language] }}<br />
+<tt>mart@martlubbers.net</tt> (GPG: <a href="http://martlubbers.net/mart@martlubbers.net.asc" title="Fingerprint: 74FF FBF1 4758 273B 2F56  A30C A937 B7A1 AD3F EBE7" style="font-family:monospace">AD3FEBE7</a>)<br />
+<tt>mart@cs.ru.nl</tt><br />
+<a rel="me" href="https://gitlab.com/mlubbers">gitlab</a>,
+<a rel="me" href="https://akademienl.social/@mart">Mastodon</a>,
+<a rel="me" href="https://dblp.uni-trier.de/pid/238/2964.html">dblp</a>,
+<a rel="me" href="https://orcid.org/0000-0002-4015-4878">ORCiD</a>
diff --git a/_includes/language-switch.html b/_includes/language-switch.html
new file mode 100644 (file)
index 0000000..8e191b9
--- /dev/null
@@ -0,0 +1,49 @@
+                                       {{ site.data.snippets.languagename[page.language] }}:
+                                       {%- for language in site.data.snippets.languages %}
+                                               {%- if page.layout == 'index' %}
+                                                       {%- assign navigation_pages = site.pages
+                                                               | where: 'language_reference', page.language_reference
+                                                               | where: 'language', language[1].slug %}
+                                                       {%- if navigation_pages.size >= 1 %}
+                                                               {%- for navigation_page in navigation_pages %}
+                                                                       {%- assign url = site.baseurl | append: navigation_page.url %}
+                                                               {%- endfor %}
+                                                       {%- else %}
+                                                               {%- assign url = '' %}
+                                                       {%- endif %}
+
+                                               {%- elsif page.layout == 'post' %}
+                                                       {%- assign navigation_posts = site.posts
+                                                               | where: 'language_reference', page.language_reference
+                                                               | where: 'language', language[1].slug %}
+                                                       {%- if navigation_posts.size == 1 %}
+                                                               {%- for navigation_post in navigation_posts %}
+                                                                       {%- assign url = site.baseurl | append: navigation_post.url %}
+                                                               {%- endfor %}
+                                                       {%- else %}
+                                                               {%- assign url = '' %}
+                                                       {%- endif %}
+
+                                               {%- else %}
+                                                       {%- assign url = '' %}
+
+                                               {%- endif %}
+                                               {%- if language[1].slug == page.language %}
+                                                       <strong>
+                                               {%- endif %}
+                                               {%- if url != '' %}
+                                                       <a href="{{ url }}">
+                                               {%- else %}
+                                                       <s>
+                                               {%- endif %}
+                                                               {{ language[1].value }}
+                                               {%- if url != '' %}
+                                                       </a>
+                                               {%- else %}
+                                                       </s>
+                                               {%- endif %}
+
+                                               {%- if language[1].slug == page.language %}
+                                                       </strong>
+                                               {%- endif %}
+                                       {%- endfor %}
diff --git a/_includes/localizations.html b/_includes/localizations.html
new file mode 100755 (executable)
index 0000000..4dd05d5
--- /dev/null
@@ -0,0 +1,24 @@
+{%- if page.layout == 'page' %}
+  {%- assign localized_pages = site.pages
+    | where: 'language_reference', page.language_reference
+    | sort: 'language' %}
+  {%- for localized_page in localized_pages %}
+    <link rel="alternate" hreflang="{{ localized_page.language }}" href="{{ site.baseurl }}{{ localized_page.url }}" />
+  {%- endfor %}
+
+{%- elsif page.layout == 'post' %}
+  {%- assign localized_posts = site.posts
+  | where: 'language_reference', page.language_reference
+  | sort: 'language' %}
+  {%- for localized_post in localized_posts %}
+    <link rel="alternate" hreflang="{{ localized_post.language }}" href="{{ site.baseurl }}{{ localized_post.url }}" />
+  {%- endfor %}
+
+{%- elsif page.layout == 'index' %}
+  {%- assign localized_pages = site.pages
+    | where: 'language_reference', site.fallback_page
+    | sort: 'language' %}
+  {%- for localized_page in localized_pages %}
+    <link rel="alternate" hreflang="{{ localized_page.language }}" href="{{ site.baseurl }}{{ localized_page.url }}" />
+  {%- endfor %}
+{%- endif %}
\ No newline at end of file
diff --git a/_includes/posts.html b/_includes/posts.html
new file mode 100755 (executable)
index 0000000..27fefb8
--- /dev/null
@@ -0,0 +1,12 @@
+<h4>{{ site.data.snippets.posts[page.language] }} </h4>
+<ul>
+       {%- assign posts = site.posts
+               | where: 'language', page.language
+               | where: 'published', true
+               %}
+       {%- for post in posts %}
+               <li>
+                       <a href="{{ post.url | prepend: site.baseurl }}">{{ post.title }} ({{post.date | date_to_string}})</a>
+               </li>
+       {%- endfor %}
+</ul>
diff --git a/_includes/toc.html b/_includes/toc.html
new file mode 100644 (file)
index 0000000..97e3300
--- /dev/null
@@ -0,0 +1,4 @@
+#### {{ site.data.snippets.toc[page.language] }}
+
+* -
+{:toc}
diff --git a/_layouts/default.html b/_layouts/default.html
deleted file mode 100644 (file)
index 4745e36..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-       <head>
-               <title>{{ page.title }}</title>
-               <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-               <meta name="viewport" content="width=device-width, initial-scale=1" />
-       </head>
-       <body>
-               <header>
-                       <h1>
-                               {% if page.collection == "posts" %}
-                                       {{ page.date | date: '%Y-%m-%d' }}:
-                               {% endif %}
-                               {{ page.title }}
-                        </h1>
-                        <h2>
-                               {{ page.subtitle }}
-                       </h2>
-
-                       {% if page.collection == "posts" %}
-                       <a href="/foerageer.html">Terug naar het blog</a>
-                       {% endif %}
-                       {% if page.name != "index.md" and page.name != "walrus.md" %}
-                       <a href="/">Back to home/terug naar home</a>
-                       {% endif %}
-               </header>
-
-               <section>
-               {{ content }}
-               </section>
-
-               <footer>
-                       <span style="font-size: 0.75em">
-                       Valid HTML 5 and optimized for screen readers.<br />
-                       Best viewed with a screen resolution at least &ge;640x480 or at
-                       least &ge;80x24 text mode in one of <a href="https://en.wikipedia.org/wiki/List_of_web_browsers">these browsers.</a><br />
-                       Powered by <a href="https://jekyllrb.com">Jekyll</a><br />
-                       {% unless page.collection == "posts" %}
-                       Last updated: {{ page.date |  date: '%Y-%m-%d' }}<br />
-                       {% endunless %}
-                       </span>
-               </footer>
-       </body>
-</html>
diff --git a/_layouts/index.html b/_layouts/index.html
new file mode 100644 (file)
index 0000000..9bbdf93
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+       <head>
+               <title>{{ page.title }}</title>
+               <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+               <meta name="viewport" content="width=device-width, initial-scale=1" />
+               {% include localizations.html %}
+       </head>
+       <body>
+               <header>
+                       <h1>{{ page.title }}</h1>
+                       {% include language-switch.html %}
+                       {% if page.language_reference != "home" %}
+                       <a href="/">({{ site.data.snippets.home[page.language] }})</a>
+                       {% endif %}
+               </header>
+
+               <section>
+               {{ content }}
+               </section>
+
+               {% if page.language_reference == "home" %}
+               {% include posts.html %}
+               {% endif %}
+
+               {% include footer.html %}
+       </body>
+</html>
similarity index 74%
rename from _layouts/posts.html
rename to _layouts/post.html
index 48da065..848e3de 100644 (file)
@@ -1,5 +1,5 @@
 ---
-layout: default
+layout: index
 ---
 <p>{{ page.date }}</p>
 
diff --git a/_posts/2021-06-14-zomereikwijn.md b/_posts/2021-06-14-zomereikwijn.md
deleted file mode 100644 (file)
index ca1e9c1..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: Zomereikwijn
----
-
-<!--more-->
-
-## Zomereikwijn
-
similarity index 94%
rename from nonm.md
rename to _posts/en/2020-09-16-nonm.md
index 37df632..2e4850d 100644 (file)
--- a/nonm.md
@@ -1,22 +1,18 @@
 ---
+layout: post
 title: Wifi without network manager
 date: 2020-09-16
+language: en
+language_reference: nonm
+published: true
 ---
+
+{% include toc.html %}
+
 With this setup, `wpa_supplicant` automatically changes network when needed.
 Moreover, the network can be changed in userspace and new networks can be added.
 All withouth the bloat of `NetworkManager` and `ModemManager`.
 
-## Table of contents
-                               
-- [Requirements](#requirements)
-- [`wpa_supplicant`](#wpa_supplicant)
-- [`wpa_supplicant.conf`](#wpa_supplicantconf)
-- [`wpa_gui`](#wpa_gui)
-- [Eduroam](#eduroam)
-       - [update: cat broken](#update)
-       - [openssl update](#openssl)
-- [interaction](#interaction)
-
 ## Requirements
                
 - `wpa_supplicant`
similarity index 91%
rename from dvorak.md
rename to _posts/en/2021-06-16-dvorak.md
index 5791c60..26c340f 100644 (file)
--- a/dvorak.md
@@ -1,19 +1,16 @@
 ---
+layout: post
 title: Dvorak resources
 date: 2021-06-16
+language: en
+language_reference: dvorak
+published: true
 ---
 
-Since about 2011 I've started using dvorak as my main keyboard layout and like the efficiency compared to QWERTY.
 
-## Table of contents
+Since about 2011 I've started using dvorak as my main keyboard layout and like the efficiency compared to QWERTY.
 
-- [Notes](#notes)
-       - [Note to self (2015-10-30)](#note-to-self-2015-10-30)
-- [Dosbox](#dosbox)
-       - [Update (2020-06-11)](#update-2020-06-11)
-- [Dos](#dvorak-in-dos)
-- [Russian (2014-10-07)](#russian-2014-10-07)
-       - [Update (2015-04-16)](#update-2015-04-16)
+{% include toc.html %}
 
 ## Notes
 ### Note to self (2015-10-30)
diff --git a/_posts/nds/2023-10-09-nds-intro.md b/_posts/nds/2023-10-09-nds-intro.md
new file mode 100644 (file)
index 0000000..7c6701f
--- /dev/null
@@ -0,0 +1,12 @@
+---
+layout: post
+title: Intro in t Nedersaksisch
+date: 2023-10-09
+language: nds
+language_reference: lowsaxon
+published: true
+---
+
+Hier probear ik wat te schrievm in en oawer de Nedersaksisch.
+Het meeste zal schreevm worn in et Oost-Tweants mear ik bin ok bezig mie de
+[Nysassiske Skryvwyse](https://skryvwyse.eu/) machtig te maakn.
similarity index 97%
rename from _posts/2021-06-12-look-zonder-look.md
rename to _posts/nl/2021-06-12-look-zonder-look.md
index 331976e..8b973a1 100644 (file)
@@ -1,5 +1,9 @@
 ---
+layout: post
 title: Groene asperge daslook risotto zonder look-zonder-look
+published: true
+language: nl
+language_reference: groene-asperge-daslook-risotto
 ---
 
 Onze eerste wildpluk experiment was daslook. Op de wildplukwijzer stonden
similarity index 95%
rename from _posts/2021-06-16-aalbessen-krentjesjam.md
rename to _posts/nl/2021-06-16-aalbessen-krentjesjam.md
index 2e0d3dd..cc73f99 100644 (file)
@@ -1,5 +1,9 @@
 ---
+layout: post
 title: Aalbessen krentjesjam
+published: true
+language: nl
+language_reference: aalbessen-krentjesjam
 ---
 
 April en mei mogen dan koud geweest zijn. Juni heeft dit al meer dan goed
similarity index 86%
rename from langes.md
rename to _posts/nl/2021-06-16-langes.md
index 7b1d35d..107a367 100644 (file)
--- a/langes.md
@@ -1,22 +1,16 @@
 ---
+layout: post
 title: ſ-homografen (Lange s homografen)
 date: 2021-06-16
+language: nl
+language_reference: langes
+published: true
 ---
-<header>
 Op deze internetpagina presenteer ik mijn verzameling ſ-homografen, ſ-homogrammen, ſ-bommelwoorden, plaatstaalwoorden of hoe men ze ook noemen wil.
 
-## Table of contents
+{% include toc.html %}
 
-- [Introduction](#introduction)
-- [Verzameling](#verzameling)
-  - [Woorden die eindigen op -staal](#staal)
-  - [Vrouwlijke vormen met -ster](#ster)
-  - [Woorden die eindigen op -stop](#stop)
-  - [Anders](#anders)
-- [Dankwoord](#dankwoord)
-</header>
-
-## Introduction
+## Introductie
 ſ-homografen zijn homografen in de reguliere spelling maar bij het correct gebruik van de ſ niet meer.
 In vroegere tijden schreef men de kleine letter s als ſ, behalve als het de laatste letter van het woord, of samengesteld woord, was.
 De bekendste ſ-homograaf is plaatstaal, dat geïnterpreteerd kan worden als plaats-taal of plaat-staal, maar plaatstaal en plaatſtaal zijn prima te onderscheiden.
similarity index 100%
rename from o.html
rename to archive/o.html
diff --git a/assets/thesisboekenlegger-thumb.jpg b/assets/thesisboekenlegger-thumb.jpg
new file mode 100644 (file)
index 0000000..f55269e
Binary files /dev/null and b/assets/thesisboekenlegger-thumb.jpg differ
diff --git a/assets/thesisboekenlegger.jpg b/assets/thesisboekenlegger.jpg
new file mode 100644 (file)
index 0000000..239bf1d
Binary files /dev/null and b/assets/thesisboekenlegger.jpg differ
diff --git a/assets/thesisbookmark-thumb.jpg b/assets/thesisbookmark-thumb.jpg
new file mode 100644 (file)
index 0000000..d06b745
Binary files /dev/null and b/assets/thesisbookmark-thumb.jpg differ
diff --git a/assets/thesisbookmark.jpg b/assets/thesisbookmark.jpg
new file mode 100644 (file)
index 0000000..d9fe25a
Binary files /dev/null and b/assets/thesisbookmark.jpg differ
diff --git a/assets/thesiscover-thumb.jpg b/assets/thesiscover-thumb.jpg
new file mode 100644 (file)
index 0000000..9c929f3
Binary files /dev/null and b/assets/thesiscover-thumb.jpg differ
diff --git a/assets/thesiscover.jpg b/assets/thesiscover.jpg
new file mode 100644 (file)
index 0000000..77a07b8
Binary files /dev/null and b/assets/thesiscover.jpg differ
diff --git a/en/home.md b/en/home.md
new file mode 120000 (symlink)
index 0000000..c82c633
--- /dev/null
@@ -0,0 +1 @@
+../index.md
\ No newline at end of file
diff --git a/en/thesis.md b/en/thesis.md
new file mode 100644 (file)
index 0000000..d2d5e72
--- /dev/null
@@ -0,0 +1,56 @@
+---
+layout: index
+title: Orchestrating the Internet of Things with Task-Oriented Programming
+language: en
+language_reference: thesis
+---
+
+{% include img.html alt='Cover' img='thesiscover' %}{% include img.html alt='Bookmark' img='thesisbookmark' %}
+
+{% include toc.html %}
+
+## Details
+
+Publicly defended on Wednesday October 4th, 2023 at exactly 14:30.
+
+Promotor: prof. dr. ir. M.J. (Rinus) Plasmeijer
+Copromotores:
+
+- dr. J.M. (Jan Martin) Jansen (Netherlands Defence Academy)
+- dr. P.W.M. (Pieter) Koopman
+
+Manuscript committee:
+
+- prof. dr. S.-B. (Sven-Bodo) Scholz
+- prof. dr. G.K. (Gabriele) Keller (Utrecht University)
+- prof. dr. M. (Mary) Sheeran (Chalmers Tekniska Högskola, Sweden)
+
+## Summary
+
+The development of reliable software for the Internet of Things (IoT) is difficult because IoT systems are dynamic, interactive, distributed, collaborative, multi-tiered, and multitasking in nature.
+The complexity is increased further by semantic friction that arises through different hardware and software characteristics between tiers.
+Many computers that operate in IoT systems are _edge devices_ that interact with the environment using sensors and actuators.
+Edge devices are often powered by low-cost microcontrollers designed for embedded applications.
+They have little memory, unhurried processors, and are slow in communication but are also small and energy efficient.
+
+Task-oriented programming can cope with the challenges of IoT programming.
+In task-oriented programming, the main building blocks are tasks, an abstract representation of work.
+During execution, the current value of the task is observable, and other tasks can act upon it.
+Collaboration patterns can be modelled by combining and transforming tasks into compound tasks.
+Programming edge devices benefits from task-oriented programming as well, but running such a system within the limitations of resource-constrained microcontrollers is not straightforward.
+
+This dissertation demonstrates how to include edge devices in task-oriented programming systems using domain-specific languages (DSLs).
+With these techniques, all tiers and their interoperation of an IoT system are specified in a single high-level source, language, paradigm, high abstraction level, and type system.
+First, I present advanced DSL embedding techniques.
+Then mTask is shown, a task-oriented programming DSL for IoT edge devices, embedded in iTask.
+Tasks are constructed and compiled at run time in order to allow tasks to be tailored to the current work requirements.
+The task is then sent to the device for interpretation.
+A device is programmed once with a lightweight domain-specific operating system (OS) to be used in an mTask system.
+This OS executes tasks in an energy-efficient way and automates all communications and data sharing.
+All aspects of the mTask system are shown: example applications, language design, implementation details, integration with iTask, and green computing facilities such as automatic sleeping.
+
+Finally, tierless IoT programming is compared to traditional tiered programming.
+In tierless programming frameworks, the size of the code and the number of required programming languages is reduced significantly.
+By using a single paradigm and a system-wide type system, tierless programming reduces problems such as semantic friction; maintainability and robustness issues; and interoperation safety.
+
+Slides for the summary presentation can be found [here](/files/thesistalk.pdf).
diff --git a/en/triest.md b/en/triest.md
new file mode 100644 (file)
index 0000000..dce91fb
--- /dev/null
@@ -0,0 +1,10 @@
+---
+layout: index
+title: Trieste Muziek
+language: en
+language_reference: triest
+---
+
+Home page of the record label Trieste Muziek.
+
+For inquiries please contact <code>mart@triestemuziek.nl</code>.
diff --git a/files/gc/GC8WNDQ.png b/files/gc/GC8WNDQ.png
deleted file mode 100644 (file)
index a29b58a..0000000
Binary files a/files/gc/GC8WNDQ.png and /dev/null differ
diff --git a/files/gc/GC8WNDQ_klein.png b/files/gc/GC8WNDQ_klein.png
deleted file mode 100644 (file)
index ad4d7b4..0000000
Binary files a/files/gc/GC8WNDQ_klein.png and /dev/null differ
diff --git a/files/gc/GC8YY6C.png b/files/gc/GC8YY6C.png
deleted file mode 100644 (file)
index c20baea..0000000
Binary files a/files/gc/GC8YY6C.png and /dev/null differ
diff --git a/files/gc/GC8ZV56_a-c.png b/files/gc/GC8ZV56_a-c.png
deleted file mode 100644 (file)
index c3128bf..0000000
Binary files a/files/gc/GC8ZV56_a-c.png and /dev/null differ
diff --git a/files/gc/GC8ZV56_d-g.png b/files/gc/GC8ZV56_d-g.png
deleted file mode 100644 (file)
index fc9ae59..0000000
Binary files a/files/gc/GC8ZV56_d-g.png and /dev/null differ
diff --git a/files/gc/GC8ZV56_h-j.png b/files/gc/GC8ZV56_h-j.png
deleted file mode 100644 (file)
index 39f0c9b..0000000
Binary files a/files/gc/GC8ZV56_h-j.png and /dev/null differ
diff --git a/files/phdthesis.pdf b/files/phdthesis.pdf
deleted file mode 100644 (file)
index 6127e2d..0000000
Binary files a/files/phdthesis.pdf and /dev/null differ
diff --git a/files/praatje.pdf b/files/praatje.pdf
new file mode 100644 (file)
index 0000000..f6bf8b3
Binary files /dev/null and b/files/praatje.pdf differ
diff --git a/files/thesiscover.jpg b/files/thesiscover.jpg
new file mode 100644 (file)
index 0000000..77a07b8
Binary files /dev/null and b/files/thesiscover.jpg differ
diff --git a/files/thesispraatje.pdf b/files/thesispraatje.pdf
new file mode 100644 (file)
index 0000000..f6bf8b3
Binary files /dev/null and b/files/thesispraatje.pdf differ
diff --git a/files/thesistalk.pdf b/files/thesistalk.pdf
new file mode 100644 (file)
index 0000000..7a58fcb
Binary files /dev/null and b/files/thesistalk.pdf differ
diff --git a/foerageer.md b/foerageer.md
deleted file mode 100644 (file)
index 4191680..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Foerageerheer
-date: 2021-06-14
-description: Dit blog dient als een plek om mijn wildplukervaringen te delen en als notitieblok voor mijzelf.
----
-Dit blog dient als een plek om mijn wildplukervaringen te delen en als
-notitieblok voor mijzelf.
-
-De meeste informatie haal ik uit de volgende bronnen:
-
-- Puur natuur op tafel --- Roger Phillips (ISBN: 902747737X)
-- Wildplukwiki van oogstenzonderzaaien --- <http://oogstenzonderzaaien.nl/wiki/Hoofdpagina>
-- Eetbare planten database van Permacultuur Nederland --- <https://www.permacultuurnederland.org/planten.php>
-- Nederlands-dis --- <https://nederlands-dis.nl/dis>
-
-<!--more-->
-
-[RSS feed](foerageer.xml)
-
-<ul>
-       {% for post in site.posts %}
-               <li>
-                       {{ post.date | date: '%Y-%m-%d' }}: <a href="{{ post.url }}">{{ post.title }}</a>
-                       {{ post.excerpt }}
-               </li>
-       {% endfor %}
-</ul>
diff --git a/foerageer.xml b/foerageer.xml
deleted file mode 100644 (file)
index be55f0a..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
----
-layout: null
----
-<?xml version="1.0" encoding="UTF-8" ?>
-<rss version="2.0">
-<channel>
-       {% assign blog = site.pages | where:'name','foerageer.md' %}
-       {% for page in blog limit:1 %}
-       <title>{{ page.title }}</title>
-       <description>
-                       {{ page.title }}:
-                       {{ page.description }}
-       </description>
-       <link>{{ page.url }}</link>
-       <lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
-       {% endfor %}
-
-       {% for post in site.posts %}
-       <item>
-               <title>{{ post.title }}</title>
-               <link>
-                       {{ post.url | prepend: site.url }}
-               </link>
-               <description>
-                       {{ post.excerpt }}
-               </description>
-               <pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
-               <guid>
-                       {{ post.url | prepend: site.url }}
-               </guid>
-       </item>
-       {% endfor %}
-</channel>
-</rss>
index 21ef6a9..15b14ca 100644 (file)
--- a/index.md
+++ b/index.md
@@ -1,37 +1,14 @@
 ---
+layout: index
 title: Mart Lubbers' website
+language: en
+language_reference: home
 ---
 
-{% include img.html alt='A photo of Mart Lubbers' img='p' %}
-PhD candidate at the [Institute of Computing and Information Sciences](https://cs.ru.nl) ([Radboud University](https://ru.nl))<br />
-`mart@martlubbers.net` (GPG: <a href="http://martlubbers.net/mart@martlubbers.net.asc" title="Fingerprint: 74FF FBF1 4758 273B 2F56  A30C A937 B7A1 AD3F EBE7" style="font-family:monospace">AD3FEBE7</a>)<br />
-`mart@cs.ru.nl`<br />
-<a rel="me" href="https://gitlab.com/mlubbers">gitlab</a>,
-<a rel="me" href="https://akademienl.social/@mart">Mastodon</a>,
-<a rel="me" href="https://dblp.uni-trier.de/pid/238/2964.html">dblp</a>,
-<a rel="me" href="https://orcid.org/0000-0002-4015-4878">ORCiD</a>
-<br />
-
-<header>
-## Table of contents
-                               
-<nav>
-- [Work](#work)
-- [Publications](#publications)
-       - [Peer reviewed](#peer-reviewed)
-       - [Student supervision](#student-supervision)
-       - [Theses](#theses)
-       - [Posters](#posters)
-- [Teaching](#teaching)
-- [Talks](#talks)
-- [Other](#other)
-       - [Software, libraries and projects](#software-libraries-and-projects)
-       - [Tutorials and manuals](#tutorials-and-manuals)
-       - [Interests](#interests)
-       - [Archive](#archive)
-</nav>
-</header>
-               
+{% include index_header.html %}
+
+{% include toc.html %}
+
 ## Work
 
 - Scientific programmer at the TOP Software Technology --- from 2023-06
@@ -184,27 +161,15 @@ PhD candidate at the [Institute of Computing and Information Sciences](https://c
 - [praatalign](https://github.com/dopefishh/praatalign) --- An interactive praat forced aligner, easily extensible for more languages.
 - [pympi](https://github.com/dopefishh/pympi) --- A python toolkit to interact with Praat and Elan files.
 
-### Tutorials and manuals
-
-- [Wifi roaming without network manager (includes eduroam ru instructions)](nonm.html) (Updated 2022-10-18)
-- [Dvorak page](dvorak.html) (Updated 2020-06-11)
-
 ### Interests
 
 Long distance running,
-[open water swimming](walrus.html),
+open water swimming,
 wildplukken,
 reading,
 heavy metal music,
 hacking,
-linux,
-[ſ-homografen](langes.html).
-
-### Archive
-
-#### Software
-
-- [m](https://github.com/dopefishh/m) --- `m' is for music, an extremely fast music indexer written in plain C.
+linux.
 
 #### Pages
 
diff --git a/nds/thoos.md b/nds/thoos.md
new file mode 100644 (file)
index 0000000..de7321c
--- /dev/null
@@ -0,0 +1,11 @@
+---
+layout: index
+title: Mart Lubbers' webstie
+language: nds
+language_reference: home
+---
+
+{% include index_header.html %}
+
+{% include toc.html %}
+
diff --git a/nds/triest.md b/nds/triest.md
new file mode 100644 (file)
index 0000000..e22ffc9
--- /dev/null
@@ -0,0 +1,10 @@
+---
+layout: index
+title: Trieste Muziek
+language: nds
+language_reference: triest
+---
+
+Thoosstie van et plaatenlabel Trieste Muziek
+
+Veur vroagen, nem contact op met <code>mart@triestemuziek.nl</code>.
diff --git a/nds/walrus.md b/nds/walrus.md
new file mode 100644 (file)
index 0000000..a058aaa
--- /dev/null
@@ -0,0 +1,23 @@
+---
+layout: index
+title: Walrusvereeniging Almere
+language: nds
+language_reference: walrus
+---
+
+Wolkom bie 'n webstie van de Walrusvereniging Almere.
+Nen heanig boetenzwemclubke dat, anners dan da'j van 'n noam maj't deanken, nog
+nich 'n heeln weeinter deur zwemt mear wie wolt het wa gearn.
+
+### Stie
+
+Noorderplassenstrand, wie komt bie mekaar op n diek ([N 52°23.681' E 005°13.202'](https://www.openstreetmap.org/?mlat=52.39467&amp;mlon=5.22003#map=19/52.39467/5.22003))
+<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://www.openstreetmap.org/export/embed.html?bbox=5.218304693698884%2C52.39362700408787%2C5.221764743328095%2C52.39571056721453&amp;layer=mapnik&amp;marker=52.39466797958001%2C5.220034718513489" style="border: 1px solid black"></iframe>
+
+### Agenda
+
+Wie hebt genne vast daagn mear zwemt twee tut dree moal in de wek.
+
+### Contact
+
+Stuur nen e-mailtje noar [`walrus@martlubbers.net`](mailto:walrus@martlubbers.net).
diff --git a/nl/thesis.md b/nl/thesis.md
new file mode 100644 (file)
index 0000000..70af647
--- /dev/null
@@ -0,0 +1,58 @@
+---
+layout: index
+title: Orchestrating the Internet of Things with Task-Oriented Programming
+language: nl
+language_reference: thesis
+---
+
+{% include img.html alt='Kaft' img='thesiscover' %}{% include img.html alt='Boekenlegger' img='thesisboekenlegger' %}
+
+{% include toc.html %}
+
+## Details
+
+In het openbaar verdedigd op woensdag 4 oktober om 14:30 precies.
+
+Promotor: prof. dr. ir. M.J. (Rinus) Plasmeijer
+Copromotores:
+
+- dr. J.M. (Jan Martin) Jansen (Nederlandse Defensie Academie)
+- dr. P.W.M. (Pieter) Koopman
+
+Manuscriptcommissie:
+
+- prof. dr. S.-B. (Sven-Bodo) Scholz
+- prof. dr. G.K. (Gabriele) Keller (Universiteit Utrecht)
+- prof. dr. M. (Mary) Sheeran (Chalmers Tekniska Högskola, Zweden)
+
+## Samenvatting
+
+Het ontwikkelen van betrouwbare software voor Internet of Things (IoT) systemen is moeilijk omdat ze dynamisch, interactief, gedistribueerd, samenwerkend, meerlaags en multitasking zijn.
+Ook draagt de semantische wrijving voorkomend uit de grote verscheidenheid aan hard- en software karakteristieken tussen de lagen bij aan dit probleem.
+Veel van deze computers zijn _randcomputers_ die onderdeel zijn van het IoT.
+Randcomputers bestaan vaak uit goedkope microcontrollers, ontworpen voor geïntegreerde systemen, en ze interacteren met de buitenwereld door sensoren en actuatoren.
+Enerzijds hebben ze weinig geheugen, langzame rekenkernen en trage communicatie.
+Anderzijds zijn ze klein en hoogst energie-efficiënt.
+
+Taakgeörienteerd programmeren (TOP) is geschikt om met de uitdagingen van IoT systemen om te gaan.
+In TOP zijn abstracte representaties van werk, de taken, de bouwstenen.
+Tijdens het uitvoeren van een taak kan de huidige waarde geobserveerd worden en hierop kunnen andere taken reageren.
+Door taken te combineren of te transformeren kunnen samenwerkingsvormen uitgedrukt worden.
+Van deze beschrijving wordt een computersysteem gegenereerd dat gebruikers begeleidt in het uitvoeren van het werk.
+Randcomputers hebben ook baat bij TOP, al is niet eenvoudig om TOP-systemen erop in te zetten.
+
+Deze dissertatie laat zien hoe gehele IoT-systemen georkestreerd kunnen worden met {TOP}.
+Gebruik makend van techniek kunnen alle lagen van een IoT-systeem en hun samenwerking uitgedrukt worden in één hoog abstractieniveau, programmeertaal, paradigma en typesysteem.
+Allereerst laat ik enkele technieken zien om ingebedde domein-specifieke talen te maken.
+Daarna beschrijf ik mTask, een TOP-systeem voor randcomputers ingebed in iTask.
+Taken worden tijdens het uitvoeren opgebouwd, waardoor ze afgestemd kunnen worden op de huidige werkeisen.
+Vervolgens worden ze naar het apparaat gestuurd ter interpretatie.
+Na eenmalig uitgerust te worden met het domeinspecifieke besturingssysteem is een randcomputer geschikt voor mTask.
+Dit stuurprogramma voert de ontvangen taken energiezuinig uit en automatiseert tevens alle communicatie en dataverwerking.
+Alle aspecten van het mTask-systeem worden beschreven: voorbeeldprogramma's, taalontwerp, implementatiedetails, integratie met iTask en de energiezuinige functionaliteit.
+
+Het laagloos programmeren van IoT systemen wordt ook vergeleken met traditioneel gelaagd programmeren.
+Laagloos programmeren leidt tot minder code en minder programmeertalen.
+Door het gebruik van één paradigma en een systeembreed typesysteem verlaagt laagloos programmeren de semantische wrijving, onderhouds- en robuustheidsproblematiek en moeizame onderlinge samenwerking.
+
+Slides voor de samenvattingspresentatie kunnen [hier](/files/thesispraatje.pdf) gevonden worden.
diff --git a/nl/thuis.md b/nl/thuis.md
new file mode 100644 (file)
index 0000000..d19e83e
--- /dev/null
@@ -0,0 +1,10 @@
+---
+layout: index
+title: Mart Lubbers' webpagina
+language: nl
+language_reference: home
+---
+
+{% include index_header.html %}
+
+{% include toc.html %}
diff --git a/nl/triest.md b/nl/triest.md
new file mode 100644 (file)
index 0000000..bef92a1
--- /dev/null
@@ -0,0 +1,10 @@
+---
+layout: index
+title: Trieste Muziek
+language: nl
+language_reference: triest
+---
+
+Thuispagina van het platenlabel Trieste Muziek.
+
+For vragen, contacteer <code>mart@triestemuziek.nl</code>.
similarity index 94%
rename from walrus.md
rename to nl/walrus.md
index f648aef..c97622a 100644 (file)
--- a/walrus.md
@@ -1,6 +1,8 @@
 ---
+layout: index
 title: Walrusvereniging Almere
-date: 2023-06-12
+language: nl
+language_reference: walrus
 ---
 
 Welkom op de website van de Walrusvereniging Almere.
diff --git a/test.php b/test.php
deleted file mode 100644 (file)
index 5d666fb..0000000
--- a/test.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<html>
-       <head>
-               <meta name="keywords" content="Doom, Black, Metal, Depressing, Depressed, Band, Name, Generator, Funeral">
-               <meta name="description" content="Doom metal band name generator">
-               <meta name="author" content="mart@martlubbers.net">
-               <title>Doom Metal Band Name Generator!</title>
-       </head>
-       <body bgcolor="#000000" ALINK="#FFFFFF" LINK="#FFFFFF" TEXT="#FFFFFF" VLINK="#FFFFFF">
-<?php
-$input = array(
-       "Ability", "Abnormal", "Abominable", "Abuse", "Adolescents", "Affect", "Agency", "Aid", "Alarm", "Alienation", "All ages", "Alone", "Anger", "Anguish", "Antidepressant", "Anxiety", "Anxious", "Ashamed", "Attempt", "Attention", "Attitude", "Awareness", 
-       "Boiling", "Bitter", "Bad", "Bipolar", "Blase", "Blue", "Brain", 
-       "Caregiver", "Certify", "Child", "Clarity", "Clinical", "Communication", "Concern", "Conclude", "Condition", "Confide", "Confusion", "Cooperative", "Cope", "Counsel", "Courage", "Cruel", "Cure", "Cycle", 
-       "Data", "Death", "Debilitating", "Defeated", "Degree", "Depressed", "Depression", "Descent", "Despair", "Despicable", "Detestable", "Detriment", "Diagnosis", "Die", "Discrimination", "Discouraged", "Disease", "Disgusting", "Disinterest", "Dissatisfied", "Diminished", "Disorder", "Disorder", "Distracted", "Doctor", "Dog days", "Doom", "Down", "Drugs", 
-       "Education", "Effect", "Endure", "Esteem", "Evaluation", 
-       "Family", "Fatigued", "Fear", "Feelings", "Fight", "Finality", "Friends", "Funeral", 
-       "Gain", "Grief", "Grieving", "Guideline", "Guilty",  
-       "Hard work", "Heal", "Health", "Heaven", "Help", "Helpless", "Hereditary", "Hopelessness", "Hope", "Hot-line", "Hurt", 
-       "Immune", "Improvement", "Inability", "Inactivity", "Indicator", "Insecure", "Interested", "Interfere", "Involvement", "Irritable", "Isolation", "Issues", 
-       "Jeer", "Joking", 
-       "Kill", "Knowledge", "Knowledgeable", 
-       "Label", "Lack", "Level", "Level", "Listening", "Lousy", "Loss", 
-       "Mad", "Media", "Medication", "Medicine", "Melancholia", "Mental", "Mental health", "Miserable", "Misunderstanding", "Monitor", "Mourning", 
-       "Necessary", "Need", "Negative", "Normal", "Nothing", 
-       "Observation", "Oncoming", "Opinion", "Option", "Organize", "Overcome", "Overwhelmed", 
-       "Pain", "Panic", "Parents", "Patience", "Patient", "Pattern", "Pay attention", "Peers", "Personal", "Physician", "Pills", "Prescription", "Powerless", "Prevent", "Prevention", "Programs", "Progress", "Progressive", "Protect", "Psychiatrist", 
-       "Quality", "Quantity", "Query", "Quest", 
-       "Reality", "Refusal", "Reign", "Report", "Repugnant", "Requirement", "Resulting", "Review", 
-       "Sadness", "Scared", "Security", "Separation", "Septic", "Seriousness", "Sewage", "Shades", "Siblings", "Signs", "Skills", "Sleep", "Sleep pattern", "Solitary", "Sorrow", "Source", "Statistics", "Stigma", "Strength", "Struggle", "Studies", "Substance abuse", "Succor", "Suffer", "Suicide", "Sulky", "Sympathetic", "Symptoms", 
-       "Tack", "Talk", "Talking", "Tears", "Teenagers", "Tentative", "Terrible", "Terrified", "Therapy", "Thoughts", "Time", "Tired", "Tragedy", "Tragic", "Trajectory", "Treat", "Treatment", "Treatment", "Treatment", "Triumph", "Troubled", 
-       "Uncertain", "Uncomfortable", "Understanding", "Unfulfilled", "Unique", "Unsettling", "Unusual", 
-       "Validation", "Victim",
-       "Warning", "Watch", "Weeping", "Withdrawal", "Woesome", "World Health Organization", "Worry", "Worthless",
-       "Youth", 
-       "Zero");
-$rand_keys = array_rand($input, 2);
-echo "\t\t<h1>" . $input[$rand_keys[0]] . " ";
-echo $input[$rand_keys[1]] . "</h1><br />\n";
-?>
-               <br />
-               <img src="http://www.metalmusicarchives.com/images/artists/arckanum.jpg"/><br/>
-               <font size="1">
-                       <a href="javascript:location.reload(true);">new</a><br/>
-                       <a href="mailto:mart@martlubbers.net">contact</a>
-               </font>
-       </body>
-<html>
diff --git a/thesis.md b/thesis.md
deleted file mode 100644 (file)
index c7e0ffe..0000000
--- a/thesis.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: Orchestrating the Internet of Things with Task-Oriented Programming
-subtitle: a purely functional rhapsody
-date: 2023-04-19
----
-
-Draft version: [pdf](files/phdthesis.pdf)
diff --git a/triest/index.html b/triest/index.html
deleted file mode 100644 (file)
index 54ff3e0..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
-       <head>
-               <title>Trieste Muziek</title>
-               <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-               <meta name="viewport" content="width=device-width, initial-scale=1" />
-       </head>
-       <body>
-               <p>Home page of the record label Trieste Muziek.</p>
-               <p>For inquiries please contact <code>mart@triestemuziek.nl</code>.</p>
-       </body>
-</html>