Rickard's Projects

This site hosts my projects.

Projects

Recent events

2025-05-18 12:11 Rickard pushed to projects2

commit 79ce8ae6c58b50faf0ca35668203dca2685fd4f9
Author: Rickard Lindberg <rickard@rickardlindberg.me>
Date:   Sun May 18 12:09:59 2025 +0200

    Add support for custom domains. Assuming the same SSL cert.

diff --git a/projects2.py b/projects2.py
index 0ab01ad..042167a 100755
--- a/projects2.py
+++ b/projects2.py
@@ -68,8 +68,8 @@ class Config:
     ... ''')
     >>> for key, value in config.PROJECTS.items():
     ...     print(f"{key} = {value!r}")
-    timeline = {'description': 'A cross-platform application for displaying and navigating events on a timeline.', 'scm': 'hg'}
-    projects2 = {'description': 'Software to setup a code hosting platform. Powers this site.', 'scm': 'git'}
+    timeline = {'description': 'A cross-platform application for displaying and navigating events on a timeline.', 'scm': 'hg', 'domain': ''}
+    projects2 = {'description': 'Software to setup a code hosting platform. Powers this site.', 'scm': 'git', 'domain': ''}
 
     Can load gobals:
 
@@ -124,6 +124,7 @@ class Config:
                 self.PROJECTS[project] = {
                     "description": self.config.get(section, "Description", fallback=""),
                     "scm": self.config.get(section, "Scm", fallback="git"),
+                    "domain": self.config.get(section, "Domain", fallback=""),
                 }
         self.INSTANCE_ROOT = f"/opt/{self.INSTANCE_NAME}"
         self.INSTANCE_SCRIPT = f"{self.INSTANCE_ROOT}/{self.INSTANCE_NAME}.py"
@@ -149,8 +150,12 @@ class Config:
         return join(self.WEB_ROOT, project)
 
     def get_site_url(self, project):
-        part = relpath(self.get_site_root(project), start=self.WEB_ROOT)
-        return f"https://{self.DOMAIN}/{part}"
+        domain = self.PROJECTS[project]["domain"]
+        if domain:
+            return f"https://{domain}"
+        else:
+            part = relpath(self.get_site_root(project), start=self.WEB_ROOT)
+            return f"https://{self.DOMAIN}/{part}"
 
     def display_name(self, user_id):
         return self.USERS.get(user_id, {}).get("display_name", user_id)
@@ -867,7 +872,7 @@ class Projects2:
                     limit_except GET {
                         deny all;
                     }
-                    root /opt/rlprojects/web;
+                    root /opt/rlprojects/web/;
                     index index.html;
                     autoindex on;
                     autoindex_localtime on;
@@ -987,10 +992,17 @@ class Projects2:
             contents=self.config.wildcard_certificate.key,
             chmod="600",
         )
-        self.filesystem.write(f"/etc/nginx/conf.d/{self.config.INSTANCE_NAME}.conf", f"""\
+        domains = [("", self.config.DOMAIN)]
+        for project in self.config.PROJECTS:
+            domain = self.config.PROJECTS[project]["domain"]
+            if domain:
+                domains.append((project, domain))
+        configs = []
+        for path, domain in domains:
+            configs.append(f"""\
 server {{
     listen 80;
-    server_name {self.config.DOMAIN};
+    server_name {domain};
     location / {{
         limit_except GET {{
             deny all;
@@ -1002,12 +1014,12 @@ server {{
     listen 443 ssl;
     ssl_certificate {pem_path};
     ssl_certificate_key {key_path};
-    server_name {self.config.DOMAIN};
+    server_name {domain};
     location / {{
         limit_except GET {{
             deny all;
         }}
-        root {self.config.WEB_ROOT};
+        root {self.config.WEB_ROOT}/{path};
         index index.html;
         autoindex on;
         autoindex_localtime on;
@@ -1015,6 +1027,7 @@ server {{
     }}
 }}
 """)
+        self.filesystem.write(f"/etc/nginx/conf.d/{self.config.INSTANCE_NAME}.conf", "".join(configs))
         self.process.ensure(["systemctl", "reload", "nginx"])
         self.process.ensure(["firewall-cmd", "--permanent", "--add-service=http"])
         self.process.ensure(["firewall-cmd", "--permanent", "--add-service=https"])

2025-05-18 11:45 Rickard pushed to blog

commit 45fe3b1c329b3c89f8a8f74ba73be1a1a017361b
Author: Rickard Lindberg <rickard@rickardlindberg.me>
Date:   Sun May 18 11:45:33 2025 +0200

    Fix bad split indexing in title link.

diff --git a/blog.py b/blog.py
index fb6e49f..c1dee6b 100755
--- a/blog.py
+++ b/blog.py
@@ -183,7 +183,7 @@ class Post:
         if self.title:
             return self.title
         else:
-            return " ".join(self.body.strip().split(" ")[7]) + "..."
+            return " ".join(self.body.strip().split(" ")[:7]) + "..."
 
     def html_content(self):
         lines = []

2025-05-18 11:44 Rickard pushed to blog

commit 2fea12110ca72260c2eaf828f2a4caea159e2602
Author: Rickard Lindberg <rickard@rickardlindberg.me>
Date:   Sun May 18 11:44:05 2025 +0200

    Nicer link title for non titled posts.

diff --git a/blog.py b/blog.py
index 474941b..fb6e49f 100755
--- a/blog.py
+++ b/blog.py
@@ -183,7 +183,7 @@ class Post:
         if self.title:
             return self.title
         else:
-            return self.date.serialize()
+            return " ".join(self.body.strip().split(" ")[7]) + "..."
 
     def html_content(self):
         lines = []

2025-05-18 11:39 Rickard pushed to blog

commit ca7127c892a59c6d287951de100d1c13757f9264
Author: Rickard Lindberg <rickard@rickardlindberg.me>
Date:   Sun May 18 11:35:00 2025 +0200

    Render body as markdown.

diff --git a/Dockerfile.ci b/Dockerfile.ci
index 173b075..38c8594 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -1,3 +1,5 @@
-FROM python:3.13
+FROM fedora:42
 
-CMD ["python3.13", "blog.py", "build"]
+RUN dnf install -y python3-markdown
+
+CMD ["./blog.py", "build"]
diff --git a/blog.py b/blog.py
index 0e7f617..474941b 100755
--- a/blog.py
+++ b/blog.py
@@ -6,6 +6,7 @@ import doctest
 import glob
 import html
 import json
+import markdown
 import os
 import shutil
 import sys
@@ -152,6 +153,7 @@ class Post:
                     self.tags = [tag.strip() for tag in value.strip().split(",")]
                 elif name == "title":
                     self.title = value.strip()
+        self.body = "\n".join(lines)
 
     def html_path(self, start="."):
         return os.path.relpath(
@@ -197,6 +199,7 @@ class Post:
         for tag in self.tags:
             lines.append(" / ")
             lines.append(Tag("a", href=f"../../../tags/{tag}").inner(f"#{tag}"))
+        lines.append(markdown.markdown(self.body))
         return "".join(f"{x}\n" for x in lines)
 
     def write(self, root):

commit f1e294e58e5fe05f16c990da6fafc8e8f9493772
Author: Rickard Lindberg <rickard@rickardlindberg.me>
Date:   Sun May 18 11:26:58 2025 +0200

    Import content from Micro.blog as well.

diff --git a/posts/2011/09/28/testing-configuration/post.md b/posts/2011/09/28/testing-configuration/post.md
index e491e98..9c93eec 100644
--- a/posts/2011/09/28/testing-configuration/post.md
+++ b/posts/2011/09/28/testing-configuration/post.md
@@ -3,3 +3,8 @@ date: 2011-09-28 02:00:00
 title: Testing configuration
 tags: rop
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/reflections-on-programming/2011-09-28-testing-configuration/](http://archive.rickardlindberg.me/writing/reflections-on-programming/2011-09-28-testing-configuration/).
diff --git a/posts/2011/10/10/learning-haskell/post.md b/posts/2011/10/10/learning-haskell/post.md
index de5cba9..8b1d483 100644
--- a/posts/2011/10/10/learning-haskell/post.md
+++ b/posts/2011/10/10/learning-haskell/post.md
@@ -3,3 +3,8 @@ date: 2011-10-10 02:00:00
 title: Learning Haskell
 tags: rop
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/reflections-on-programming/2011-10-10-learning-haskell/](http://archive.rickardlindberg.me/writing/reflections-on-programming/2011-10-10-learning-haskell/).
diff --git a/posts/2011/11/02/does-tdd-have/post.md b/posts/2011/11/02/does-tdd-have/post.md
index 93425d9..c86b93c 100644
--- a/posts/2011/11/02/does-tdd-have/post.md
+++ b/posts/2011/11/02/does-tdd-have/post.md
@@ -3,3 +3,8 @@ date: 2011-11-02 02:00:00
 title: Does TDD have less advantage in Haskell?
 tags: rop
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/reflections-on-programming/2011-11-02-does-tdd-have-less-advantage-in-haskell/](http://archive.rickardlindberg.me/writing/reflections-on-programming/2011-11-02-does-tdd-have-less-advantage-in-haskell/).
diff --git a/posts/2012/01/11/introducing-a-series/post.md b/posts/2012/01/11/introducing-a-series/post.md
index d2e57fe..652e013 100644
--- a/posts/2012/01/11/introducing-a-series/post.md
+++ b/posts/2012/01/11/introducing-a-series/post.md
@@ -3,3 +3,8 @@ date: 2012-01-11 02:00:00
 title: Introducing a series about the development of an application
 tags: rop
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-01-11-application-development-series-intro/](http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-01-11-application-development-series-intro/).
diff --git a/posts/2012/01/23/organizing-information-on/post.md b/posts/2012/01/23/organizing-information-on/post.md
index 50bd9b1..b04473f 100644
--- a/posts/2012/01/23/organizing-information-on/post.md
+++ b/posts/2012/01/23/organizing-information-on/post.md
@@ -3,3 +3,8 @@ date: 2012-01-23 02:00:00
 title: Organizing information on a wiki
 tags: rop
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-01-23-organizing-information-on-a-wiki/](http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-01-23-organizing-information-on-a-wiki/).
diff --git a/posts/2012/02/05/writing-a-real/post.md b/posts/2012/02/05/writing-a-real/post.md
index 28d5d4a..a191027 100644
--- a/posts/2012/02/05/writing-a-real/post.md
+++ b/posts/2012/02/05/writing-a-real/post.md
@@ -3,3 +3,8 @@ date: 2012-02-05 02:00:00
 title: Writing a real application in Haskell
 tags: rop
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-02-05-writing-a-real-application-in-haskell/](http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-02-05-writing-a-real-application-in-haskell/).
diff --git a/posts/2012/02/11/hello-world-in/post.md b/posts/2012/02/11/hello-world-in/post.md
index 18c3bc4..1dabebe 100644
--- a/posts/2012/02/11/hello-world-in/post.md
+++ b/posts/2012/02/11/hello-world-in/post.md
@@ -3,3 +3,8 @@ date: 2012-02-11 02:00:00
 title: Hello world in Haskell and GTK
 tags: rop
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-02-11-hello-world-haskell-gtk/](http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-02-11-hello-world-haskell-gtk/).
diff --git a/posts/2012/02/25/setup-and-teardown/post.md b/posts/2012/02/25/setup-and-teardown/post.md
index b2c82e4..abd7ecf 100644
--- a/posts/2012/02/25/setup-and-teardown/post.md
+++ b/posts/2012/02/25/setup-and-teardown/post.md
@@ -3,3 +3,8 @@ date: 2012-02-25 02:00:00
 title: Setup and teardown in HUnit
 tags: rop
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-02-25-setup-and-teardown-in-hunit/](http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-02-25-setup-and-teardown-in-hunit/).
diff --git a/posts/2012/03/03/closing-the-feedback/post.md b/posts/2012/03/03/closing-the-feedback/post.md
index 883962d..b0f22a5 100644
--- a/posts/2012/03/03/closing-the-feedback/post.md
+++ b/posts/2012/03/03/closing-the-feedback/post.md
@@ -3,3 +3,8 @@ date: 2012-03-03 02:00:00
 title: Closing the feedback loop
 tags: rop
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-03-03-closing-the-feedback-loop/](http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-03-03-closing-the-feedback-loop/).
diff --git a/posts/2012/06/17/a-beautiful-brainfuck/post.md b/posts/2012/06/17/a-beautiful-brainfuck/post.md
index a2cc0bf..5d3ae1e 100644
--- a/posts/2012/06/17/a-beautiful-brainfuck/post.md
+++ b/posts/2012/06/17/a-beautiful-brainfuck/post.md
@@ -3,3 +3,8 @@ date: 2012-06-17 02:00:00
 title: A beautiful Brainfuck implementation
 tags: rop
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-06-17-a-beautiful-brainfuck-implementation/](http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-06-17-a-beautiful-brainfuck-implementation/).
diff --git a/posts/2012/06/23/data-structures-in/post.md b/posts/2012/06/23/data-structures-in/post.md
index 2bbe790..48c2287 100644
--- a/posts/2012/06/23/data-structures-in/post.md
+++ b/posts/2012/06/23/data-structures-in/post.md
@@ -3,3 +3,8 @@ date: 2012-06-23 02:00:00
 title: Data structures in OOP
 tags: rop
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-06-23-data-structures-in-oop/](http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-06-23-data-structures-in-oop/).
diff --git a/posts/2012/07/11/a-refactoring-story/post.md b/posts/2012/07/11/a-refactoring-story/post.md
index fb7ba98..bdc4dcd 100644
--- a/posts/2012/07/11/a-refactoring-story/post.md
+++ b/posts/2012/07/11/a-refactoring-story/post.md
@@ -3,3 +3,8 @@ date: 2012-07-11 02:00:00
 title: A refactoring story
 tags: rop
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-07-11-a-refactoring-story/](http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-07-11-a-refactoring-story/).
diff --git a/posts/2012/07/22/good-bad-programmer/post.md b/posts/2012/07/22/good-bad-programmer/post.md
index b4f6b6f..0225eda 100644
--- a/posts/2012/07/22/good-bad-programmer/post.md
+++ b/posts/2012/07/22/good-bad-programmer/post.md
@@ -3,3 +3,8 @@ date: 2012-07-22 02:00:00
 title: Good bad programmer
 tags: rop
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-07-22-good-bad-programmer/](http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-07-22-good-bad-programmer/).
diff --git a/posts/2012/08/30/learn-how-to/post.md b/posts/2012/08/30/learn-how-to/post.md
index d0d5949..4d2e9e7 100644
--- a/posts/2012/08/30/learn-how-to/post.md
+++ b/posts/2012/08/30/learn-how-to/post.md
@@ -3,3 +3,8 @@ date: 2012-08-30 02:00:00
 title: Learn how to implement languages
 tags: rop
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-08-30-learn-how-to-implement-languages/](http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-08-30-learn-how-to-implement-languages/).
diff --git a/posts/2012/09/08/how-to-organize/post.md b/posts/2012/09/08/how-to-organize/post.md
index 4d18de7..a01e855 100644
--- a/posts/2012/09/08/how-to-organize/post.md
+++ b/posts/2012/09/08/how-to-organize/post.md
@@ -3,3 +3,8 @@ date: 2012-09-08 02:00:00
 title: How to organize your tests?
 tags: rop
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-09-08-how-to-organize-your-tests/](http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-09-08-how-to-organize-your-tests/).
diff --git a/posts/2013/02/24/related-things-are/post.md b/posts/2013/02/24/related-things-are/post.md
index f4e12a6..0aef401 100644
--- a/posts/2013/02/24/related-things-are/post.md
+++ b/posts/2013/02/24/related-things-are/post.md
@@ -3,3 +3,8 @@ date: 2013-02-24 02:00:00
 title: Related things are not kept together
 tags: favourite, rop
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/reflections-on-programming/2013-02-24-related-things-are-not-kept-together/](http://archive.rickardlindberg.me/writing/reflections-on-programming/2013-02-24-related-things-are-not-kept-together/).
diff --git a/posts/2013/06/12/refactor-with-higher/post.md b/posts/2013/06/12/refactor-with-higher/post.md
index 6197cfc..0ffb981 100644
--- a/posts/2013/06/12/refactor-with-higher/post.md
+++ b/posts/2013/06/12/refactor-with-higher/post.md
@@ -3,3 +3,8 @@ date: 2013-06-12 02:00:00
 title: Refactor with higher confidence
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-12-refactor-confidence/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-12-refactor-confidence/).
diff --git a/posts/2013/06/13/boy-scout-habit/post.md b/posts/2013/06/13/boy-scout-habit/post.md
index d8dcb07..431b221 100644
--- a/posts/2013/06/13/boy-scout-habit/post.md
+++ b/posts/2013/06/13/boy-scout-habit/post.md
@@ -3,3 +3,8 @@ date: 2013-06-13 02:00:00
 title: Boy scout habit
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-13-boy-scout/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-13-boy-scout/).
diff --git a/posts/2013/06/14/what-tests-to/post.md b/posts/2013/06/14/what-tests-to/post.md
index 663ad3c..2bc2463 100644
--- a/posts/2013/06/14/what-tests-to/post.md
+++ b/posts/2013/06/14/what-tests-to/post.md
@@ -3,3 +3,8 @@ date: 2013-06-14 02:00:00
 title: What tests to keep?
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-14-tests-keep/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-14-tests-keep/).
diff --git a/posts/2013/06/15/confidence-in-changing/post.md b/posts/2013/06/15/confidence-in-changing/post.md
index 625cf7a..c79a6ca 100644
--- a/posts/2013/06/15/confidence-in-changing/post.md
+++ b/posts/2013/06/15/confidence-in-changing/post.md
@@ -3,3 +3,8 @@ date: 2013-06-15 02:00:00
 title: Confidence in changing code
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-15-confidence-change-code/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-15-confidence-change-code/).
diff --git a/posts/2013/06/16/size-of-code/post.md b/posts/2013/06/16/size-of-code/post.md
index f5fe457..14d32b2 100644
--- a/posts/2013/06/16/size-of-code/post.md
+++ b/posts/2013/06/16/size-of-code/post.md
@@ -3,3 +3,8 @@ date: 2013-06-16 02:00:00
 title: Size of code
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-16-code-size/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-16-code-size/).
diff --git a/posts/2013/06/17/test-coverage/post.md b/posts/2013/06/17/test-coverage/post.md
index 72b65f1..75fb543 100644
--- a/posts/2013/06/17/test-coverage/post.md
+++ b/posts/2013/06/17/test-coverage/post.md
@@ -3,3 +3,8 @@ date: 2013-06-17 02:00:00
 title: Test coverage
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-17-test-coverage/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-17-test-coverage/).
diff --git a/posts/2013/06/18/maintainable-tests/post.md b/posts/2013/06/18/maintainable-tests/post.md
index f7d1762..4bf91d8 100644
--- a/posts/2013/06/18/maintainable-tests/post.md
+++ b/posts/2013/06/18/maintainable-tests/post.md
@@ -3,3 +3,8 @@ date: 2013-06-18 02:00:00
 title: Maintainable tests
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-18-maintainable-tests/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-18-maintainable-tests/).
diff --git a/posts/2013/06/19/duplicated-code/post.md b/posts/2013/06/19/duplicated-code/post.md
index 690d8bb..121fd47 100644
--- a/posts/2013/06/19/duplicated-code/post.md
+++ b/posts/2013/06/19/duplicated-code/post.md
@@ -3,3 +3,8 @@ date: 2013-06-19 02:00:00
 title: Duplicated code
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-19-duplicated-code/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-19-duplicated-code/).
diff --git a/posts/2013/06/20/using-tests-for/post.md b/posts/2013/06/20/using-tests-for/post.md
index 4ab8012..32549b0 100644
--- a/posts/2013/06/20/using-tests-for/post.md
+++ b/posts/2013/06/20/using-tests-for/post.md
@@ -3,3 +3,8 @@ date: 2013-06-20 02:00:00
 title: Using tests for feedback
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-20-testing-for-feedback/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-20-testing-for-feedback/).
diff --git a/posts/2013/06/21/bug-free-code/post.md b/posts/2013/06/21/bug-free-code/post.md
index 172f67c..7f10c24 100644
--- a/posts/2013/06/21/bug-free-code/post.md
+++ b/posts/2013/06/21/bug-free-code/post.md
@@ -3,3 +3,8 @@ date: 2013-06-21 02:00:00
 title: Bug free code
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-21-bug-free-code/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-21-bug-free-code/).
diff --git a/posts/2013/06/22/features-and-bugs/post.md b/posts/2013/06/22/features-and-bugs/post.md
index bb3a427..1e9b61b 100644
--- a/posts/2013/06/22/features-and-bugs/post.md
+++ b/posts/2013/06/22/features-and-bugs/post.md
@@ -3,3 +3,8 @@ date: 2013-06-22 02:00:00
 title: Features and bugs
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-22-features-and-bugs/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-22-features-and-bugs/).
diff --git a/posts/2013/06/23/documenting-projects/post.md b/posts/2013/06/23/documenting-projects/post.md
index c70d030..658f2f8 100644
--- a/posts/2013/06/23/documenting-projects/post.md
+++ b/posts/2013/06/23/documenting-projects/post.md
@@ -3,3 +3,8 @@ date: 2013-06-23 02:00:00
 title: Documenting projects
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-23-documenting-projects/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-23-documenting-projects/).
diff --git a/posts/2013/06/24/resistance-to-learning/post.md b/posts/2013/06/24/resistance-to-learning/post.md
index c513e76..595da02 100644
--- a/posts/2013/06/24/resistance-to-learning/post.md
+++ b/posts/2013/06/24/resistance-to-learning/post.md
@@ -3,3 +3,8 @@ date: 2013-06-24 02:00:00
 title: Resistance to learning
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-24-resistance-to-learning/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-24-resistance-to-learning/).
diff --git a/posts/2013/06/25/smallest-possible-thing/post.md b/posts/2013/06/25/smallest-possible-thing/post.md
index 09754d4..9a6a07b 100644
--- a/posts/2013/06/25/smallest-possible-thing/post.md
+++ b/posts/2013/06/25/smallest-possible-thing/post.md
@@ -3,3 +3,8 @@ date: 2013-06-25 02:00:00
 title: Smallest possible thing
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-25-smallest-possible/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-25-smallest-possible/).
diff --git a/posts/2013/06/26/small-steps/post.md b/posts/2013/06/26/small-steps/post.md
index d608df7..27ae880 100644
--- a/posts/2013/06/26/small-steps/post.md
+++ b/posts/2013/06/26/small-steps/post.md
@@ -3,3 +3,8 @@ date: 2013-06-26 02:00:00
 title: Small steps
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-26-small-steps/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-26-small-steps/).
diff --git a/posts/2013/06/27/constant-progress/post.md b/posts/2013/06/27/constant-progress/post.md
index 8693edf..e539528 100644
--- a/posts/2013/06/27/constant-progress/post.md
+++ b/posts/2013/06/27/constant-progress/post.md
@@ -3,3 +3,8 @@ date: 2013-06-27 02:00:00
 title: Constant progress
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-27-constant-progress/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-27-constant-progress/).
diff --git a/posts/2013/06/28/atomic-operations/post.md b/posts/2013/06/28/atomic-operations/post.md
index 72b30d2..27e6efc 100644
--- a/posts/2013/06/28/atomic-operations/post.md
+++ b/posts/2013/06/28/atomic-operations/post.md
@@ -3,3 +3,8 @@ date: 2013-06-28 02:00:00
 title: Atomic operations
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-28-atomic-operations/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-28-atomic-operations/).
diff --git a/posts/2013/06/29/one-thing-per/post.md b/posts/2013/06/29/one-thing-per/post.md
index 0f689a2..53012b7 100644
--- a/posts/2013/06/29/one-thing-per/post.md
+++ b/posts/2013/06/29/one-thing-per/post.md
@@ -3,3 +3,8 @@ date: 2013-06-29 02:00:00
 title: One thing per commit
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-29-one-thing-per-commit/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-29-one-thing-per-commit/).
diff --git a/posts/2013/06/30/formatting-code/post.md b/posts/2013/06/30/formatting-code/post.md
index d7bebd6..c3060e0 100644
--- a/posts/2013/06/30/formatting-code/post.md
+++ b/posts/2013/06/30/formatting-code/post.md
@@ -3,3 +3,8 @@ date: 2013-06-30 02:00:00
 title: Formatting code
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-30-formatting-code/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-30-formatting-code/).
diff --git a/posts/2013/07/01/learning-about-a/post.md b/posts/2013/07/01/learning-about-a/post.md
index 7ab2a63..95ee8a6 100644
--- a/posts/2013/07/01/learning-about-a/post.md
+++ b/posts/2013/07/01/learning-about-a/post.md
@@ -3,3 +3,8 @@ date: 2013-07-01 02:00:00
 title: Learning about a problem
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-07-01-learning-about-a-problem/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-07-01-learning-about-a-problem/).
diff --git a/posts/2013/07/02/cohesion-an-naming/post.md b/posts/2013/07/02/cohesion-an-naming/post.md
index a5c5a78..ba8edee 100644
--- a/posts/2013/07/02/cohesion-an-naming/post.md
+++ b/posts/2013/07/02/cohesion-an-naming/post.md
@@ -3,3 +3,8 @@ date: 2013-07-02 02:00:00
 title: Cohesion an naming
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-07-02-cohesion-and-naming/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-07-02-cohesion-and-naming/).
diff --git a/posts/2013/07/03/visualizing-hierarchy-and/post.md b/posts/2013/07/03/visualizing-hierarchy-and/post.md
index ad848f3..a86fc04 100644
--- a/posts/2013/07/03/visualizing-hierarchy-and/post.md
+++ b/posts/2013/07/03/visualizing-hierarchy-and/post.md
@@ -3,3 +3,8 @@ date: 2013-07-03 02:00:00
 title: Visualizing hierarchy and grouping
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-07-03-visualizing-hierarchy-and-groupings/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-07-03-visualizing-hierarchy-and-groupings/).
diff --git a/posts/2013/07/04/mindmap-tasks/post.md b/posts/2013/07/04/mindmap-tasks/post.md
index bf81a13..824dbe7 100644
--- a/posts/2013/07/04/mindmap-tasks/post.md
+++ b/posts/2013/07/04/mindmap-tasks/post.md
@@ -3,3 +3,8 @@ date: 2013-07-04 02:00:00
 title: Mindmap tasks
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-07-04-mindmap-tasks/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-07-04-mindmap-tasks/).
diff --git a/posts/2013/07/05/refactoring-step-in/post.md b/posts/2013/07/05/refactoring-step-in/post.md
index 3aaed00..ea7e24c 100644
--- a/posts/2013/07/05/refactoring-step-in/post.md
+++ b/posts/2013/07/05/refactoring-step-in/post.md
@@ -3,3 +3,8 @@ date: 2013-07-05 02:00:00
 title: Refactoring step in TDD
 tags: totd1
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-07-05-refactoring-step-tdd/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-07-05-refactoring-step-tdd/).
diff --git a/posts/2013/09/30/latency-free-overdubbing/post.md b/posts/2013/09/30/latency-free-overdubbing/post.md
index 2b92083..7da4c6d 100644
--- a/posts/2013/09/30/latency-free-overdubbing/post.md
+++ b/posts/2013/09/30/latency-free-overdubbing/post.md
@@ -3,3 +3,8 @@ date: 2013-09-30 02:00:00
 title: Latency free overdubbing in Ardour
 tags: 
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/ardour-latency-free-overdubbing/](http://archive.rickardlindberg.me/writing/ardour-latency-free-overdubbing/).
diff --git a/posts/2014/05/12/software-writer/post.md b/posts/2014/05/12/software-writer/post.md
index 504168c..2618e3f 100644
--- a/posts/2014/05/12/software-writer/post.md
+++ b/posts/2014/05/12/software-writer/post.md
@@ -3,3 +3,8 @@ date: 2014-05-12 02:00:00
 title: Software writer
 tags: totd2
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-12-software-writer/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-12-software-writer/).
diff --git a/posts/2014/05/13/powerful-software/post.md b/posts/2014/05/13/powerful-software/post.md
index 58ce029..175d8b8 100644
--- a/posts/2014/05/13/powerful-software/post.md
+++ b/posts/2014/05/13/powerful-software/post.md
@@ -3,3 +3,8 @@ date: 2014-05-13 02:00:00
 title: Powerful software
 tags: totd2
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-13-powerful-software/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-13-powerful-software/).
diff --git a/posts/2014/05/14/exploring-with-doctest/post.md b/posts/2014/05/14/exploring-with-doctest/post.md
index b3b6526..94d0730 100644
--- a/posts/2014/05/14/exploring-with-doctest/post.md
+++ b/posts/2014/05/14/exploring-with-doctest/post.md
@@ -3,3 +3,8 @@ date: 2014-05-14 02:00:00
 title: Exploring with doctest
 tags: totd2
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-14-doctests/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-14-doctests/).
diff --git a/posts/2014/05/15/clarity-is-hard/post.md b/posts/2014/05/15/clarity-is-hard/post.md
index 9089d51..0b65fe5 100644
--- a/posts/2014/05/15/clarity-is-hard/post.md
+++ b/posts/2014/05/15/clarity-is-hard/post.md
@@ -3,3 +3,8 @@ date: 2014-05-15 02:00:00
 title: Clarity is hard
 tags: totd2
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-15-clarity-is-hard/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-15-clarity-is-hard/).
diff --git a/posts/2014/05/18/visualizing-program-flow/post.md b/posts/2014/05/18/visualizing-program-flow/post.md
index 43f5c33..002eb7a 100644
--- a/posts/2014/05/18/visualizing-program-flow/post.md
+++ b/posts/2014/05/18/visualizing-program-flow/post.md
@@ -3,3 +3,8 @@ date: 2014-05-18 02:00:00
 title: Visualizing program flow
 tags: totd2
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-18-visualizing-flow/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-18-visualizing-flow/).
diff --git a/posts/2014/05/19/testability-good-design/post.md b/posts/2014/05/19/testability-good-design/post.md
index 238b715..1cd9977 100644
--- a/posts/2014/05/19/testability-good-design/post.md
+++ b/posts/2014/05/19/testability-good-design/post.md
@@ -3,3 +3,8 @@ date: 2014-05-19 02:00:00
 title: Testability == good design?
 tags: totd2
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-19-testability-good-design/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-19-testability-good-design/).
diff --git a/posts/2014/05/20/state/post.md b/posts/2014/05/20/state/post.md
index 5873cb6..eac838b 100644
--- a/posts/2014/05/20/state/post.md
+++ b/posts/2014/05/20/state/post.md
@@ -3,3 +3,8 @@ date: 2014-05-20 02:00:00
 title: State
 tags: totd2
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-20-state/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-20-state/).
diff --git a/posts/2014/05/21/naming-intermediate-steps/post.md b/posts/2014/05/21/naming-intermediate-steps/post.md
index 6ffc740..d9edbfb 100644
--- a/posts/2014/05/21/naming-intermediate-steps/post.md
+++ b/posts/2014/05/21/naming-intermediate-steps/post.md
@@ -3,3 +3,8 @@ date: 2014-05-21 02:00:00
 title: Naming intermediate steps
 tags: totd2
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-21-naming/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-21-naming/).
diff --git a/posts/2014/05/22/erlang/post.md b/posts/2014/05/22/erlang/post.md
index b835b8e..85bba61 100644
--- a/posts/2014/05/22/erlang/post.md
+++ b/posts/2014/05/22/erlang/post.md
@@ -3,3 +3,8 @@ date: 2014-05-22 02:00:00
 title: Erlang
 tags: totd2
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-22-erlang/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-22-erlang/).
diff --git a/posts/2014/05/23/editing-code-as/post.md b/posts/2014/05/23/editing-code-as/post.md
index e431bc9..2480ae0 100644
--- a/posts/2014/05/23/editing-code-as/post.md
+++ b/posts/2014/05/23/editing-code-as/post.md
@@ -3,3 +3,8 @@ date: 2014-05-23 02:00:00
 title: Editing code as text
 tags: totd2
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-23-editing-code-as-text/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-23-editing-code-as-text/).
diff --git a/posts/2014/05/26/functional-core/post.md b/posts/2014/05/26/functional-core/post.md
index 8b65caa..fc719f9 100644
--- a/posts/2014/05/26/functional-core/post.md
+++ b/posts/2014/05/26/functional-core/post.md
@@ -3,3 +3,8 @@ date: 2014-05-26 02:00:00
 title: Functional core
 tags: totd2
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-26-functional-core/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-26-functional-core/).
diff --git a/posts/2014/05/27/discoverable-tests/post.md b/posts/2014/05/27/discoverable-tests/post.md
index d45a7f2..97a3e3a 100644
--- a/posts/2014/05/27/discoverable-tests/post.md
+++ b/posts/2014/05/27/discoverable-tests/post.md
@@ -3,3 +3,8 @@ date: 2014-05-27 02:00:00
 title: Discoverable tests
 tags: totd2
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-27-discoverable-tests/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-27-discoverable-tests/).
diff --git a/posts/2014/05/28/refactor-before/post.md b/posts/2014/05/28/refactor-before/post.md
index 5c4daed..b344c6c 100644
--- a/posts/2014/05/28/refactor-before/post.md
+++ b/posts/2014/05/28/refactor-before/post.md
@@ -3,3 +3,8 @@ date: 2014-05-28 02:00:00
 title: Refactor before
 tags: totd2
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-28-refactor-before/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-28-refactor-before/).
diff --git a/posts/2014/06/02/small-increments/post.md b/posts/2014/06/02/small-increments/post.md
index 6aec0b9..3a38358 100644
--- a/posts/2014/06/02/small-increments/post.md
+++ b/posts/2014/06/02/small-increments/post.md
@@ -3,3 +3,8 @@ date: 2014-06-02 02:00:00
 title: Small increments
 tags: totd2
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-06-02-small-increments/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-06-02-small-increments/).
diff --git a/posts/2014/06/03/testing-as-a/post.md b/posts/2014/06/03/testing-as-a/post.md
index 36c3a3c..3d1b300 100644
--- a/posts/2014/06/03/testing-as-a/post.md
+++ b/posts/2014/06/03/testing-as-a/post.md
@@ -3,3 +3,8 @@ date: 2014-06-03 02:00:00
 title: Testing as a minimum
 tags: totd2
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-06-03-testing-as-a-minimum/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-06-03-testing-as-a-minimum/).
diff --git a/posts/2014/06/04/recognizing-progress/post.md b/posts/2014/06/04/recognizing-progress/post.md
index 688bd1b..22cc0c2 100644
--- a/posts/2014/06/04/recognizing-progress/post.md
+++ b/posts/2014/06/04/recognizing-progress/post.md
@@ -3,3 +3,8 @@ date: 2014-06-04 02:00:00
 title: Recognizing progress
 tags: totd2
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-06-04-recognizing-progress/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-06-04-recognizing-progress/).
diff --git a/posts/2014/06/05/accumulating-cruft/post.md b/posts/2014/06/05/accumulating-cruft/post.md
index 8de2368..c7d6963 100644
--- a/posts/2014/06/05/accumulating-cruft/post.md
+++ b/posts/2014/06/05/accumulating-cruft/post.md
@@ -3,3 +3,8 @@ date: 2014-06-05 02:00:00
 title: Accumulating cruft
 tags: totd2
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-06-05-accumulating-cruft/](http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-06-05-accumulating-cruft/).
diff --git a/posts/2014/09/17/xmodmap-on-fedora/post.md b/posts/2014/09/17/xmodmap-on-fedora/post.md
index fcf325f..72190ac 100644
--- a/posts/2014/09/17/xmodmap-on-fedora/post.md
+++ b/posts/2014/09/17/xmodmap-on-fedora/post.md
@@ -3,3 +3,8 @@ date: 2014-09-17 02:00:00
 title: Xmodmap on Fedora
 tags: 
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/xmodmap-on-fedora/](http://archive.rickardlindberg.me/writing/xmodmap-on-fedora/).
diff --git a/posts/2014/11/03/the-danger-with/post.md b/posts/2014/11/03/the-danger-with/post.md
index ae680d6..3661c62 100644
--- a/posts/2014/11/03/the-danger-with/post.md
+++ b/posts/2014/11/03/the-danger-with/post.md
@@ -3,3 +3,8 @@ date: 2014-11-03 02:00:00
 title: The danger with implicit if statements in Python
 tags: python
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/python-danger-implicit-if/](http://archive.rickardlindberg.me/writing/python-danger-implicit-if/).
diff --git a/posts/2015/03/28/search-and-replace/post.md b/posts/2015/03/28/search-and-replace/post.md
index ccc989c..c9e1499 100644
--- a/posts/2015/03/28/search-and-replace/post.md
+++ b/posts/2015/03/28/search-and-replace/post.md
@@ -3,3 +3,8 @@ date: 2015-03-28 02:00:00
 title: Search and replace in Vim
 tags: favourite, vim
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/search-and-replace-in-vim/](http://archive.rickardlindberg.me/writing/search-and-replace-in-vim/).
diff --git a/posts/2015/06/21/analysis-of-timeline/post.md b/posts/2015/06/21/analysis-of-timeline/post.md
index 1353e36..3ebde5d 100644
--- a/posts/2015/06/21/analysis-of-timeline/post.md
+++ b/posts/2015/06/21/analysis-of-timeline/post.md
@@ -3,3 +3,8 @@ date: 2015-06-21 02:00:00
 title: Analysis of Timeline emails
 tags: timeline
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/analysis-timeline-emails/](http://archive.rickardlindberg.me/writing/analysis-timeline-emails/).
diff --git a/posts/2015/06/27/precision-of-datetime/post.md b/posts/2015/06/27/precision-of-datetime/post.md
index 7ce2bb8..f6b46e2 100644
--- a/posts/2015/06/27/precision-of-datetime/post.md
+++ b/posts/2015/06/27/precision-of-datetime/post.md
@@ -3,3 +3,8 @@ date: 2015-06-27 02:00:00
 title: Precision of datetime in Python
 tags: python
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/python-datetime-precision/](http://archive.rickardlindberg.me/writing/python-datetime-precision/).
diff --git a/posts/2015/07/01/timeline-release-statistics/post.md b/posts/2015/07/01/timeline-release-statistics/post.md
index cecd6b7..d0b19f4 100644
--- a/posts/2015/07/01/timeline-release-statistics/post.md
+++ b/posts/2015/07/01/timeline-release-statistics/post.md
@@ -3,3 +3,8 @@ date: 2015-07-01 02:00:00
 title: Timeline release statistics
 tags: timeline
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/timeline-release-stats/](http://archive.rickardlindberg.me/writing/timeline-release-stats/).
diff --git a/posts/2015/10/23/problem-statements-in/post.md b/posts/2015/10/23/problem-statements-in/post.md
index c2ef2a1..51a593c 100644
--- a/posts/2015/10/23/problem-statements-in/post.md
+++ b/posts/2015/10/23/problem-statements-in/post.md
@@ -3,3 +3,8 @@ date: 2015-10-23 02:00:00
 title: Problem statements in commit messages
 tags: 
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/problem-in-commit-message/](http://archive.rickardlindberg.me/writing/problem-in-commit-message/).
diff --git a/posts/2016/09/20/tell-dont-ask/post.md b/posts/2016/09/20/tell-dont-ask/post.md
index 0fc0cbf..fcb84bb 100644
--- a/posts/2016/09/20/tell-dont-ask/post.md
+++ b/posts/2016/09/20/tell-dont-ask/post.md
@@ -3,3 +3,8 @@ date: 2016-09-20 02:00:00
 title: Tell, don't ask example
 tags: 
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/tell-dont-ask-example/](http://archive.rickardlindberg.me/writing/tell-dont-ask-example/).
diff --git a/posts/2017/03/11/bitten-by-python/post.md b/posts/2017/03/11/bitten-by-python/post.md
index 9525bed..7eb4185 100644
--- a/posts/2017/03/11/bitten-by-python/post.md
+++ b/posts/2017/03/11/bitten-by-python/post.md
@@ -3,3 +3,8 @@ date: 2017-03-11 02:00:00
 title: Bitten by Python generators
 tags: python
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/bitten-by-python-generators/](http://archive.rickardlindberg.me/writing/bitten-by-python-generators/).
diff --git a/posts/2017/05/19/evolution-of-recalling/post.md b/posts/2017/05/19/evolution-of-recalling/post.md
index 7ecb3f4..6b79a65 100644
--- a/posts/2017/05/19/evolution-of-recalling/post.md
+++ b/posts/2017/05/19/evolution-of-recalling/post.md
@@ -3,3 +3,165 @@ date: 2017-05-19 02:00:00
 title: Evolution of recalling Bash history
 tags: favourite, rlselect, Bash
 ---
+
+This article is about how I've become more efficient at using Bash, the
+interactive UNIX shell.
+
+When I work in Bash, I often want to execute a command again. In the beginning
+I re-typed the command and pressed enter. This worked fine for short commands,
+but became tedious for longer commands.
+
+In some shells this is the only way to enter a new command. But Bash remembers
+the recently executed commands and provides ways to recall them.
+
+## Cycle with arrow keys
+
+The first way I learned to recall history was with the arrow keys. If I pressed
+<kbd>Up</kbd> the previous command was inserted at the prompt. I could continue
+for as long as I wanted. If I pressed <kbd>Down</kbd> the next command was
+inserted at the prompt:
+
+```text
+$ ls<Enter>
+bin         ...
+
+$ date<Enter>
+Wed May 10 08:14:46 CEST 2017
+
+$ <Up>
+
+$ date<Up>
+
+$ ls<Down>
+
+$ date<Enter>
+Wed May 10 08:14:59 CEST 2017
+```
+This worked fine for commands that I had executed recently, but tedious for
+commands that I had executed long ago because I had to press <kbd>Up</kbd> many
+times.  I ended up pressing and holding <kbd>Up</kbd> so that history scrolled
+by and when I saw my command, I released the key and pressed <kbd>Down</kbd>
+until it appeared again.
+
+## Cycle with Ctrl-P/Ctrl-N
+
+Later I learned that <kbd>Ctrl-P</kbd> (previous) had the same function as
+<kbd>Up</kbd> and that <kbd>Ctrl-N</kbd> (next) had the same function as
+<kbd>Down</kbd>.
+
+These shortcuts were more comfortable for me because I like to keep my fingers
+as close to the home row as possible.
+
+## Searching with Ctrl-R
+
+Then I learned about Bash's interactive history search command. If I pressed
+<kbd>Ctrl-R</kbd> the prompt changed to this:
+
+```text
+(reverse-i-search)`':
+```
+This special prompt allowed me to type parts of a command that I had executed
+previously. Say I wanted to execute the last find command again. I typed
+"find" and the prompt changed to this:
+
+```text
+(reverse-i-search)`find': find -name '*.py' -a -type f
+```
+The text I typed, "find", was present before the colon. After the colon the
+last command that I had executed that contained the string "find" was
+displayed. In this case I did a search for Python files. If this was not the
+match I was looking for, I could hit <kbd>Ctrl-R</kbd> again and the part to
+the right of the colon would change to the next command in the history that
+contained the string "find". Once I found the command I was looking for I had
+two options: I could hit <kbd>Tab</kbd> to insert the command at the prompt:
+
+```text
+$ find -name '*.py' -a -type f
+```
+This way I could edit the command before I executed it. Or I could hit
+<kbd>Enter</kbd> to execute the command directly.
+
+Now I was able to recall commands that I had executed long ago. I almost
+replaced all my usages of <kbd>Ctrl-P</kbd>/<kbd>Ctrl-N</kbd> with
+<kbd>Ctrl-R</kbd>. Except for the cases where I knew that the command I wanted
+to recall was only a few entries back.
+
+## Frustrations with Ctrl-R
+
+The interactive search worked great for me when I knew what I was looking for.
+It did not work so great when I was more uncertain or when I mistyped the name
+of a command.
+
+The interactive search works by having a pointer to en entry in the history.
+When I typed a command it would move that pointer to the next item in the
+history that matched. But if I mistyped, the search might still match something
+further back in history. But when I erased a few characters to correct my
+mistake, the search would continue from there. Say this was my history:
+
+1. `tac ~/.bash_history`
+2. `echo frustration`
+3. `echo with`
+4. `echo bash`
+
+I hit <kbd>Ctrl-R</kbd> to to begin searching for "bash":
+
+```text
+(reverse-i-search)`':
+```
+But I mistyped. Instead of "b" I typed "f":
+
+```text
+(reverse-i-search)`f': echo frustration
+```
+The search matched item 2. I erased the incorrectly typed character:
+
+```text
+(reverse-i-search)`': echo frustration
+```
+The match remained. I typed bash correctly:
+
+```text
+(reverse-i-search)`bash': tac ~/.bash_history
+```
+It now matched item 1 instead of item 4. The search continued from the previous
+match. I would have wanted the search to always show the most recent match from
+history. The easiest way I found to reset the search after a failure to find
+what I was looking for was to just execute a dummy command. Usually I selected
+`ls` because it was short to type and had no side effects.
+
+## Interactively filtering with external program
+
+Then I was introduced to [hstr](https://github.com/dvorka/hstr) by a colleague.
+It worked like a replacement for <kbd>Ctrl-R</kbd>. When I invoked it, it
+dropped into a text UI where my last history entries were shown. I could
+also type part of a command to narrow down the list. If I changed the search
+string, the narrowed down list changed accordingly.  When I found a match I
+could similarly press <kbd>Tab</kbd> to insert the command at the prompt or
+press <kbd>Enter</kbd> to execute it immediately. It looked like this:
+
+<img src="https://cdn.uploads.micro.blog/173380/2025/hh-animated-01.gif"
+width="600" height="355" alt="Demo of hstr (from their website)">
+
+This solved my frustrations with Bash's interactive search. For me, this was a
+far easier way to find items from my history. The fact that it showed the last
+commands also helped me. I could visually inspect them, and they would guide my
+search.
+
+hstr was so good that I wanted to use a similar selection mechanism for other
+things, but hstr was only for Bash history. I ended up writing my own selection
+program: [rlselect](/projects/rlselect/). Partly because I wanted
+such a program, but also because it seemed like a fun program to write. The
+core selection program is called `rlselect` and then there are multiple
+programs that use it to allow selecting specific things. `rlselect-history` is
+a replacement for <kbd>Ctrl-R</kbd>/hstr:
+
+<img src="https://cdn.uploads.micro.blog/173380/2025/rlselect-history-demo.gif"
+width="600" height="376" alt="Demo of rlselect">
+
+There are some differences between hstr and `rlselect-history`. I took only the
+parts I personally wanted from hstr and put them into `rlselect-history`.
+
+If you want to improve your Bash usage, I suggest taking a look at
+[hstr](https://github.com/dvorka/hstr) or
+[rlselect](/projects/rlselect/).
+
diff --git a/posts/2017/11/06/a-new-home/post.md b/posts/2017/11/06/a-new-home/post.md
index 7749c29..d266b6b 100644
--- a/posts/2017/11/06/a-new-home/post.md
+++ b/posts/2017/11/06/a-new-home/post.md
@@ -3,3 +3,8 @@ date: 2017-11-06 02:00:00
 title: A new home for Timeline
 tags: timeline
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/new-home-for-timeline/](http://archive.rickardlindberg.me/writing/new-home-for-timeline/).
diff --git a/posts/2018/12/02/a-meta-approach/post.md b/posts/2018/12/02/a-meta-approach/post.md
index 46b2660..fb0d970 100644
--- a/posts/2018/12/02/a-meta-approach/post.md
+++ b/posts/2018/12/02/a-meta-approach/post.md
@@ -3,3 +3,8 @@ date: 2018-12-02 02:00:00
 title: A meta approach to implementing programming languages
 tags: favourite, rlmeta
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/rlmeta/](http://archive.rickardlindberg.me/writing/rlmeta/).
diff --git a/posts/2019/05/28/modifying-the-rlmeta/post.md b/posts/2019/05/28/modifying-the-rlmeta/post.md
index 26f1360..68777f8 100644
--- a/posts/2019/05/28/modifying-the-rlmeta/post.md
+++ b/posts/2019/05/28/modifying-the-rlmeta/post.md
@@ -3,3 +3,8 @@ date: 2019-05-28 02:00:00
 title: Modifying the RLMeta metacompiler
 tags: rlmeta
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/modifying-rlmeta/](http://archive.rickardlindberg.me/writing/modifying-rlmeta/).
diff --git a/posts/2019/06/27/draft-parsing-offside/post.md b/posts/2019/06/27/draft-parsing-offside/post.md
index 431ca07..78c0648 100644
--- a/posts/2019/06/27/draft-parsing-offside/post.md
+++ b/posts/2019/06/27/draft-parsing-offside/post.md
@@ -3,3 +3,8 @@ date: 2019-06-27 02:00:00
 title: DRAFT: Parsing off-side rule languages with RLMeta
 tags: rlmeta, draft
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/draft-rlmeta-offside/](http://archive.rickardlindberg.me/writing/draft-rlmeta-offside/).
diff --git a/posts/2019/06/28/optimizing-rlmeta/post.md b/posts/2019/06/28/optimizing-rlmeta/post.md
index 5acaaee..f3c79f2 100644
--- a/posts/2019/06/28/optimizing-rlmeta/post.md
+++ b/posts/2019/06/28/optimizing-rlmeta/post.md
@@ -3,3 +3,8 @@ date: 2019-06-28 02:00:00
 title: Optimizing RLMeta
 tags: rlmeta
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/optimizing-rlmeta/](http://archive.rickardlindberg.me/writing/optimizing-rlmeta/).
diff --git a/posts/2019/06/30/newsletter-june/post.md b/posts/2019/06/30/newsletter-june/post.md
index 94b7fae..a11417c 100644
--- a/posts/2019/06/30/newsletter-june/post.md
+++ b/posts/2019/06/30/newsletter-june/post.md
@@ -3,3 +3,8 @@ date: 2019-06-30 02:00:00
 title: Newsletter June 2019
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/june-2019/](http://archive.rickardlindberg.me/writing/newsletter/june-2019/).
diff --git a/posts/2019/07/31/newsletter-july/post.md b/posts/2019/07/31/newsletter-july/post.md
index 11250df..da330c5 100644
--- a/posts/2019/07/31/newsletter-july/post.md
+++ b/posts/2019/07/31/newsletter-july/post.md
@@ -3,3 +3,8 @@ date: 2019-07-31 02:00:00
 title: Newsletter July 2019
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/july-2019/](http://archive.rickardlindberg.me/writing/newsletter/july-2019/).
diff --git a/posts/2019/08/06/rlmeta-a-vm/post.md b/posts/2019/08/06/rlmeta-a-vm/post.md
index 097e0f2..d3aa21c 100644
--- a/posts/2019/08/06/rlmeta-a-vm/post.md
+++ b/posts/2019/08/06/rlmeta-a-vm/post.md
@@ -3,3 +3,8 @@ date: 2019-08-06 02:00:00
 title: RLMeta: a VM based approach
 tags: rlmeta
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/rlmeta-vm/](http://archive.rickardlindberg.me/writing/rlmeta-vm/).
diff --git a/posts/2019/08/31/doctest-fails-in/post.md b/posts/2019/08/31/doctest-fails-in/post.md
index a95d0d5..29f9d80 100644
--- a/posts/2019/08/31/doctest-fails-in/post.md
+++ b/posts/2019/08/31/doctest-fails-in/post.md
@@ -3,3 +3,8 @@ date: 2019-08-31 03:00:00
 title: Doctest fails in Python 3 with wxPython
 tags: timeline, python
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/timeline-doctest-wxpython/](http://archive.rickardlindberg.me/writing/timeline-doctest-wxpython/).
diff --git a/posts/2019/08/31/newsletter-august/post.md b/posts/2019/08/31/newsletter-august/post.md
index a5eb1fa..c017439 100644
--- a/posts/2019/08/31/newsletter-august/post.md
+++ b/posts/2019/08/31/newsletter-august/post.md
@@ -3,3 +3,8 @@ date: 2019-08-31 02:00:00
 title: Newsletter August 2019
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/august-2019/](http://archive.rickardlindberg.me/writing/newsletter/august-2019/).
diff --git a/posts/2019/09/07/parsing-left-associative/post.md b/posts/2019/09/07/parsing-left-associative/post.md
index 22bb121..934e237 100644
--- a/posts/2019/09/07/parsing-left-associative/post.md
+++ b/posts/2019/09/07/parsing-left-associative/post.md
@@ -3,3 +3,8 @@ date: 2019-09-07 02:00:00
 title: Parsing left associative operators using RLMeta
 tags: rlmeta
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/rlmeta-left-associativity/](http://archive.rickardlindberg.me/writing/rlmeta-left-associativity/).
diff --git a/posts/2019/09/25/alan-kay-notes/post.md b/posts/2019/09/25/alan-kay-notes/post.md
index fb485cc..0c6d0c9 100644
--- a/posts/2019/09/25/alan-kay-notes/post.md
+++ b/posts/2019/09/25/alan-kay-notes/post.md
@@ -3,3 +3,8 @@ date: 2019-09-25 02:00:00
 title: Alan Kay notes
 tags: alankay, favourite
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/alan-kay-notes/](http://archive.rickardlindberg.me/writing/alan-kay-notes/).
diff --git a/posts/2019/09/28/segfault-with-custom/post.md b/posts/2019/09/28/segfault-with-custom/post.md
index b984985..074b68c 100644
--- a/posts/2019/09/28/segfault-with-custom/post.md
+++ b/posts/2019/09/28/segfault-with-custom/post.md
@@ -3,3 +3,8 @@ date: 2019-09-28 02:00:00
 title: Segfault with custom events in wxPython
 tags: timeline, python
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/timeline-segfault-wxpython/](http://archive.rickardlindberg.me/writing/timeline-segfault-wxpython/).
diff --git a/posts/2019/10/01/newsletter-september/post.md b/posts/2019/10/01/newsletter-september/post.md
index 8d5c240..1e642ac 100644
--- a/posts/2019/10/01/newsletter-september/post.md
+++ b/posts/2019/10/01/newsletter-september/post.md
@@ -3,3 +3,8 @@ date: 2019-10-01 02:00:00
 title: Newsletter September 2019
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/september-2019/](http://archive.rickardlindberg.me/writing/newsletter/september-2019/).
diff --git a/posts/2019/11/02/newsletter-october/post.md b/posts/2019/11/02/newsletter-october/post.md
index 6b723a0..52ec2da 100644
--- a/posts/2019/11/02/newsletter-october/post.md
+++ b/posts/2019/11/02/newsletter-october/post.md
@@ -3,3 +3,8 @@ date: 2019-11-02 02:00:00
 title: Newsletter October 2019
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/october-2019/](http://archive.rickardlindberg.me/writing/newsletter/october-2019/).
diff --git a/posts/2019/12/03/newsletter-november/post.md b/posts/2019/12/03/newsletter-november/post.md
index ac38dcc..666a368 100644
--- a/posts/2019/12/03/newsletter-november/post.md
+++ b/posts/2019/12/03/newsletter-november/post.md
@@ -3,3 +3,8 @@ date: 2019-12-03 02:00:00
 title: Newsletter November 2019
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/november-2019/](http://archive.rickardlindberg.me/writing/newsletter/november-2019/).
diff --git a/posts/2020/01/05/newsletter-december/post.md b/posts/2020/01/05/newsletter-december/post.md
index ecd8bef..08cd2a4 100644
--- a/posts/2020/01/05/newsletter-december/post.md
+++ b/posts/2020/01/05/newsletter-december/post.md
@@ -3,3 +3,8 @@ date: 2020-01-05 02:00:00
 title: Newsletter December 2019
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/december-2019/](http://archive.rickardlindberg.me/writing/newsletter/december-2019/).
diff --git a/posts/2020/01/11/memoizing-failures-in/post.md b/posts/2020/01/11/memoizing-failures-in/post.md
index 030f229..8fbdf92 100644
--- a/posts/2020/01/11/memoizing-failures-in/post.md
+++ b/posts/2020/01/11/memoizing-failures-in/post.md
@@ -3,3 +3,8 @@ date: 2020-01-11 02:00:00
 title: Memoizing failures in RLMeta
 tags: rlmeta
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/rlmeta-memoize-failures/](http://archive.rickardlindberg.me/writing/rlmeta-memoize-failures/).
diff --git a/posts/2020/02/03/newsletter-january/post.md b/posts/2020/02/03/newsletter-january/post.md
index 82c6a9d..1f7531a 100644
--- a/posts/2020/02/03/newsletter-january/post.md
+++ b/posts/2020/02/03/newsletter-january/post.md
@@ -3,3 +3,8 @@ date: 2020-02-03 02:00:00
 title: Newsletter January 2020
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/january-2020/](http://archive.rickardlindberg.me/writing/newsletter/january-2020/).
diff --git a/posts/2020/03/02/newsletter-february/post.md b/posts/2020/03/02/newsletter-february/post.md
index 6ff4dd1..dfcdd01 100644
--- a/posts/2020/03/02/newsletter-february/post.md
+++ b/posts/2020/03/02/newsletter-february/post.md
@@ -3,3 +3,8 @@ date: 2020-03-02 02:00:00
 title: Newsletter February 2020
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/february-2020/](http://archive.rickardlindberg.me/writing/newsletter/february-2020/).
diff --git a/posts/2020/04/02/newsletter-march/post.md b/posts/2020/04/02/newsletter-march/post.md
index 1f5bf8c..29a75e8 100644
--- a/posts/2020/04/02/newsletter-march/post.md
+++ b/posts/2020/04/02/newsletter-march/post.md
@@ -3,3 +3,8 @@ date: 2020-04-02 02:00:00
 title: Newsletter March 2020
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/march-2020/](http://archive.rickardlindberg.me/writing/newsletter/march-2020/).
diff --git a/posts/2020/04/03/layoutupdate-problem-in/post.md b/posts/2020/04/03/layoutupdate-problem-in/post.md
index 2c9dbf1..d20738b 100644
--- a/posts/2020/04/03/layoutupdate-problem-in/post.md
+++ b/posts/2020/04/03/layoutupdate-problem-in/post.md
@@ -3,3 +3,8 @@ date: 2020-04-03 02:00:00
 title: Layout/Update problem in wxPython
 tags: wxpython, rliterate
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/wx-layout-update/](http://archive.rickardlindberg.me/writing/wx-layout-update/).
diff --git a/posts/2020/04/10/draft-porting-rlmeta/post.md b/posts/2020/04/10/draft-porting-rlmeta/post.md
index 6741aee..99868ec 100644
--- a/posts/2020/04/10/draft-porting-rlmeta/post.md
+++ b/posts/2020/04/10/draft-porting-rlmeta/post.md
@@ -3,3 +3,8 @@ date: 2020-04-10 02:00:00
 title: DRAFT: Porting RLMeta to C++
 tags: rlmeta, draft
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/rlmeta-cpp/](http://archive.rickardlindberg.me/writing/rlmeta-cpp/).
diff --git a/posts/2020/05/04/newsletter-april/post.md b/posts/2020/05/04/newsletter-april/post.md
index 3350011..6d4756d 100644
--- a/posts/2020/05/04/newsletter-april/post.md
+++ b/posts/2020/05/04/newsletter-april/post.md
@@ -3,3 +3,8 @@ date: 2020-05-04 02:00:00
 title: Newsletter April 2020
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/april-2020/](http://archive.rickardlindberg.me/writing/newsletter/april-2020/).
diff --git a/posts/2020/05/20/draft-compiling-expressions/post.md b/posts/2020/05/20/draft-compiling-expressions/post.md
index 91c0437..d6417d2 100644
--- a/posts/2020/05/20/draft-compiling-expressions/post.md
+++ b/posts/2020/05/20/draft-compiling-expressions/post.md
@@ -3,3 +3,8 @@ date: 2020-05-20 02:00:00
 title: DRAFT: Compiling expressions to x86 machine code
 tags: rlmeta, draft
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/expr-to-x86-compiler/](http://archive.rickardlindberg.me/writing/expr-to-x86-compiler/).
diff --git a/posts/2020/05/24/creating-the-rlmeta/post.md b/posts/2020/05/24/creating-the-rlmeta/post.md
index 58ac281..48e8716 100644
--- a/posts/2020/05/24/creating-the-rlmeta/post.md
+++ b/posts/2020/05/24/creating-the-rlmeta/post.md
@@ -3,3 +3,8 @@ date: 2020-05-24 02:00:00
 title: Creating the RLMeta poster
 tags: rlmeta
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/creating-rlmeta-poster/](http://archive.rickardlindberg.me/writing/creating-rlmeta-poster/).
diff --git a/posts/2020/06/13/newsletter-may/post.md b/posts/2020/06/13/newsletter-may/post.md
index e304081..85a475a 100644
--- a/posts/2020/06/13/newsletter-may/post.md
+++ b/posts/2020/06/13/newsletter-may/post.md
@@ -3,3 +3,8 @@ date: 2020-06-13 02:00:00
 title: Newsletter May 2020
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/may-2020/](http://archive.rickardlindberg.me/writing/newsletter/may-2020/).
diff --git a/posts/2020/07/06/newsletter-june/post.md b/posts/2020/07/06/newsletter-june/post.md
index 2ccb5a4..900cb75 100644
--- a/posts/2020/07/06/newsletter-june/post.md
+++ b/posts/2020/07/06/newsletter-june/post.md
@@ -3,3 +3,8 @@ date: 2020-07-06 02:00:00
 title: Newsletter June 2020
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/june-2020/](http://archive.rickardlindberg.me/writing/newsletter/june-2020/).
diff --git a/posts/2020/07/27/atomic-habits-the/post.md b/posts/2020/07/27/atomic-habits-the/post.md
index 05ba0b2..5838f61 100644
--- a/posts/2020/07/27/atomic-habits-the/post.md
+++ b/posts/2020/07/27/atomic-habits-the/post.md
@@ -3,3 +3,8 @@ date: 2020-07-27 02:00:00
 title: Atomic Habits: The Two-Minute Rule
 tags: books
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/atomic-habits-two-minute-rule/](http://archive.rickardlindberg.me/writing/atomic-habits-two-minute-rule/).
diff --git a/posts/2020/08/03/newsletter-july/post.md b/posts/2020/08/03/newsletter-july/post.md
index 58d68e4..8888adc 100644
--- a/posts/2020/08/03/newsletter-july/post.md
+++ b/posts/2020/08/03/newsletter-july/post.md
@@ -3,3 +3,8 @@ date: 2020-08-03 02:00:00
 title: Newsletter July 2020
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/july-2020/](http://archive.rickardlindberg.me/writing/newsletter/july-2020/).
diff --git a/posts/2020/08/13/the-bullet-journal/post.md b/posts/2020/08/13/the-bullet-journal/post.md
index ef2bcf9..a48e26a 100644
--- a/posts/2020/08/13/the-bullet-journal/post.md
+++ b/posts/2020/08/13/the-bullet-journal/post.md
@@ -3,3 +3,8 @@ date: 2020-08-13 02:00:00
 title: The Bullet Journal Method: Migration as Review
 tags: books
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/bullet-journal-method-migration-as-review/](http://archive.rickardlindberg.me/writing/bullet-journal-method-migration-as-review/).
diff --git a/posts/2020/09/13/newsletter-august/post.md b/posts/2020/09/13/newsletter-august/post.md
index b82dd0d..4c37a68 100644
--- a/posts/2020/09/13/newsletter-august/post.md
+++ b/posts/2020/09/13/newsletter-august/post.md
@@ -3,3 +3,8 @@ date: 2020-09-13 02:00:00
 title: Newsletter August 2020
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/august-2020/](http://archive.rickardlindberg.me/writing/newsletter/august-2020/).
diff --git a/posts/2020/10/03/newsletter-september/post.md b/posts/2020/10/03/newsletter-september/post.md
index cf286d1..f1c0c29 100644
--- a/posts/2020/10/03/newsletter-september/post.md
+++ b/posts/2020/10/03/newsletter-september/post.md
@@ -3,3 +3,8 @@ date: 2020-10-03 02:00:00
 title: Newsletter September 2020
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/september-2020/](http://archive.rickardlindberg.me/writing/newsletter/september-2020/).
diff --git a/posts/2020/11/11/newsletter-october/post.md b/posts/2020/11/11/newsletter-october/post.md
index b68bf20..f68c730 100644
--- a/posts/2020/11/11/newsletter-october/post.md
+++ b/posts/2020/11/11/newsletter-october/post.md
@@ -3,3 +3,8 @@ date: 2020-11-11 02:00:00
 title: Newsletter October 2020
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/october-2020/](http://archive.rickardlindberg.me/writing/newsletter/october-2020/).
diff --git a/posts/2020/12/03/newsletter-november/post.md b/posts/2020/12/03/newsletter-november/post.md
index c10056d..3562a0c 100644
--- a/posts/2020/12/03/newsletter-november/post.md
+++ b/posts/2020/12/03/newsletter-november/post.md
@@ -3,3 +3,8 @@ date: 2020-12-03 02:00:00
 title: Newsletter November 2020
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/november-2020/](http://archive.rickardlindberg.me/writing/newsletter/november-2020/).
diff --git a/posts/2021/01/01/newsletter-december/post.md b/posts/2021/01/01/newsletter-december/post.md
index 0eebc0f..4149027 100644
--- a/posts/2021/01/01/newsletter-december/post.md
+++ b/posts/2021/01/01/newsletter-december/post.md
@@ -3,3 +3,8 @@ date: 2021-01-01 02:00:00
 title: Newsletter December 2020
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/december-2020/](http://archive.rickardlindberg.me/writing/newsletter/december-2020/).
diff --git a/posts/2021/02/02/newsletter-january/post.md b/posts/2021/02/02/newsletter-january/post.md
index 997eb3c..5d1c29e 100644
--- a/posts/2021/02/02/newsletter-january/post.md
+++ b/posts/2021/02/02/newsletter-january/post.md
@@ -3,3 +3,8 @@ date: 2021-02-02 02:00:00
 title: Newsletter January 2021
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/january-2021/](http://archive.rickardlindberg.me/writing/newsletter/january-2021/).
diff --git a/posts/2021/02/15/kinesis-advantage-swedish/post.md b/posts/2021/02/15/kinesis-advantage-swedish/post.md
index 8ebfa35..026294e 100644
--- a/posts/2021/02/15/kinesis-advantage-swedish/post.md
+++ b/posts/2021/02/15/kinesis-advantage-swedish/post.md
@@ -3,3 +3,8 @@ date: 2021-02-15 02:00:00
 title: Kinesis Advantage 2 Swedish Setup
 tags: 
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/kinesis-advantage-2-swedish-setup/](http://archive.rickardlindberg.me/writing/kinesis-advantage-2-swedish-setup/).
diff --git a/posts/2021/03/02/newsletter-february/post.md b/posts/2021/03/02/newsletter-february/post.md
index 9ad1369..d849551 100644
--- a/posts/2021/03/02/newsletter-february/post.md
+++ b/posts/2021/03/02/newsletter-february/post.md
@@ -3,3 +3,8 @@ date: 2021-03-02 02:00:00
 title: Newsletter February 2021
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/february-2021/](http://archive.rickardlindberg.me/writing/newsletter/february-2021/).
diff --git a/posts/2021/04/04/newsletter-march/post.md b/posts/2021/04/04/newsletter-march/post.md
index 7962ffb..6ed1280 100644
--- a/posts/2021/04/04/newsletter-march/post.md
+++ b/posts/2021/04/04/newsletter-march/post.md
@@ -3,3 +3,8 @@ date: 2021-04-04 02:00:00
 title: Newsletter March 2021
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/march-2021/](http://archive.rickardlindberg.me/writing/newsletter/march-2021/).
diff --git a/posts/2021/05/04/newsletter-april/post.md b/posts/2021/05/04/newsletter-april/post.md
index 3be5b99..9fb3634 100644
--- a/posts/2021/05/04/newsletter-april/post.md
+++ b/posts/2021/05/04/newsletter-april/post.md
@@ -3,3 +3,8 @@ date: 2021-05-04 02:00:00
 title: Newsletter April 2021
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/april-2021/](http://archive.rickardlindberg.me/writing/newsletter/april-2021/).
diff --git a/posts/2021/06/06/may-update/post.md b/posts/2021/06/06/may-update/post.md
index b75590a..bfb924e 100644
--- a/posts/2021/06/06/may-update/post.md
+++ b/posts/2021/06/06/may-update/post.md
@@ -3,3 +3,8 @@ date: 2021-06-06 02:00:00
 title: May 2021 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/may-2021/](http://archive.rickardlindberg.me/writing/newsletter/may-2021/).
diff --git a/posts/2021/07/04/dogfooding-literate-programming/post.md b/posts/2021/07/04/dogfooding-literate-programming/post.md
index 9cb1abd..83a00f0 100644
--- a/posts/2021/07/04/dogfooding-literate-programming/post.md
+++ b/posts/2021/07/04/dogfooding-literate-programming/post.md
@@ -3,3 +3,8 @@ date: 2021-07-04 02:00:00
 title: Dogfooding Literate Programming Support in Smart Notes (June 2021 Update)
 tags: rlselect, newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/june-2021/](http://archive.rickardlindberg.me/writing/newsletter/june-2021/).
diff --git a/posts/2021/08/03/july-update/post.md b/posts/2021/08/03/july-update/post.md
index 5891b32..848151c 100644
--- a/posts/2021/08/03/july-update/post.md
+++ b/posts/2021/08/03/july-update/post.md
@@ -3,3 +3,8 @@ date: 2021-08-03 02:00:00
 title: July 2021 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/july-2021/](http://archive.rickardlindberg.me/writing/newsletter/july-2021/).
diff --git a/posts/2021/09/07/august-update/post.md b/posts/2021/09/07/august-update/post.md
index 770caee..f2508da 100644
--- a/posts/2021/09/07/august-update/post.md
+++ b/posts/2021/09/07/august-update/post.md
@@ -3,3 +3,8 @@ date: 2021-09-07 02:00:00
 title: August 2021 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/august-2021/](http://archive.rickardlindberg.me/writing/newsletter/august-2021/).
diff --git a/posts/2021/09/14/what-is-programming/post.md b/posts/2021/09/14/what-is-programming/post.md
index f98ca1c..481cdf2 100644
--- a/posts/2021/09/14/what-is-programming/post.md
+++ b/posts/2021/09/14/what-is-programming/post.md
@@ -3,3 +3,8 @@ date: 2021-09-14 02:00:00
 title: What Is Programming?
 tags: 
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/what-is-programming/](http://archive.rickardlindberg.me/writing/what-is-programming/).
diff --git a/posts/2021/10/09/september-update/post.md b/posts/2021/10/09/september-update/post.md
index 2046c27..dfd6fc2 100644
--- a/posts/2021/10/09/september-update/post.md
+++ b/posts/2021/10/09/september-update/post.md
@@ -3,3 +3,8 @@ date: 2021-10-09 02:00:00
 title: September 2021 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/september-2021/](http://archive.rickardlindberg.me/writing/newsletter/september-2021/).
diff --git a/posts/2021/11/04/october-update/post.md b/posts/2021/11/04/october-update/post.md
index d9c28cf..c0d4fa2 100644
--- a/posts/2021/11/04/october-update/post.md
+++ b/posts/2021/11/04/october-update/post.md
@@ -3,3 +3,8 @@ date: 2021-11-04 02:00:00
 title: October 2021 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/october-2021/](http://archive.rickardlindberg.me/writing/newsletter/october-2021/).
diff --git a/posts/2021/12/02/november-update/post.md b/posts/2021/12/02/november-update/post.md
index 75a061c..98e7c60 100644
--- a/posts/2021/12/02/november-update/post.md
+++ b/posts/2021/12/02/november-update/post.md
@@ -3,3 +3,8 @@ date: 2021-12-02 02:00:00
 title: November 2021 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/november-2021/](http://archive.rickardlindberg.me/writing/newsletter/november-2021/).
diff --git a/posts/2022/01/04/december-update/post.md b/posts/2022/01/04/december-update/post.md
index 286fb47..bfc180f 100644
--- a/posts/2022/01/04/december-update/post.md
+++ b/posts/2022/01/04/december-update/post.md
@@ -3,3 +3,8 @@ date: 2022-01-04 02:00:00
 title: December 2021 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/december-2021/](http://archive.rickardlindberg.me/writing/newsletter/december-2021/).
diff --git a/posts/2022/02/04/january-update/post.md b/posts/2022/02/04/january-update/post.md
index 91bc08d..148c805 100644
--- a/posts/2022/02/04/january-update/post.md
+++ b/posts/2022/02/04/january-update/post.md
@@ -3,3 +3,8 @@ date: 2022-02-04 02:00:00
 title: January 2022 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/january-2022/](http://archive.rickardlindberg.me/writing/newsletter/january-2022/).
diff --git a/posts/2022/02/12/rlmeta-poster-the/post.md b/posts/2022/02/12/rlmeta-poster-the/post.md
index bafca9a..59e14c1 100644
--- a/posts/2022/02/12/rlmeta-poster-the/post.md
+++ b/posts/2022/02/12/rlmeta-poster-the/post.md
@@ -3,3 +3,8 @@ date: 2022-02-12 02:00:00
 title: RLMeta poster 2: the poster that wasn't
 tags: rlmeta
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/rlmeta-poster-2/](http://archive.rickardlindberg.me/writing/rlmeta-poster-2/).
diff --git a/posts/2022/03/02/february-update/post.md b/posts/2022/03/02/february-update/post.md
index 1ddbfd6..9d3d8af 100644
--- a/posts/2022/03/02/february-update/post.md
+++ b/posts/2022/03/02/february-update/post.md
@@ -3,3 +3,8 @@ date: 2022-03-02 02:00:00
 title: February 2022 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/february-2022/](http://archive.rickardlindberg.me/writing/newsletter/february-2022/).
diff --git a/posts/2022/04/02/march-update/post.md b/posts/2022/04/02/march-update/post.md
index 1aa58b7..5021aa4 100644
--- a/posts/2022/04/02/march-update/post.md
+++ b/posts/2022/04/02/march-update/post.md
@@ -3,3 +3,8 @@ date: 2022-04-02 02:00:00
 title: March 2022 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/march-2022/](http://archive.rickardlindberg.me/writing/newsletter/march-2022/).
diff --git a/posts/2022/05/01/april-update/post.md b/posts/2022/05/01/april-update/post.md
index 873231d..a9990ad 100644
--- a/posts/2022/05/01/april-update/post.md
+++ b/posts/2022/05/01/april-update/post.md
@@ -3,3 +3,8 @@ date: 2022-05-01 02:00:00
 title: April 2022 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/april-2022/](http://archive.rickardlindberg.me/writing/newsletter/april-2022/).
diff --git a/posts/2022/06/04/may-update/post.md b/posts/2022/06/04/may-update/post.md
index 712d91d..c8983c0 100644
--- a/posts/2022/06/04/may-update/post.md
+++ b/posts/2022/06/04/may-update/post.md
@@ -3,3 +3,8 @@ date: 2022-06-04 02:00:00
 title: May 2022 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/may-2022/](http://archive.rickardlindberg.me/writing/newsletter/may-2022/).
diff --git a/posts/2022/07/04/june-update/post.md b/posts/2022/07/04/june-update/post.md
index 560f54c..f39ea98 100644
--- a/posts/2022/07/04/june-update/post.md
+++ b/posts/2022/07/04/june-update/post.md
@@ -3,3 +3,8 @@ date: 2022-07-04 02:00:00
 title: June 2022 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/june-2022/](http://archive.rickardlindberg.me/writing/newsletter/june-2022/).
diff --git a/posts/2022/08/02/july-update/post.md b/posts/2022/08/02/july-update/post.md
index 1c3fc4c..f294691 100644
--- a/posts/2022/08/02/july-update/post.md
+++ b/posts/2022/08/02/july-update/post.md
@@ -3,3 +3,8 @@ date: 2022-08-02 02:00:00
 title: July 2022 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/july-2022/](http://archive.rickardlindberg.me/writing/newsletter/july-2022/).
diff --git a/posts/2022/09/02/how-to-write/post.md b/posts/2022/09/02/how-to-write/post.md
index ee12187..aac9d6b 100644
--- a/posts/2022/09/02/how-to-write/post.md
+++ b/posts/2022/09/02/how-to-write/post.md
@@ -3,3 +3,8 @@ date: 2022-09-02 02:00:00
 title: How to write reliable socket servers that survive crashes and restarts?
 tags: 
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/reliable-socket-servers/](http://archive.rickardlindberg.me/writing/reliable-socket-servers/).
diff --git a/posts/2022/09/09/august-update/post.md b/posts/2022/09/09/august-update/post.md
index 871976e..63c079d 100644
--- a/posts/2022/09/09/august-update/post.md
+++ b/posts/2022/09/09/august-update/post.md
@@ -3,3 +3,8 @@ date: 2022-09-09 02:00:00
 title: August 2022 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/august-2022/](http://archive.rickardlindberg.me/writing/newsletter/august-2022/).
diff --git a/posts/2022/10/08/september-update/post.md b/posts/2022/10/08/september-update/post.md
index 9e8453b..7afa5fd 100644
--- a/posts/2022/10/08/september-update/post.md
+++ b/posts/2022/10/08/september-update/post.md
@@ -3,3 +3,8 @@ date: 2022-10-08 02:00:00
 title: September 2022 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/september-2022/](http://archive.rickardlindberg.me/writing/newsletter/september-2022/).
diff --git a/posts/2022/11/10/october-update/post.md b/posts/2022/11/10/october-update/post.md
index 4f5de96..313f300 100644
--- a/posts/2022/11/10/october-update/post.md
+++ b/posts/2022/11/10/october-update/post.md
@@ -3,3 +3,8 @@ date: 2022-11-10 02:00:00
 title: October 2022 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/october-2022/](http://archive.rickardlindberg.me/writing/newsletter/october-2022/).
diff --git a/posts/2022/12/02/november-update/post.md b/posts/2022/12/02/november-update/post.md
index ec0082c..911b636 100644
--- a/posts/2022/12/02/november-update/post.md
+++ b/posts/2022/12/02/november-update/post.md
@@ -3,3 +3,8 @@ date: 2022-12-02 02:00:00
 title: November 2022 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/november-2022/](http://archive.rickardlindberg.me/writing/newsletter/november-2022/).
diff --git a/posts/2022/12/15/how-should-i/post.md b/posts/2022/12/15/how-should-i/post.md
index 64b8756..7283709 100644
--- a/posts/2022/12/15/how-should-i/post.md
+++ b/posts/2022/12/15/how-should-i/post.md
@@ -3,3 +3,8 @@ date: 2022-12-15 02:00:00
 title: How should I evolve the design of my projectional editor?
 tags: rlproject
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/evolving-design-of-projectional-editor/](http://archive.rickardlindberg.me/writing/evolving-design-of-projectional-editor/).
diff --git a/posts/2023/01/09/december-update/post.md b/posts/2023/01/09/december-update/post.md
index c77ea06..c6287e4 100644
--- a/posts/2023/01/09/december-update/post.md
+++ b/posts/2023/01/09/december-update/post.md
@@ -3,3 +3,8 @@ date: 2023-01-09 02:00:00
 title: December 2022 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/december-2022/](http://archive.rickardlindberg.me/writing/newsletter/december-2022/).
diff --git a/posts/2023/02/11/january-update/post.md b/posts/2023/02/11/january-update/post.md
index 6c0a0c5..8551666 100644
--- a/posts/2023/02/11/january-update/post.md
+++ b/posts/2023/02/11/january-update/post.md
@@ -3,3 +3,8 @@ date: 2023-02-11 02:00:00
 title: January 2023 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/january-2023/](http://archive.rickardlindberg.me/writing/newsletter/january-2023/).
diff --git a/posts/2023/03/05/february-update/post.md b/posts/2023/03/05/february-update/post.md
index 15033b1..a94f77f 100644
--- a/posts/2023/03/05/february-update/post.md
+++ b/posts/2023/03/05/february-update/post.md
@@ -3,3 +3,8 @@ date: 2023-03-05 02:00:00
 title: February 2023 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/february-2023/](http://archive.rickardlindberg.me/writing/newsletter/february-2023/).
diff --git a/posts/2023/04/02/march-update/post.md b/posts/2023/04/02/march-update/post.md
index f3aa8a4..2534e39 100644
--- a/posts/2023/04/02/march-update/post.md
+++ b/posts/2023/04/02/march-update/post.md
@@ -3,3 +3,8 @@ date: 2023-04-02 02:00:00
 title: March 2023 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/march-2023/](http://archive.rickardlindberg.me/writing/newsletter/march-2023/).
diff --git a/posts/2023/04/06/what-should-a/post.md b/posts/2023/04/06/what-should-a/post.md
index cf5ecbd..e23c168 100644
--- a/posts/2023/04/06/what-should-a/post.md
+++ b/posts/2023/04/06/what-should-a/post.md
@@ -3,3 +3,8 @@ date: 2023-04-06 02:00:00
 title: What should a Continuous Integration (CI) server do?
 tags: agile
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/what-should-a-ci-server-do/](http://archive.rickardlindberg.me/writing/what-should-a-ci-server-do/).
diff --git a/posts/2023/04/09/introducing-agile-game/post.md b/posts/2023/04/09/introducing-agile-game/post.md
index 32e8ae5..ffb2eb6 100644
--- a/posts/2023/04/09/introducing-agile-game/post.md
+++ b/posts/2023/04/09/introducing-agile-game/post.md
@@ -3,3 +3,8 @@ date: 2023-04-09 02:00:00
 title: Introducing Agile Game Development with Python and Pygame
 tags: agdpp
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/agdpp-introduction/](http://archive.rickardlindberg.me/writing/agdpp-introduction/).
diff --git a/posts/2023/04/17/tdd-trick-fake/post.md b/posts/2023/04/17/tdd-trick-fake/post.md
index cad5920..ba78d47 100644
--- a/posts/2023/04/17/tdd-trick-fake/post.md
+++ b/posts/2023/04/17/tdd-trick-fake/post.md
@@ -3,3 +3,8 @@ date: 2023-04-17 02:00:00
 title: TDD trick: fake it!
 tags: tdd
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/tdd-fake-it/](http://archive.rickardlindberg.me/writing/tdd-fake-it/).
diff --git a/posts/2023/04/18/trying-rons-python/post.md b/posts/2023/04/18/trying-rons-python/post.md
index 4f4aa20..4cfe814 100644
--- a/posts/2023/04/18/trying-rons-python/post.md
+++ b/posts/2023/04/18/trying-rons-python/post.md
@@ -3,3 +3,8 @@ date: 2023-04-18 02:00:00
 title: Trying Ron's Python Asteroids
 tags: python
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/trying-rons-python-asteroids/](http://archive.rickardlindberg.me/writing/trying-rons-python-asteroids/).
diff --git a/posts/2023/04/19/test-driving-the/post.md b/posts/2023/04/19/test-driving-the/post.md
index e29c9c8..69ec475 100644
--- a/posts/2023/04/19/test-driving-the/post.md
+++ b/posts/2023/04/19/test-driving-the/post.md
@@ -3,3 +3,8 @@ date: 2023-04-19 02:00:00
 title: Test driving the game loop
 tags: agdpp
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/agdpp-game-loop/](http://archive.rickardlindberg.me/writing/agdpp-game-loop/).
diff --git a/posts/2023/04/20/separating-pygame-completely/post.md b/posts/2023/04/20/separating-pygame-completely/post.md
index 207f828..a4aa02a 100644
--- a/posts/2023/04/20/separating-pygame-completely/post.md
+++ b/posts/2023/04/20/separating-pygame-completely/post.md
@@ -3,3 +3,8 @@ date: 2023-04-20 02:00:00
 title: Separating pygame completely from the rest of the game
 tags: agdpp
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/agdpp-pygame-separation-design/](http://archive.rickardlindberg.me/writing/agdpp-pygame-separation-design/).
diff --git a/posts/2023/04/24/demo-and-game/post.md b/posts/2023/04/24/demo-and-game/post.md
index 2d2c42c..2ac113b 100644
--- a/posts/2023/04/24/demo-and-game/post.md
+++ b/posts/2023/04/24/demo-and-game/post.md
@@ -3,3 +3,8 @@ date: 2023-04-24 02:00:00
 title: Demo and game idea
 tags: agdpp
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/agdpp-demo-and-game-idea/](http://archive.rickardlindberg.me/writing/agdpp-demo-and-game-idea/).
diff --git a/posts/2023/04/27/shooting-the-arrow/post.md b/posts/2023/04/27/shooting-the-arrow/post.md
index 83bb67f..e2d8c90 100644
--- a/posts/2023/04/27/shooting-the-arrow/post.md
+++ b/posts/2023/04/27/shooting-the-arrow/post.md
@@ -3,3 +3,8 @@ date: 2023-04-27 02:00:00
 title: Shooting the arrow
 tags: agdpp
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/agdpp-shooting-arrow/](http://archive.rickardlindberg.me/writing/agdpp-shooting-arrow/).
diff --git a/posts/2023/04/28/thinking-about-test/post.md b/posts/2023/04/28/thinking-about-test/post.md
index dd46a37..2efb813 100644
--- a/posts/2023/04/28/thinking-about-test/post.md
+++ b/posts/2023/04/28/thinking-about-test/post.md
@@ -3,3 +3,8 @@ date: 2023-04-28 02:00:00
 title: Thinking about test design
 tags: agdpp
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/agdpp-thinking-about-test-setup/](http://archive.rickardlindberg.me/writing/agdpp-thinking-about-test-setup/).
diff --git a/posts/2023/05/03/april-update/post.md b/posts/2023/05/03/april-update/post.md
index d2e5293..81164d7 100644
--- a/posts/2023/05/03/april-update/post.md
+++ b/posts/2023/05/03/april-update/post.md
@@ -3,3 +3,8 @@ date: 2023-05-03 02:00:00
 title: April 2023 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/april-2023/](http://archive.rickardlindberg.me/writing/newsletter/april-2023/).
diff --git a/posts/2023/05/06/game-over/post.md b/posts/2023/05/06/game-over/post.md
index 59470fc..f00feea 100644
--- a/posts/2023/05/06/game-over/post.md
+++ b/posts/2023/05/06/game-over/post.md
@@ -3,3 +3,8 @@ date: 2023-05-06 02:00:00
 title: Game over?
 tags: agdpp
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/agdpp-game-over/](http://archive.rickardlindberg.me/writing/agdpp-game-over/).
diff --git a/posts/2023/05/09/hit-balloon-and/post.md b/posts/2023/05/09/hit-balloon-and/post.md
index 219df48..6cf2834 100644
--- a/posts/2023/05/09/hit-balloon-and/post.md
+++ b/posts/2023/05/09/hit-balloon-and/post.md
@@ -3,3 +3,8 @@ date: 2023-05-09 02:00:00
 title: Hit balloon and score points
 tags: agdpp
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/agdpp-hit-balloon-and-score-points/](http://archive.rickardlindberg.me/writing/agdpp-hit-balloon-and-score-points/).
diff --git a/posts/2023/05/12/turning-arrow/post.md b/posts/2023/05/12/turning-arrow/post.md
index 03811b1..cf54e84 100644
--- a/posts/2023/05/12/turning-arrow/post.md
+++ b/posts/2023/05/12/turning-arrow/post.md
@@ -3,3 +3,8 @@ date: 2023-05-12 02:00:00
 title: Turning arrow
 tags: agdpp
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/agdpp-turning-arrow/](http://archive.rickardlindberg.me/writing/agdpp-turning-arrow/).
diff --git a/posts/2023/05/14/a-case-for/post.md b/posts/2023/05/14/a-case-for/post.md
index b0f2353..3eacd15 100644
--- a/posts/2023/05/14/a-case-for/post.md
+++ b/posts/2023/05/14/a-case-for/post.md
@@ -3,3 +3,8 @@ date: 2023-05-14 02:00:00
 title: A case for the infrastructure wrapper
 tags: agdpp
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/agdpp-wrapper-pygame-draw-circle-bug/](http://archive.rickardlindberg.me/writing/agdpp-wrapper-pygame-draw-circle-bug/).
diff --git a/posts/2023/05/19/programming-a-logitech/post.md b/posts/2023/05/19/programming-a-logitech/post.md
index 453b1d8..8c1267b 100644
--- a/posts/2023/05/19/programming-a-logitech/post.md
+++ b/posts/2023/05/19/programming-a-logitech/post.md
@@ -3,3 +3,8 @@ date: 2023-05-19 02:00:00
 title: Programming a Logitech Gamepad F310
 tags: agdpp
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/agdpp-logitech-gamepad-f310/](http://archive.rickardlindberg.me/writing/agdpp-logitech-gamepad-f310/).
diff --git a/posts/2023/05/20/how-to-test/post.md b/posts/2023/05/20/how-to-test/post.md
index f0322b3..22179a5 100644
--- a/posts/2023/05/20/how-to-test/post.md
+++ b/posts/2023/05/20/how-to-test/post.md
@@ -3,3 +3,8 @@ date: 2023-05-20 02:00:00
 title: How to test a router?
 tags: 
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/how-to-test-a-router/](http://archive.rickardlindberg.me/writing/how-to-test-a-router/).
diff --git a/posts/2023/05/24/score-as-text/post.md b/posts/2023/05/24/score-as-text/post.md
index fb3b336..fbf9543 100644
--- a/posts/2023/05/24/score-as-text/post.md
+++ b/posts/2023/05/24/score-as-text/post.md
@@ -3,3 +3,8 @@ date: 2023-05-24 02:00:00
 title: Score as text
 tags: agdpp
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/agdpp-score-as-text/](http://archive.rickardlindberg.me/writing/agdpp-score-as-text/).
diff --git a/posts/2023/06/06/may-update/post.md b/posts/2023/06/06/may-update/post.md
index 3d21985..3dae95c 100644
--- a/posts/2023/06/06/may-update/post.md
+++ b/posts/2023/06/06/may-update/post.md
@@ -3,3 +3,8 @@ date: 2023-06-06 02:00:00
 title: May 2023 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/may-2023/](http://archive.rickardlindberg.me/writing/newsletter/may-2023/).
diff --git a/posts/2023/06/12/does-tdd-work/post.md b/posts/2023/06/12/does-tdd-work/post.md
index f858ae9..e04d286 100644
--- a/posts/2023/06/12/does-tdd-work/post.md
+++ b/posts/2023/06/12/does-tdd-work/post.md
@@ -3,3 +3,8 @@ date: 2023-06-12 02:00:00
 title: Does TDD work when building a game?
 tags: agdpp
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/agdpp-tdd-and-games/](http://archive.rickardlindberg.me/writing/agdpp-tdd-and-games/).
diff --git a/posts/2023/06/17/spawn-multiple-balloons/post.md b/posts/2023/06/17/spawn-multiple-balloons/post.md
index 46fd447..51bde6b 100644
--- a/posts/2023/06/17/spawn-multiple-balloons/post.md
+++ b/posts/2023/06/17/spawn-multiple-balloons/post.md
@@ -3,3 +3,8 @@ date: 2023-06-17 02:00:00
 title: Spawn multiple balloons
 tags: agdpp
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/agdpp-spawn-multiple-balloons/](http://archive.rickardlindberg.me/writing/agdpp-spawn-multiple-balloons/).
diff --git a/posts/2023/06/18/highlevel-or-microtests/post.md b/posts/2023/06/18/highlevel-or-microtests/post.md
index 7d1f750..a10e675 100644
--- a/posts/2023/06/18/highlevel-or-microtests/post.md
+++ b/posts/2023/06/18/highlevel-or-microtests/post.md
@@ -3,3 +3,8 @@ date: 2023-06-18 02:00:00
 title: High-level or micro-tests? A discussion with Ron.
 tags: 
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/high-level-low-level-ron-reply/](http://archive.rickardlindberg.me/writing/high-level-low-level-ron-reply/).
diff --git a/posts/2023/06/29/multiplayer/post.md b/posts/2023/06/29/multiplayer/post.md
index ed37f89..649fb18 100644
--- a/posts/2023/06/29/multiplayer/post.md
+++ b/posts/2023/06/29/multiplayer/post.md
@@ -3,3 +3,8 @@ date: 2023-06-29 02:00:00
 title: Multiplayer
 tags: agdpp
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/agdpp-multiplayer/](http://archive.rickardlindberg.me/writing/agdpp-multiplayer/).
diff --git a/posts/2023/07/04/june-update/post.md b/posts/2023/07/04/june-update/post.md
index 3b5ccda..7150b5c 100644
--- a/posts/2023/07/04/june-update/post.md
+++ b/posts/2023/07/04/june-update/post.md
@@ -3,3 +3,8 @@ date: 2023-07-04 02:00:00
 title: June 2023 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/june-2023/](http://archive.rickardlindberg.me/writing/newsletter/june-2023/).
diff --git a/posts/2023/07/28/devlog-jcuts-and/post.md b/posts/2023/07/28/devlog-jcuts-and/post.md
index c7155a7..e101f58 100644
--- a/posts/2023/07/28/devlog-jcuts-and/post.md
+++ b/posts/2023/07/28/devlog-jcuts-and/post.md
@@ -3,3 +3,8 @@ date: 2023-07-28 02:00:00
 title: DevLog 001: J-cuts and L-cuts in my video editor?
 tags: devlog, rlvideo
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/devlog-001-jcut-lcut/](http://archive.rickardlindberg.me/writing/devlog-001-jcut-lcut/).
diff --git a/posts/2023/07/28/how-to-get/post.md b/posts/2023/07/28/how-to-get/post.md
index 4854b6e..13a8001 100644
--- a/posts/2023/07/28/how-to-get/post.md
+++ b/posts/2023/07/28/how-to-get/post.md
@@ -3,3 +3,8 @@ date: 2023-07-28 03:00:00
 title: How to get fast feedback on graphical code?
 tags: rlvideo
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/fast-feedback-on-graphical-code/](http://archive.rickardlindberg.me/writing/fast-feedback-on-graphical-code/).
diff --git a/posts/2023/07/28/writing-my-own/post.md b/posts/2023/07/28/writing-my-own/post.md
index aadf495..d195c5f 100644
--- a/posts/2023/07/28/writing-my-own/post.md
+++ b/posts/2023/07/28/writing-my-own/post.md
@@ -3,3 +3,8 @@ date: 2023-07-28 04:00:00
 title: Writing my own video editor
 tags: rlvideo
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/writing-my-own-video-editor/](http://archive.rickardlindberg.me/writing/writing-my-own-video-editor/).
diff --git a/posts/2023/07/29/devlog-change-mix/post.md b/posts/2023/07/29/devlog-change-mix/post.md
index 300eb9e..0d34667 100644
--- a/posts/2023/07/29/devlog-change-mix/post.md
+++ b/posts/2023/07/29/devlog-change-mix/post.md
@@ -3,3 +3,8 @@ date: 2023-07-29 02:00:00
 title: DevLog 002: Change mix strategy for cuts in GUI
 tags: devlog, rlvideo
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/devlog-002-selecting-cut-type-in-gui/](http://archive.rickardlindberg.me/writing/devlog-002-selecting-cut-type-in-gui/).
diff --git a/posts/2023/07/29/devlog-clarify-gui/post.md b/posts/2023/07/29/devlog-clarify-gui/post.md
index a3bebd6..3a3b0c7 100644
--- a/posts/2023/07/29/devlog-clarify-gui/post.md
+++ b/posts/2023/07/29/devlog-clarify-gui/post.md
@@ -3,3 +3,8 @@ date: 2023-07-29 03:00:00
 title: DevLog 003: Clarify GUI separation
 tags: devlog, rlvideo
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/devlog-003-clarify-gui-separation/](http://archive.rickardlindberg.me/writing/devlog-003-clarify-gui-separation/).
diff --git a/posts/2023/07/30/devlog-proxies-with/post.md b/posts/2023/07/30/devlog-proxies-with/post.md
index f7b25a8..b287732 100644
--- a/posts/2023/07/30/devlog-proxies-with/post.md
+++ b/posts/2023/07/30/devlog-proxies-with/post.md
@@ -3,3 +3,8 @@ date: 2023-07-30 02:00:00
 title: DevLog 004: Proxies with correct FPS
 tags: devlog, rlvideo, mlt
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/devlog-004-proxies-with-correct-fps/](http://archive.rickardlindberg.me/writing/devlog-004-proxies-with-correct-fps/).
diff --git a/posts/2023/07/31/devlog-adding-the/post.md b/posts/2023/07/31/devlog-adding-the/post.md
index 6183497..0eb7bfc 100644
--- a/posts/2023/07/31/devlog-adding-the/post.md
+++ b/posts/2023/07/31/devlog-adding-the/post.md
@@ -3,3 +3,8 @@ date: 2023-07-31 03:00:00
 title: DevLog 006: Adding the concept of a clip
 tags: devlog, rlvideo
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/devlog-006-adding-the-concept-of-a-clip/](http://archive.rickardlindberg.me/writing/devlog-006-adding-the-concept-of-a-clip/).
diff --git a/posts/2023/07/31/devlog-mlt-proxy/post.md b/posts/2023/07/31/devlog-mlt-proxy/post.md
index af04a7a..9f178ed 100644
--- a/posts/2023/07/31/devlog-mlt-proxy/post.md
+++ b/posts/2023/07/31/devlog-mlt-proxy/post.md
@@ -3,3 +3,8 @@ date: 2023-07-31 02:00:00
 title: DevLog 005: MLT proxy hell
 tags: devlog, rlvideo, mlt
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/devlog-005-mlt-proxy-hell/](http://archive.rickardlindberg.me/writing/devlog-005-mlt-proxy-hell/).
diff --git a/posts/2023/08/01/devlog-which-feature/post.md b/posts/2023/08/01/devlog-which-feature/post.md
index e999b14..550b61e 100644
--- a/posts/2023/08/01/devlog-which-feature/post.md
+++ b/posts/2023/08/01/devlog-which-feature/post.md
@@ -3,3 +3,8 @@ date: 2023-08-01 02:00:00
 title: DevLog 007: Which feature to work on next?
 tags: devlog, rlvideo, refactoring
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/devlog-007-which-feature-to-work-on-next/](http://archive.rickardlindberg.me/writing/devlog-007-which-feature-to-work-on-next/).
diff --git a/posts/2023/08/02/devlog-how-to/post.md b/posts/2023/08/02/devlog-how-to/post.md
index a2b41cd..4837d23 100644
--- a/posts/2023/08/02/devlog-how-to/post.md
+++ b/posts/2023/08/02/devlog-how-to/post.md
@@ -3,3 +3,8 @@ date: 2023-08-02 02:00:00
 title: DevLog 008: How to overcome lack of motivation?
 tags: devlog, rlvideo, motivation
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/devlog-008-how-to-overcome-lack-of-motivation/](http://archive.rickardlindberg.me/writing/devlog-008-how-to-overcome-lack-of-motivation/).
diff --git a/posts/2023/08/03/devlog-debugging-mltgtk/post.md b/posts/2023/08/03/devlog-debugging-mltgtk/post.md
index 2502cb4..4bbdc29 100644
--- a/posts/2023/08/03/devlog-debugging-mltgtk/post.md
+++ b/posts/2023/08/03/devlog-debugging-mltgtk/post.md
@@ -3,3 +3,8 @@ date: 2023-08-03 03:00:00
 title: DevLog 010: Debugging MLT/GTK segfault
 tags: devlog, rlvideo, mlt
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/devlog-010-debugging-mlt-gtk-segfault/](http://archive.rickardlindberg.me/writing/devlog-010-debugging-mlt-gtk-segfault/).
diff --git a/posts/2023/08/03/devlog-improve-timeline/post.md b/posts/2023/08/03/devlog-improve-timeline/post.md
index dfb97e0..fdf98bc 100644
--- a/posts/2023/08/03/devlog-improve-timeline/post.md
+++ b/posts/2023/08/03/devlog-improve-timeline/post.md
@@ -3,3 +3,8 @@ date: 2023-08-03 02:00:00
 title: DevLog 009: Improve timeline scrubbing
 tags: devlog, rlvideo
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/devlog-009-improve-timeline-scrubbing/](http://archive.rickardlindberg.me/writing/devlog-009-improve-timeline-scrubbing/).
diff --git a/posts/2023/08/05/july-update/post.md b/posts/2023/08/05/july-update/post.md
index 254b3f5..7955f46 100644
--- a/posts/2023/08/05/july-update/post.md
+++ b/posts/2023/08/05/july-update/post.md
@@ -3,3 +3,8 @@ date: 2023-08-05 02:00:00
 title: July 2023 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/july-2023/](http://archive.rickardlindberg.me/writing/newsletter/july-2023/).
diff --git a/posts/2023/08/06/devlog-modifying-cut/post.md b/posts/2023/08/06/devlog-modifying-cut/post.md
index 8a39bc5..80f6930 100644
--- a/posts/2023/08/06/devlog-modifying-cut/post.md
+++ b/posts/2023/08/06/devlog-modifying-cut/post.md
@@ -3,3 +3,8 @@ date: 2023-08-06 02:00:00
 title: DevLog 011: Modifying cut out point
 tags: devlog, rlvideo
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/devlog-011-modifying-cut-out-point/](http://archive.rickardlindberg.me/writing/devlog-011-modifying-cut-out-point/).
diff --git a/posts/2023/08/21/the-end/post.md b/posts/2023/08/21/the-end/post.md
index 79f5760..4c30e42 100644
--- a/posts/2023/08/21/the-end/post.md
+++ b/posts/2023/08/21/the-end/post.md
@@ -3,3 +3,8 @@ date: 2023-08-21 02:00:00
 title: The end?
 tags: agdpp
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/agdpp-the-end/](http://archive.rickardlindberg.me/writing/agdpp-the-end/).
diff --git a/posts/2023/08/23/devlog-investigating-export/post.md b/posts/2023/08/23/devlog-investigating-export/post.md
index f236a57..c0696df 100644
--- a/posts/2023/08/23/devlog-investigating-export/post.md
+++ b/posts/2023/08/23/devlog-investigating-export/post.md
@@ -3,3 +3,8 @@ date: 2023-08-23 02:00:00
 title: DevLog 012: Investigating export crash
 tags: devlog, rlvideo, mlt
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/devlog-012-investigating-export-crash/](http://archive.rickardlindberg.me/writing/devlog-012-investigating-export-crash/).
diff --git a/posts/2023/09/04/august-update/post.md b/posts/2023/09/04/august-update/post.md
index 9e549b0..432ee8b 100644
--- a/posts/2023/09/04/august-update/post.md
+++ b/posts/2023/09/04/august-update/post.md
@@ -3,3 +3,8 @@ date: 2023-09-04 02:00:00
 title: August 2023 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/august-2023/](http://archive.rickardlindberg.me/writing/newsletter/august-2023/).
diff --git a/posts/2023/09/10/devlog-raspberry-pi/post.md b/posts/2023/09/10/devlog-raspberry-pi/post.md
index 6d57097..8c6da9d 100644
--- a/posts/2023/09/10/devlog-raspberry-pi/post.md
+++ b/posts/2023/09/10/devlog-raspberry-pi/post.md
@@ -3,3 +3,8 @@ date: 2023-09-10 02:00:00
 title: DevLog 013: Raspberry Pi game console
 tags: agdpp, devlog
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/devlog-013-raspberrypi-game-console/](http://archive.rickardlindberg.me/writing/devlog-013-raspberrypi-game-console/).
diff --git a/posts/2023/10/10/september-update/post.md b/posts/2023/10/10/september-update/post.md
index 80c8365..a9be4d9 100644
--- a/posts/2023/10/10/september-update/post.md
+++ b/posts/2023/10/10/september-update/post.md
@@ -3,3 +3,8 @@ date: 2023-10-10 02:00:00
 title: September 2023 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/september-2023/](http://archive.rickardlindberg.me/writing/newsletter/september-2023/).
diff --git a/posts/2023/11/06/october-update/post.md b/posts/2023/11/06/october-update/post.md
index 0176129..d57cd41 100644
--- a/posts/2023/11/06/october-update/post.md
+++ b/posts/2023/11/06/october-update/post.md
@@ -3,3 +3,8 @@ date: 2023-11-06 02:00:00
 title: October 2023 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/october-2023/](http://archive.rickardlindberg.me/writing/newsletter/october-2023/).
diff --git a/posts/2023/12/12/november-update/post.md b/posts/2023/12/12/november-update/post.md
index f9b2e2f..5672358 100644
--- a/posts/2023/12/12/november-update/post.md
+++ b/posts/2023/12/12/november-update/post.md
@@ -3,3 +3,8 @@ date: 2023-12-12 02:00:00
 title: November 2023 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/november-2023/](http://archive.rickardlindberg.me/writing/newsletter/november-2023/).
diff --git a/posts/2024/01/02/december-update/post.md b/posts/2024/01/02/december-update/post.md
index 2039e1e..17f0aee 100644
--- a/posts/2024/01/02/december-update/post.md
+++ b/posts/2024/01/02/december-update/post.md
@@ -3,3 +3,8 @@ date: 2024-01-02 02:00:00
 title: December 2023 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/december-2023/](http://archive.rickardlindberg.me/writing/newsletter/december-2023/).
diff --git a/posts/2024/02/07/january-update/post.md b/posts/2024/02/07/january-update/post.md
index f228e97..a8a2b61 100644
--- a/posts/2024/02/07/january-update/post.md
+++ b/posts/2024/02/07/january-update/post.md
@@ -3,3 +3,8 @@ date: 2024-02-07 02:00:00
 title: January 2024 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/january-2024/](http://archive.rickardlindberg.me/writing/newsletter/january-2024/).
diff --git a/posts/2024/03/01/february-update/post.md b/posts/2024/03/01/february-update/post.md
index 823738e..2346715 100644
--- a/posts/2024/03/01/february-update/post.md
+++ b/posts/2024/03/01/february-update/post.md
@@ -3,3 +3,8 @@ date: 2024-03-01 02:00:00
 title: February 2024 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/february-2024/](http://archive.rickardlindberg.me/writing/newsletter/february-2024/).
diff --git a/posts/2024/04/02/march-update/post.md b/posts/2024/04/02/march-update/post.md
index 6f61cb6..108e2fb 100644
--- a/posts/2024/04/02/march-update/post.md
+++ b/posts/2024/04/02/march-update/post.md
@@ -3,3 +3,8 @@ date: 2024-04-02 02:00:00
 title: March 2024 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/march-2024/](http://archive.rickardlindberg.me/writing/newsletter/march-2024/).
diff --git a/posts/2024/04/04/draft-what-is/post.md b/posts/2024/04/04/draft-what-is/post.md
index 0d3c47e..2ffbe62 100644
--- a/posts/2024/04/04/draft-what-is/post.md
+++ b/posts/2024/04/04/draft-what-is/post.md
@@ -3,3 +3,8 @@ date: 2024-04-04 02:00:00
 title: DRAFT: 'What is a user story?'
 tags: draft, agile
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/what-is-a-user-story/](http://archive.rickardlindberg.me/writing/what-is-a-user-story/).
diff --git a/posts/2024/05/01/april-update/post.md b/posts/2024/05/01/april-update/post.md
index 57aa9c4..0b98eb2 100644
--- a/posts/2024/05/01/april-update/post.md
+++ b/posts/2024/05/01/april-update/post.md
@@ -3,3 +3,8 @@ date: 2024-05-01 02:00:00
 title: April 2024 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/april-2024/](http://archive.rickardlindberg.me/writing/newsletter/april-2024/).
diff --git a/posts/2024/05/02/refactoring-a-function/post.md b/posts/2024/05/02/refactoring-a-function/post.md
index 7bfc908..ab2cd36 100644
--- a/posts/2024/05/02/refactoring-a-function/post.md
+++ b/posts/2024/05/02/refactoring-a-function/post.md
@@ -3,3 +3,8 @@ date: 2024-05-02 02:00:00
 title: Refactoring a function to 6 classes
 tags: refactoring, oop
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/function-to-oop-refactoring/](http://archive.rickardlindberg.me/writing/function-to-oop-refactoring/).
diff --git a/posts/2024/06/08/may-update/post.md b/posts/2024/06/08/may-update/post.md
index fdd3b05..dbc92a8 100644
--- a/posts/2024/06/08/may-update/post.md
+++ b/posts/2024/06/08/may-update/post.md
@@ -3,3 +3,8 @@ date: 2024-06-08 02:00:00
 title: May 2024 Update
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/may-2024/](http://archive.rickardlindberg.me/writing/newsletter/may-2024/).
diff --git a/posts/2024/07/02/newsletter-june-quines/post.md b/posts/2024/07/02/newsletter-june-quines/post.md
index e2d5013..1371dfc 100644
--- a/posts/2024/07/02/newsletter-june-quines/post.md
+++ b/posts/2024/07/02/newsletter-june-quines/post.md
@@ -3,3 +3,8 @@ date: 2024-07-02 02:00:00
 title: Newsletter June 2024: Quines and Smalltalk
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/june-2024/](http://archive.rickardlindberg.me/writing/newsletter/june-2024/).
diff --git a/posts/2024/07/26/output-tracking-vs/post.md b/posts/2024/07/26/output-tracking-vs/post.md
index a264d36..65f470d 100644
--- a/posts/2024/07/26/output-tracking-vs/post.md
+++ b/posts/2024/07/26/output-tracking-vs/post.md
@@ -3,3 +3,8 @@ date: 2024-07-26 02:00:00
 title: Output Tracking vs Mocks
 tags: 
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/output-tracking-vs-mocks/](http://archive.rickardlindberg.me/writing/output-tracking-vs-mocks/).
diff --git a/posts/2024/08/01/newsletter-july-note/post.md b/posts/2024/08/01/newsletter-july-note/post.md
index 9727a7d..4548357 100644
--- a/posts/2024/08/01/newsletter-july-note/post.md
+++ b/posts/2024/08/01/newsletter-july-note/post.md
@@ -3,3 +3,8 @@ date: 2024-08-01 02:00:00
 title: Newsletter July 2024: Note Making Re-Visited
 tags: newsletter
 ---
+
+
+This post has not yet been imported to my new blog.
+
+In the meantime, you can read it here: [http://archive.rickardlindberg.me/writing/newsletter/july-2024/](http://archive.rickardlindberg.me/writing/newsletter/july-2024/).
diff --git a/posts/2024/08/08/today-i-did/post.md b/posts/2024/08/08/today-i-did/post.md
index 6922c52..ecde445 100644
--- a/posts/2024/08/08/today-i-did/post.md
+++ b/posts/2024/08/08/today-i-did/post.md
@@ -3,3 +3,7 @@ date: 2024-08-08 20:16:47
 title: 
 tags: Running
 ---
+
+Today I did a lot of focused work. My brain was tired. Solution? Running. It worked. It always works. That's why I run.
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/running-20240808.jpg" width="600" height="337" alt="">
diff --git a/posts/2024/08/09/i-first-learned/post.md b/posts/2024/08/09/i-first-learned/post.md
index 3201859..2793edc 100644
--- a/posts/2024/08/09/i-first-learned/post.md
+++ b/posts/2024/08/09/i-first-learned/post.md
@@ -3,3 +3,9 @@ date: 2024-08-09 19:46:35
 title: 
 tags: 
 ---
+
+I first learned programming by hitting "View Page Source" on a web page to
+learn how something was implemented. Today, 20+ years later, I did the same.
+I wish more environments had "View Page Source" function.
+
+[rickardlindberg.me/2024/08/0...](https://rickardlindberg.me/2024/08/09/poor-mans-redirect.html)
diff --git a/posts/2024/08/09/i-was-tired/post.md b/posts/2024/08/09/i-was-tired/post.md
index 6115c46..70f5c38 100644
--- a/posts/2024/08/09/i-was-tired/post.md
+++ b/posts/2024/08/09/i-was-tired/post.md
@@ -3,3 +3,7 @@ date: 2024-08-09 17:37:18
 title: 
 tags: Running
 ---
+
+I was tired and low on energy. I knew I needed to run. I know that the longer I run, the more energy I get back. I also clarified my thinking on an upcoming blog post. Yey running!
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/running-20240809.jpg" width="600" height="337" alt="">
diff --git a/posts/2024/08/09/poor-mans-redirect/post.md b/posts/2024/08/09/poor-mans-redirect/post.md
index 6bb6f6f..c1c0aef 100644
--- a/posts/2024/08/09/poor-mans-redirect/post.md
+++ b/posts/2024/08/09/poor-mans-redirect/post.md
@@ -3,3 +3,70 @@ date: 2024-08-09 19:44:27
 title: Poor man's redirect in a static site
 tags: Micro.blog, Javascript
 ---
+
+I just moved my blog to [Micro.blog](https://micro.blog/). My domain name,
+`rickardlindberg.me`, now points to the new blog. I have not yet migrated all
+pages from my old blog. But it is still available at
+[http://archive.rickardlindberg.me/](http://archive.rickardlindberg.me/).
+
+But what about existing links to my blog? They won't work. I could configure
+the web server to redirect requests to the archived site for pages that I have
+not yet migrated or that have migrated to a new URL. However, as far as I can
+tell, there is no way on Micro.blog to easily configure many redirects. (You
+have to to it manually one by one, which is tedious for hundreds of URLs.)
+
+Then I came across [Sven Dahlstrand's](https://dahlstrand.net/) blog, which is
+also hosted on Micro.blog. When I tried visiting a [page that did not
+exist](https://dahlstrand.net/not-found-test), I saw this:
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/dahlstrand-404-not-found-test.png" width="600" height="427" alt="">
+
+That got me thinking that I could provide a textual explanation that the page
+has not yet been migrated on my 404 error page. (You can customize the 404
+error page on Micro.blog.)
+
+But, how is this possible? Micro.blog hosts static sites, and there is no way
+for a static site to render dynamic HTML depending on the URL.
+
+Then I did what I first did when I learned to program 20+ years ago: I hit
+"View Page Source".
+
+I realized that the dynamic part was rendered with Javascript:
+
+```html
+<p>Sorry, <span id="this-page-text">this page</span> could not be found. Don&rsquo;t worry, you didn&rsquo;t break the internet. It&rsquo;s probably my fault. ðŸ˜…</p>
+...
+<script module>
+const thisPageText = document.querySelector('#this-page-text');
+thisPageText.innerText = `${thisPageText.innerText} (${window.location.pathname})`;
+</script>
+```
+
+I was confused by `<script module>` and the backtick syntax. Most likely
+Javascript has changed a bit since I last worked with it.
+
+I put together something similar, with more familiar Javascript, for my 404
+error page:
+
+```markdown
+This page has probably not been imported to my new blog yet.
+
+<p>In the meantime, you can find it here: <a id="here-link"
+href="http://archive.rickardlindberg.me">http://archive.rickardlindberg.me</a>.</p>
+
+<script type="text/javascript">
+var hereLink = document.getElementById("here-link");
+var path = window.location.pathname;
+var archiveUrl = "http://archive.rickardlindberg.me" + path;
+hereLink.href = archiveUrl;
+hereLink.innerHTML = archiveUrl;
+</script>
+```
+
+(The `<p>` tag in the second paragraph seems to be needed. Otherwise the
+Micro.blog Markdown processing will turn the link in the "a-body" into another
+link tag so we end up with nested links which makes the Javascript not work.)
+
+Thank you [@sod](https://micro.blog/sod) for showing me that this was possible, and for making me re-live
+the experience of first learning to program. I wish more environments had a
+"View Page Source" function.
diff --git a/posts/2024/08/11/how-i-found/post.md b/posts/2024/08/11/how-i-found/post.md
index 672602e..b2b1fb1 100644
--- a/posts/2024/08/11/how-i-found/post.md
+++ b/posts/2024/08/11/how-i-found/post.md
@@ -3,3 +3,34 @@ date: 2024-08-11 09:36:57
 title: How I found out about Micro.blog
 tags: Micro.blog
 ---
+
+When I was researching the Zettelkasten method (a specific way to take notes),
+I ended up on [Writing
+Slowly](https://writingslowly.com/2024/07/14/a-system-for.html). It looked like
+this:
+
+<img
+src="https://cdn.uploads.micro.blog/173380/2024/writingslowly-zettelkasten.png"
+width="600" height="503" alt="Screenshot of Writing Slowly website.">
+
+Besides the content, that I was also interested in, I thought that this was a
+nice looking blog. It had a clutter free UI, nice formatting, and support for
+pages and categories. I thought that I would like to have this as well. (My
+current blog that is hosted as a static site on GitHub Pages is in need for an
+update.)
+
+Then I noticed this at the bottom of Writing Slowly:
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/writingslowly-micro-blog.png"
+width="600" height="517" alt="Screenshot of Writing Slowly Micro.blog link.">
+
+It looks like [Micro.blog](https://micro.blog/) hosts the blog. And that posts
+can be commented on via the Fediverse as well. This looks cool.
+
+I started reading about it. Both in the book [Indie Microblogging by Manton
+Reece](https://book.micro.blog/) and on their [about](https://micro.blog/about)
+and [help](https://help.micro.blog/t/help-documents-table-of-contents/311)
+page. I got more and more intrigued. I decided to try it out, and about a week
+after accidentally stumbling across Micro.blog, I had moved my blog there.
+
+I'm looking forward to exploring this new universe at Micro.blog.
diff --git a/posts/2024/08/11/i-just-implemented/post.md b/posts/2024/08/11/i-just-implemented/post.md
index e659553..2b670b9 100644
--- a/posts/2024/08/11/i-just-implemented/post.md
+++ b/posts/2024/08/11/i-just-implemented/post.md
@@ -3,3 +3,11 @@ date: 2024-08-11 09:15:41
 title: 
 tags: Zettelkasten, Smart Notes
 ---
+
+I just implemented support in [Smart Notes](https://github.com/rickardlindberg/one-file-programs/tree/master/smartnotes) for giving links a text description.
+
+This was inspired by recent readings about [concept mapping](https://en.wikipedia.org/wiki/Concept_map) and Zettelkasten resources [talking about](https://zettelkasten.de/introduction/) the importance of giving context when linking two ideas.
+
+I'm looking forward to using this to see if I find it helpful.
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/smartnotes-link-text-demo.png" width="600" height="323" alt="Screenshot of Smart Notes highlighting link texts.">
diff --git a/posts/2024/08/11/its-like-its/post.md b/posts/2024/08/11/its-like-its/post.md
index 8567881..4b7272c 100644
--- a/posts/2024/08/11/its-like-its/post.md
+++ b/posts/2024/08/11/its-like-its/post.md
@@ -3,3 +3,7 @@ date: 2024-08-11 13:18:13
 title: 
 tags: Running
 ---
+
+It's like it's all out there. Energy, motivation, well being, creativity... You just have to put on a pair of shoes and go out and get it. That's why I run.
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/running-20240811.jpg" width="600" height="337" alt="Me running.">
diff --git a/posts/2024/08/11/its-time-for/post.md b/posts/2024/08/11/its-time-for/post.md
index 0df0640..0c294ed 100644
--- a/posts/2024/08/11/its-time-for/post.md
+++ b/posts/2024/08/11/its-time-for/post.md
@@ -3,3 +3,7 @@ date: 2024-08-11 15:06:44
 title: 
 tags: 
 ---
+
+It's time for a new avatar. I'm thinking I should update them more frequently. Maybe yearly? Anyway, here is the new one.
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/avatar.jpg" width="600" height="600" alt="A picture of me.">
diff --git a/posts/2024/08/11/my-website-as/post.md b/posts/2024/08/11/my-website-as/post.md
index 60e563e..c782b17 100644
--- a/posts/2024/08/11/my-website-as/post.md
+++ b/posts/2024/08/11/my-website-as/post.md
@@ -3,3 +3,9 @@ date: 2024-08-11 06:42:10
 title: 
 tags: Micro.blog
 ---
+
+[My website as a home](https://nicochilla.com/my-website-as-a-home/) (found via [End of Year Hyperlink Dump](https://dahlstrand.net/2024/01/01/end-of-year.html)) talks about a metaphor for websites:
+
+> I feel as if someone is giving me a tour of their apartment: I’m looking at the papers on his desk, the notes stuck to his fridge, an album of butterfly photos taken by his brother, and so on.
+
+I like this metaphor, and I would like my website to feel like a home. [Micro.blog](https://micro.blog/) makes this very easy. I can share and develop my interests. I can structure content with [categories](https://rickardlindberg.me/archive/) and [pages](https://rickardlindberg.me/projects/). Others can come have a look. Comment if they wish. And you can see [conversations](https://rickardlindberg.me/replies/) that I've had with visitors.
diff --git a/posts/2024/08/17/today-i-spent/post.md b/posts/2024/08/17/today-i-spent/post.md
index 240b1a0..6e6ce6c 100644
--- a/posts/2024/08/17/today-i-spent/post.md
+++ b/posts/2024/08/17/today-i-spent/post.md
@@ -3,3 +3,5 @@ date: 2024-08-17 21:49:57
 title: 
 tags: Running
 ---
+
+Today I spent 40 minutes on a bike in the gym. I'd rather be running, but I've got some pain in my achilles tendon, so I explore alternative training at the moment. For this workout, I happened to discover the (Swedish) podcast [Hej (resten av) internet!](https://hejinter.net/) It feels like an entry into an alternative, beautiful web-universe. I look forward to more workouts with them in my ears.
diff --git a/posts/2024/08/18/yes-the-draft/post.md b/posts/2024/08/18/yes-the-draft/post.md
index 7c18b47..80a29a1 100644
--- a/posts/2024/08/18/yes-the-draft/post.md
+++ b/posts/2024/08/18/yes-the-draft/post.md
@@ -3,3 +3,5 @@ date: 2024-08-18 22:38:26
 title: 
 tags: Writing
 ---
+
+Yes! The draft makes sense now. I think. I had a rough idea of what I wanted to write about. I had lots of notes that I struggled to fit into a coherent narrative. But finally, it all fell into place. I clarified my thinking by writing.
diff --git a/posts/2024/08/19/today-i-bought/post.md b/posts/2024/08/19/today-i-bought/post.md
index 930ccb2..fd2a31f 100644
--- a/posts/2024/08/19/today-i-bought/post.md
+++ b/posts/2024/08/19/today-i-bought/post.md
@@ -3,3 +3,5 @@ date: 2024-08-19 21:12:41
 title: 
 tags: Running
 ---
+
+Today I bought a gym membership. I spent another 40 minutes on the bike. I felt good after the workout, but I didn't get any ideas or inspiration like I usually do when I'm running. Hopefully I can incorporate some runs soon, but I will for sure continue biking to help build an aerobic base.
diff --git a/posts/2024/08/21/did-another-bike/post.md b/posts/2024/08/21/did-another-bike/post.md
index 22fe0aa..24d43d6 100644
--- a/posts/2024/08/21/did-another-bike/post.md
+++ b/posts/2024/08/21/did-another-bike/post.md
@@ -3,3 +3,5 @@ date: 2024-08-21 21:44:52
 title: 
 tags: Running
 ---
+
+Did another bike workout at the gym. Similar heart rate and duration as my regular runs, but felt like more effort because I'm not used to cycling. I'd rather be running, but this is a good alternative. Listened to [Hej (resten av) internet! Avsnitt 2: Nyhetsbrev (eller brev kort och gott)](https://hejinter.net/avsnitt-2/).
diff --git a/posts/2024/08/29/linking-and-how/post.md b/posts/2024/08/29/linking-and-how/post.md
index 7a92d25..bb0df72 100644
--- a/posts/2024/08/29/linking-and-how/post.md
+++ b/posts/2024/08/29/linking-and-how/post.md
@@ -3,3 +3,164 @@ date: 2024-08-29 07:49:10
 title: Linking (and how it has evolved) in Smart Notes
 tags: Zettelkasten, Smart Notes
 ---
+
+I created Smart Notes to be a digital note taking application that follows
+principles from the Zettelkasten method, as explained in Sönke Ahren's book
+*How to Take Smart Notes*.
+
+Two fundamental aspects of the Zettelkasten method are notes and links between
+them.
+
+In a physical Zettelkasten, notes are written on index cards (or some similar
+format), given unique, hierarchical ids, and stored sequentially in a slip-box:
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/physical-zettelkasten.png"
+width="600" height="458" alt="Illustration of physical Zettelkasten.">
+
+Sönke writes that you should add a new note to the slip-box directly behind the
+note you are referring to. That creates one kind of link. He also writes that
+you can add it behind multiple notes by by referring to its unique in other
+notes.
+
+Here is how I realized this aspect of the Zettelkasten method in Smart Notes:
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/smart-notes-links.png"
+width="600" height="337" alt="Screenshot of Smart Notes showing how notes and
+links are represented.">
+
+Some design decisions and my reasoning about them:
+
+* Notes are visualized as a physical index cards. That restricts the amount of
+  text that you can write on them. I felt like a problem with a digital
+  approach might be that you write too much on your notes because there is
+  unlimited space. I was also interested in mimicking the feeling of working
+  with physical index cards on a table.
+
+* Links are visualized as strings between notes. You can link however you want.
+  In the above example, the note related to both notes are added behind both
+  the first note and the note that is related to the first note. (The note is
+  shown twice, but it is the same note.)
+
+* Note ids are not shown in the UI. In a physical Zettelkasten, note ids are
+  important to be able to find a note when following a link. (If a note says
+  "see note X" you need to be able to locate X in the slip-box.) But in
+  Smart Notes the link is right there and shows the note that it links to.
+
+## Trains of thought and branches
+
+Another aspect of the Zettelkasten method is trains of though. Notes related to
+each other can form a train of thought, and reviewing that train of though is
+useful. In a physical Zettelkasten related notes are stored close to each
+other, and following a train of though can be done by flipping through the
+cards in an area.
+
+I was thinking about how this aspect of Zettelkasten could be realized in Smart
+Notes.
+
+I read more about how notes are stored and numbered in a physical Zettelkasten.
+There seems to be two cases. Either the note is related to an existing note, in
+which case it is put right behind it, or the note is not related to any
+existing notes, in which case it is put at the end.
+
+Furthermore, if a note is related to an existing note, a distinction seems to
+be made if the new note continues the train of though of the previous note or
+if it branches off. With the Zettelkasten numbering system, it might be
+possible to distinguish these different cases. In [Introduction to the
+Zettelkasten Method](https://zettelkasten.de/introduction/), Sascha writes:
+
+> The very first note is assigned the number 1. If you add a second note that
+> is not related to the first note, it is assigned the number 2. But if you
+> want to continue the first note, or inject something into its content,
+> comment on it, or something along those lines, you branch off. That new note
+> would get assigned the number 1a. If you continue with this new note, you
+> would go on with 1b. If you then want to comment on the note 1a, you would
+> create a note with the address 1a1. So, in short, whenever you continue a
+> train of thought, you increment the last position in the address, be it
+> number or a character from the alphabet. And when you want to expand,
+> intersperse, or comment on a note, you take its address and append a new
+> character.
+
+Smart Note lacks any visible note ids. So I was thinking that I might be
+missing out on something. What types of hierarchies are created with the
+numbering scheme in Zettelkasten? Can I already replicate those hierarchies in
+Smart Notes?
+
+## Folgezettel
+
+There seems to be a debate going on whether the numbering scheme in
+Zettelkasten, sometimes called "folgezettel" is useful or not.
+
+In [No, Luhmann was not about
+Folgezettel](https://zettelkasten.de/posts/luhmann-folgezettel-truth/), Sascha
+argues that the kind of links created with folgezettel are weak. We know that
+there is a relationship between two notes, but we don't know what that
+relationship is. Sascha further acknowledges that the folgezettel technique is
+probably more practically useful in a physical Zettelkasten, but in a digital
+world, creating annotated links is a better solution. (Creating annotated links
+is certainly possible in a physical Zettelkasten, but browsing those links
+would be tedious because the note in the link might be in a totally different
+place in the slip-box.)
+
+In [Folgezettel is More than
+Mechanism](https://writing.bobdoto.computer/folgezettel-is-more-than-mechanism/),
+Bob argues that the folgezettel technique is useful even in a digital world.
+One point is that it allows you to get a bird's eye view of the topics and
+threads that are developing in your Zettelkasten. Another point is that it
+forces you to think about note relationships when you add notes to the
+slip-box.
+
+I'm starting to think that the mechanism of folgezettel is just about creating
+hierarchies of notes. That's certainly possible already in Smart Notes.
+Perhaps the numbering scheme is not essential to the Zettelkasten method?
+Perhaps I should explore annotated links more instead?
+
+## Annotated links
+
+Sascha's point about annotated links and their importance got me thinking how
+to apply it to Smart Notes. (In [Backlinking Is Not Very Useful -- Often Even
+Harmful](https://zettelkasten.de/posts/backlinks-are-bad-links/), Sascha talks
+more about the importance of adding context to links.)
+
+Here is one thought I had about it early on:
+
+> An unclear link between two notes can be clarified by inserting a note in
+> between that explains the reason for the link. `A -> B` can become `A ->
+> explanation -> B`.
+
+Many years later, I tried this out. It looked like this:
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/smart-notes-link-note.png"
+width="600" height="345" alt="Screenshot of Smart Notes showing the use of a
+link note.">
+
+I found that the "explanation note" took up much space and made it more
+difficult to navigate the note network. That's when I decided that Smart Notes
+needed the ability to annotate links instead. Here is how it turned out:
+
+<img
+src="https://cdn.uploads.micro.blog/173380/2024/smart-notes-link-annotation.png"
+width="600" height="345" alt="Screenshot of Smart Notes showing link
+annotations.">
+
+I've only experimented with this a little, but I find that navigation is
+easier. My hope is that short "linking phrases" (inspired by [concept
+mapping](https://en.wikipedia.org/wiki/Concept_map)) will be enough to annotate
+links.
+
+## Closing thoughts
+
+With annotated links added, I think Smart Notes is pretty flexible. First of
+all you can create arbitrary tree-like structures that can mimic the structure
+you get from folgezettel without having to deal with a complicated numbering
+scheme. That structure can give you a bird's eye view that Bob talks about. If
+you don't want to emphasize a tree structure, you can use annotated links to
+link arbitrarily and make the context of the connections clear.
+
+I try to make Smart Notes a digital note taking application that follows
+principles from the Zettelkasten method. Sometimes it is easy to focus on the
+specifics of the method and try to replicate it as closely as possible. But I
+think it is more important to experiment and see what works. Smart Notes has
+been my way of exploring Zettelkasten, and I will continue to tweak it as I
+learn, both from reading and researching, and from practicing. Most
+importantly, I will try to use my notes for creative output and learning and
+try to notice what features in Smart Notes maximize that.
diff --git a/posts/2024/09/01/i-just-implemented/post.md b/posts/2024/09/01/i-just-implemented/post.md
index 573b9a0..29ec17c 100644
--- a/posts/2024/09/01/i-just-implemented/post.md
+++ b/posts/2024/09/01/i-just-implemented/post.md
@@ -3,3 +3,16 @@ date: 2024-09-01 18:01:41
 title: 
 tags: 
 ---
+
+I just implemented a small shell in 29 lines of Python that has support for redirects:
+
+```text
+$ ./minishell.py 
+~~?~~> echo hello
+hello
+~~0~~> wc -l minishell.py
+29 minishell.py
+~~0~~> wc -l <minishell.py >report.txt
+~~0~~> cat report.txt
+29
+```
diff --git a/posts/2024/09/01/newsletter-august-smart/post.md b/posts/2024/09/01/newsletter-august-smart/post.md
index 2c085b3..e0bf4c9 100644
--- a/posts/2024/09/01/newsletter-august-smart/post.md
+++ b/posts/2024/09/01/newsletter-august-smart/post.md
@@ -3,3 +3,108 @@ date: 2024-09-01 07:33:59
 title: Newsletter August 2024: Smart Notes and Blogging
 tags: newsletter
 ---
+
+In August I had my last week of summer vacation. I read a book that made me
+want to improve my note taking tool, I did some programming on hobby projects,
+and I migrated my blog to a new platform. All while doing many runs.
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/collage-202408.png"
+width="600" height="450" alt="Collage of activities in August.">
+
+## A System for Writing
+
+I read *A System for Writing* by Bob Doto. [This
+review](http://richardcarter.com/reviews/book-review-a-system-for-writing-by-bob-doto/)
+is what made me buy the book:
+
+> When I first tried to get my head around Zettelkasten, I consulted Sönke
+> Ahrens’ extremely useful book How to Take Smart Notes. This was—and still
+> is—seen as the book to read on the subject. I predict A System for Writing
+> will replace it.
+
+I liked Sönke's book, and I was curious to learn more about this topic from a
+source that seemed credible.
+
+I got some new insights about the Zettelkasten method. In particular the idea
+that it is important to articulate how two ideas relate. I've previously mostly
+connected ideas without context. The connection was obvious when I made it,
+but most likely less obvious when I come back to it.
+
+I tried to research this a bit more and found the article [Backlinking Is Not
+Very Useful -- Often Even
+Harmful](https://zettelkasten.de/posts/backlinks-are-bad-links/):
+
+> A good link context explains what you can expect if you follow the link. But
+> it can also explain the nature of the relationship between both notes.
+
+I wanted to try this out.
+
+## Smart Notes
+
+I use my [Smart Notes](https://rickardlindberg.me/categories/smart-notes) app
+to take notes using the Zettelkasten method. When I studied the method more, I
+got some new ideas that I implemented:
+
+* I configured different note types to show in different colors. Zettelkasten
+  has a few different kinds of notes, and quickly being able to see, by color,
+  which it is, has been helpful.
+
+* I added the ability to change the order of notes. This was needed to be able
+  to create structure notes with links in specific order.
+
+* I added the ability to give [links a text
+  description](https://rickardlindberg.me/2024/08/11/i-just-implemented.html).
+  This is what allowed me to experiment with articulating how two ideas relate
+  to each other. I wrote more about the evolution of this feature in [Linking
+  (and how it has evolved) in Smart
+  Notes](https://rickardlindberg.me/2024/08/29/linking-and-how.html).
+
+## One-File Programs
+
+I continued to work on [One-File
+Programs](https://github.com/rickardlindberg/one-file-programs).
+
+I worked on an engine app that can automatically reload other apps when they
+change. This gives faster feedback, especially when working on graphical
+applications. It is similar to an approach I've written about previously in
+[How to get fast feedback on graphical
+code?](https://rickardlindberg.me/2023/07/28/how-to-get.html)
+
+I also worked on the [no
+scrollbars](https://github.com/rickardlindberg/one-file-programs/tree/master/no-scrollbars)
+app. I wanted to see if we can get rid of scrollbars in some GUI elements. The
+idea is to make items larger around the area of the mouse so that they can more
+easily get selected. Here is one screenshot:
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/no-scrollbars.png"
+width="600" height="312" alt="Screenshot of no scrollbars experiment.">
+
+I want do continue work with this repo, but the rest of the time this month, I
+spent on my blog.
+
+## Micro.blog
+
+I [found out about
+Micro.blog](https://rickardlindberg.me/2024/08/11/how-i-found.html) and moved
+my blog to it.
+
+* I documented how I did a redirect to my old archived site for pages that I
+  have not yet migrated to the new blog in [Poor man's redirect in a static
+  site](https://rickardlindberg.me/2024/08/09/poor-mans-redirect.html).
+
+* I started a "photo blog" documenting my
+  [runs](https://rickardlindberg.me/categories/running/) and how my life
+  improves from them.
+
+Some reflections on Micro.blog:
+
+* Micro.blog makes it easy to create [a website that feels like a
+  home](https://nicochilla.com/my-website-as-a-home/).
+
+  I can share and develop my interests. I can structure content with categories
+  and pages. Others can come have a look. Comment if they wish. And you can
+  see conversations that I've had with visitors.
+
+* It makes blogging fun. It is easy to publish and you can get comments from
+  the community on your posts.
+
diff --git a/posts/2024/09/04/bash-redirects-explained/post.md b/posts/2024/09/04/bash-redirects-explained/post.md
index ef6a426..d55a219 100644
--- a/posts/2024/09/04/bash-redirects-explained/post.md
+++ b/posts/2024/09/04/bash-redirects-explained/post.md
@@ -3,3 +3,352 @@ date: 2024-09-04 06:39:30
 title: Bash Redirects Explained
 tags: Bash
 ---
+
+I thought I knew how Bash redirects worked.
+
+If I wanted to redirect the output of a command to a file, I'd type this:
+
+```bash
+program > /tmp/log.txt
+```
+If I wanted to pipe both stdout and stderr to a text editor for further
+processing, I'd type this:
+
+```bash
+program 2>&1 | vim -
+```
+I knew that `2>&1` meant redirect stderr to stdout making it appear on stdout
+as well.
+
+I knew certain patterns for certain situations. But when I encountered
+situations where I had not learned a pattern, I was lost. For example, I could
+not explain the difference between
+
+```bash
+program 2>&1 >/tmp/log.txt
+```
+and
+
+```bash
+program >/tmp/log.txt 2>&1
+```
+And I got scared when I saw something like this:
+
+```bash
+program < input.txt > output.txt 2>&1
+```
+Have you also been there? What did you do?
+
+I would search the Internet for a pattern that matched the use case, or just
+try different alternatives and notice how they behaved.
+
+I did this until one day when I learned a mental model for how Bash redirects
+work. Now I no longer need to rely on patterns. I can easily parse any
+situation and use any combination of redirects for my purposes.
+
+The rest of this article explains this mental model.
+
+## The Standard Streams
+
+A process has three standard streams attached to it:
+
+* stdin (0)
+* stdout (1)
+* stderr (2)
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/process-streams.png"
+width="600" height="227" alt="Diagram of the three streams of a process.">
+
+When we start a program from the terminal, Bash sets up the standard streams as
+follows:
+
+* stdin: terminal/keyboard
+* stdout: terminal
+* stderr: terminal
+
+What redirects do is to modify what the standard streams point to before the
+program starts executing.
+
+* `<` means modify stdin.
+* `>` means modify stdout.
+* `2>` means modify stderr.
+
+That is the mental model: **redirects modify standard streams before program
+execution**.
+
+Let's evaluate a few examples using this mental model to see how it works.
+
+## Logcat Utility
+
+To be able to show what happens in different examples, we have a utility
+program, `logcat.py`, that makes use of all three streams. It reads text from
+stdin, logs the arguments and the length of the text to stderr, and writes the
+text to stdout. It looks like this:
+
+```python
+#!/usr/bin/env python
+
+import sys
+
+text = sys.stdin.read()
+
+sys.stderr.write(f"Args: {(sys.argv[1:])}\n")
+sys.stderr.write(f"Read {len(text)} characters.\n")
+
+sys.stdout.write(text)
+```
+## Example: No Redirect
+
+Let's start with an example without redirects to see the operation of
+`logcat.py`:
+
+```text
+$ ./logcat.py ignored arguments
+```
+Before `logcat.py` starts executing, Bash sets up the standard streams as
+follows:
+
+* stdin: terminal/keyboard
+* stdout: terminal
+* stderr: terminal
+
+When execution starts, `logcat.py` waits for input. If we type `hello` in the
+terminal (followed by a return and ctrl+d), the following is printed to the
+terminal:
+
+```text
+Args: ['ignored', 'arguments']
+Read 6 characters.
+hello
+```
+We can see that it read our input from the terminal/keyboard and wrote the log
+messages along with our input to the terminal as well.
+
+## Example: Redirect Stdin
+
+Now let's modify stdin to instead of the terminal/keyboard be the `logcat.py`
+source code:
+
+```text
+$ ./logcat.py ignored arguments <logcat.py
+```
+This instructs Bash to modify stdin to point to the file `logcat.py`.
+
+Before `logcat.py` starts executing, Bash sets up the standard streams as
+follows:
+
+* stdin: `logcat.py` (opened in read mode)
+* stdout: terminal
+* stderr: terminal
+
+When execution starts, the following is printed to the terminal:
+
+```text
+Args: ['ignored', 'arguments']
+Read 182 characters.
+#!/usr/bin/env python
+
+import sys
+
+text = sys.stdin.read()
+
+sys.stderr.write(f"Args: {(sys.argv[1:])}\n")
+sys.stderr.write(f"Read {len(text)} characters.\n")
+
+sys.stdout.write(text)
+```
+We can see that the redirect operation is stripped from the arguments. Only
+Bash sees it and does not pass it along to the program. Furthermore we can see
+that the `logcat.py` source code is printed to the terminal.
+
+## Example: Redirect Stdin and Stdout
+
+Let's say we're only interested in the log messages, and want to throw away
+stdout:
+
+```text
+$ ./logcat.py ignored arguments <logcat.py >/dev/null
+```
+This instructs Bash to modify stdin to point to the file `logcat.py` and to
+modify stdout to point to the file `/dev/null`.
+
+Before `logcat.py` starts executing, Bash sets up the standard streams as
+follows:
+
+* stdin: `logcat.py` (opened in read mode)
+* stdout: `/dev/null` (opened in write mode)
+* stderr: terminal
+
+When execution starts, the following is printed to the terminal:
+
+```text
+Args: ['ignored', 'arguments']
+Read 182 characters.
+```
+We can see that the redirect operations are all stripped from the arguments and
+the source code has been written to `/dev/null` and is thus not shown in the
+terminal.
+
+## Extended Mental Model
+
+Let's extended the mental model to clarify how Bash operates.
+
+When Bash parses a command, it divides it into two parts: the arguments and the
+redirects. Before it starts executing the program with the arguments, it goes
+through the redirects, in order, and configures the standard streams before
+execution.
+
+## Example: Redirect All Streams
+
+Let's see how we can interpret a more complex command using the extended mental
+model:
+
+```text
+$ ./logcat.py <logcat.py is the >out.txt best 2>&1 thing
+```
+If we split this into arguments and redirects, we get this:
+
+* Arguments: `./logcat.py`, `is`, `the`, `best`, `thing`
+* Redirects: `<logcat.py`, `>out.txt`, `2>&1`
+
+Now, let's evaluate the redirects in order. The state of the standard streams
+at start is this:
+
+* stdin: terminal/keyboard
+* stdout: terminal
+* stderr: terminal
+
+Then we evaluate `<logcat.py` and get this:
+
+* stdin: `logcat.py` (opened in read mode)
+* stdout: terminal
+* stderr: terminal
+
+Then we evaluate `>out.txt` and get this:
+
+* stdin: `logcat.py` (opened in read mode)
+* stdout: `out.txt` (opened in write mode)
+* stderr: terminal
+
+Then we evaluate `2>&1`, which means modify stderr (`2>`) to be whatever
+stdout points to (`&1`), and get this:
+
+* stdin: `logcat.py` (opened in read mode)
+* stdout: `out.txt` (opened in write mode)
+* stderr: `out.txt` (opened in write mode)
+
+After the standard streams have been set up, execution of `./logcat.py is the
+best thing` starts. Nothing appears on the terminal since all output has been
+redirected to `out.txt`:
+
+```text
+$ cat out.txt
+Args: ['is', 'the', 'best', 'thing']
+Read 182 characters.
+#!/usr/bin/env python
+
+import sys
+
+text = sys.stdin.read()
+
+sys.stderr.write(f"Args: {(sys.argv[1:])}\n")
+sys.stderr.write(f"Read {len(text)} characters.\n")
+
+sys.stdout.write(text)
+```
+## Mini Shell
+
+I created a mini version of a shell to demonstrate how straight forward it is
+to implement redirects with POSIX system calls. It works exactly as the
+extended mental model, and because it is running software, it fills in some
+more details of the model. I would guess that Bash does something similar even
+though I haven't read its source code.
+
+First off, here is a demo that shows how the mini shell can replicate the
+complex example from above:
+
+```text
+$ ./minishell.py
+~~?~~> ./logcat.py <logcat.py is the >out.txt best 2>&1 thing
+~~0~~> cat out.txt
+Args: ['is', 'the', 'best', 'thing']
+Read 182 characters.
+#!/usr/bin/env python
+
+import sys
+
+text = sys.stdin.read()
+
+sys.stderr.write(f"Args: {(sys.argv[1:])}\n")
+sys.stderr.write(f"Read {len(text)} characters.\n")
+
+sys.stdout.write(text)
+```
+And here is the implementation in only 31 lines of Python:
+
+```python
+#!/usr/bin/env python
+
+import os
+import sys
+
+STDIN  = 0
+STDOUT = 1
+STDERR = 2
+
+statuscode = "?"
+while True:
+    sys.stdout.write(f"~~{statuscode}~~> ")
+    sys.stdout.flush()
+    command = input()
+    pid = os.fork()
+    if pid == 0:
+        args = []
+        for part in command.split(" "):
+            if part.startswith("<"):
+                os.dup2(os.open(part[1:], os.O_RDONLY), STDIN)
+            elif part.startswith(">"):
+                os.dup2(os.open(part[1:], os.O_WRONLY|os.O_CREAT, 0o644), STDOUT)
+            elif part == "2>&1":
+                os.dup2(STDOUT, STDERR)
+            elif part.startswith("2>"):
+                os.dup2(os.open(part[2:], os.O_WRONLY|os.O_CREAT, 0o644), STDERR)
+            else:
+                args.append(part)
+        os.execvp(args[0], args)
+    else:
+        _, statuscode = os.waitpid(pid, 0)
+```
+To understand how this works, you need some knowledge of the POSIX system calls
+`fork`, `waitpid`, `open`, `dup2`, and `execvp`. But even if you don't
+understand the specifics, I think this codified model can help in understanding
+how Bash operates. Let's look at an example.
+
+## Example: Duplicated Files
+
+Let's see if we can explain the difference between the following commands using
+the mini shell for the model:
+
+```text
+$ ./logcat.py <logcat.py >out.txt 2>out.txt
+$ ./logcat.py <logcat.py >out.txt 2>&1
+```
+At a first glance, it looks like both commands redirect both stdout and stderr
+to the `out.txt` file. But if we evaluate it like mini shell does, we see that
+the first example will open the file twice (two calls to `os.open` creating two
+file handles), whereas the second example will open the file only once and then
+duplicate the file handle for stderr.
+
+When two file handles are created, writes to the two streams will attempt to
+write to the same location in the file and they will overwrite each other.
+Furthermore, buffering might alter in which order writes happen, so it is not
+clear what will actually end up in the file. So to make sure all output is
+captured in the file, the second example should be used where the file is only
+opened once.
+
+## Conclusion
+
+There is still more to Bash redirects than what I have explained here. But this
+mental model (along with its extended versions) have helped me reason about
+Bash redirects. I hope it will do the same for you.
+
diff --git a/posts/2024/09/04/do-you-know/post.md b/posts/2024/09/04/do-you-know/post.md
index 35da47b..5ae23ef 100644
--- a/posts/2024/09/04/do-you-know/post.md
+++ b/posts/2024/09/04/do-you-know/post.md
@@ -3,3 +3,11 @@ date: 2024-09-04 15:18:23
 title: 
 tags: 
 ---
+
+Do you know the difference between the following Bash commands?
+
+```bash
+program 2>&1 >/tmp/log.txt
+program >/tmp/log.txt 2>&1
+```
+If not, you might be interested in my latest blog post [Bash Redirects Explained](https://rickardlindberg.me/2024/09/04/bash-redirects-explained.html).
diff --git a/posts/2024/09/05/if-you-want/post.md b/posts/2024/09/05/if-you-want/post.md
index 4dfc1b1..fb26321 100644
--- a/posts/2024/09/05/if-you-want/post.md
+++ b/posts/2024/09/05/if-you-want/post.md
@@ -3,3 +3,5 @@ date: 2024-09-05 06:29:46
 title: 
 tags: 
 ---
+
+If you want to know how to implement a Bash-like shell, with support for redirects, in only 31 lines of Python, you should check out my latest blog post [Bash Redirects Explained](https://rickardlindberg.me/2024/09/04/bash-redirects-explained.html).
diff --git a/posts/2024/09/05/pull-requests-discourage/post.md b/posts/2024/09/05/pull-requests-discourage/post.md
index c118c34..6fc393e 100644
--- a/posts/2024/09/05/pull-requests-discourage/post.md
+++ b/posts/2024/09/05/pull-requests-discourage/post.md
@@ -3,3 +3,7 @@ date: 2024-09-05 21:05:39
 title: 
 tags: 
 ---
+
+Pull requests discourage experiments because changes can only propagate after approval. The idea behind PRs is to only approve "good" changes.
+
+First, the learning opportunities of mistakes are gone. Second, you might loose interest in experimenting because you are afraid of making mistakes.
diff --git a/posts/2024/09/05/today-i-just/post.md b/posts/2024/09/05/today-i-just/post.md
index 10d877c..48141d7 100644
--- a/posts/2024/09/05/today-i-just/post.md
+++ b/posts/2024/09/05/today-i-just/post.md
@@ -3,3 +3,7 @@ date: 2024-09-05 20:20:45
 title: 
 tags: Running
 ---
+
+Today I just needed to run. I had not run since I hurt my achilles tendon almost a month ago. I wanted to see if it still hurt. I felt something, but not too much. I think I still need to take it easy with running, but man it felt good moving again.
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/running-sep5.jpg" width="600" height="337" alt="Me running.">
diff --git a/posts/2024/10/14/newsletter-september-bash/post.md b/posts/2024/10/14/newsletter-september-bash/post.md
index 41e93c8..fbca76d 100644
--- a/posts/2024/10/14/newsletter-september-bash/post.md
+++ b/posts/2024/10/14/newsletter-september-bash/post.md
@@ -3,3 +3,29 @@ date: 2024-10-14 19:11:59
 title: Newsletter September 2024: Bash Redirects and Reading
 tags: newsletter
 ---
+
+This month I read [How to Use a Zettelkasten to Write Stories Packed with
+Emotion](https://www.kathleenspracklen.com/zettelkasten-emotion). It inspired
+me to write something using that technique. The topic that came to mind was
+Bash redirects. It resulted in the blog post [Bash Redirects
+Explained](https://rickardlindberg.me/2024/09/04/bash-redirects-explained.html).
+
+I also started reading *How Children Learn* by John Holt. He says that children
+are naturally interested in exploring the world. I started thinking about what
+environments kill exploration. I though that fear of doing something wrong will
+discourage exploration. Then I made a parallel to a common practice in software
+development: pull requests. I thought that pull requests discourage experiments
+because changes can only propagate after approval, and the idea behind pull
+requests is to only approve "good" changes. First of all, the learning
+opportunities of mistakes are gone. Second of all, you might loose interest in
+experimenting because you are afraid of making a mistake. You build a culture
+of discouraging making mistakes. I though that a better approach is to focus on
+making the cost of mistakes small so that we can do lots of them and learn from
+them.
+
+I also read [Debugging Teams](https://www.debuggingteams.com/) by Ben
+Collins-Sussman and Brian Fitzpatrick. They talk about the myth of the genius
+programmer and that all great things are built by teams. I believe that is
+true, but sometimes I have a hard time to acknowledge it because I also enjoy
+working by myself.
+
diff --git a/posts/2024/10/16/various-things-have/post.md b/posts/2024/10/16/various-things-have/post.md
index 21f34d4..4ff6ce9 100644
--- a/posts/2024/10/16/various-things-have/post.md
+++ b/posts/2024/10/16/various-things-have/post.md
@@ -3,3 +3,7 @@ date: 2024-10-16 20:08:48
 title: 
 tags: Running
 ---
+
+Various things have kept me from running for a while. Today I had enough. I just had to go for a short run. It was the first run with warmer clothes. The weather was nice. I reclaimed some energy.
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/running-oct16.jpg" width="600" height="337" alt="Me running.">
diff --git a/posts/2024/10/28/its-getting-dark/post.md b/posts/2024/10/28/its-getting-dark/post.md
index fd37d08..a679939 100644
--- a/posts/2024/10/28/its-getting-dark/post.md
+++ b/posts/2024/10/28/its-getting-dark/post.md
@@ -3,3 +3,7 @@ date: 2024-10-28 19:51:08
 title: 
 tags: 
 ---
+
+It's getting dark. It gives variation to the running.
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/running-oct28.jpg" width="600" height="337" alt="Me running in the dark.">
diff --git a/posts/2024/11/02/ive-used-testing/post.md b/posts/2024/11/02/ive-used-testing/post.md
index 1132eb0..3014aaa 100644
--- a/posts/2024/11/02/ive-used-testing/post.md
+++ b/posts/2024/11/02/ive-used-testing/post.md
@@ -3,3 +3,5 @@ date: 2024-11-02 19:05:13
 title: 
 tags: 
 ---
+
+I've used [testing without mocks](https://www.jamesshore.com/v2/projects/nullables/testing-without-mocks) quite extensively now. I've also used it in a work project for more than a year. My experience is that it's the **best testing strategy** that I've ever used. I've never felt more **confident** that my code works. I refactor code without fear of it breaking. It's so good.
diff --git a/posts/2024/11/02/today-i-learned/post.md b/posts/2024/11/02/today-i-learned/post.md
index 644f891..ac73a7c 100644
--- a/posts/2024/11/02/today-i-learned/post.md
+++ b/posts/2024/11/02/today-i-learned/post.md
@@ -3,3 +3,5 @@ date: 2024-11-02 19:50:36
 title: 
 tags: 
 ---
+
+Today I learned about the [Rison](https://github.com/Nanonid/rison) data serialization format. I wrote a function to convert a Python value to Rison format. It was an elegant recursive function with partial support for the format.
diff --git a/posts/2024/11/03/how-would-you/post.md b/posts/2024/11/03/how-would-you/post.md
index ee04eb2..fc98ea6 100644
--- a/posts/2024/11/03/how-would-you/post.md
+++ b/posts/2024/11/03/how-would-you/post.md
@@ -3,3 +3,16 @@ date: 2024-11-03 09:56:01
 title: 
 tags: 
 ---
+
+How would you improve this code?
+
+```python
+def update_r_users(service)
+    r_users = []
+    for user in service.get_all_users():
+        if "r" in user:
+            r_users.append(user)
+    service.set_users_in_group("users_with_r_in_name", r_users)
+```
+
+Find out what I did it in my latest [newsletter](https://rickardlindberg.me/2024/11/03/newsletter-october-primitive.html).
diff --git a/posts/2024/11/03/newsletter-october-primitive/post.md b/posts/2024/11/03/newsletter-october-primitive/post.md
index 7acc459..702eaf3 100644
--- a/posts/2024/11/03/newsletter-october-primitive/post.md
+++ b/posts/2024/11/03/newsletter-october-primitive/post.md
@@ -3,3 +3,128 @@ date: 2024-11-03 09:33:04
 title: Newsletter October 2024: Primitive Obsession?
 tags: oop, newsletter
 ---
+
+Normally I do something related to programming in my spare time every month. I
+read something that I find interesting and want to share. Or I have some
+thought related to programming that I want to share. This is the first month
+since I started these monthly updates in June 2019 that I've got nothing of
+that. I've been occupied with other things, and I've also done quite a bit of
+programming at work. Perhaps that has satisfied my interest for programming.
+
+One thing that I've done a lot at work this month is wrapping simple data
+structures in classes. Instead of passing around lists and dictionaries, I've
+created classes holding that data and only serialized it at the edges of the
+application. Every time I have done this, I wish I had done it sooner. It's so
+good. And in nine times out of ten, those classes have attracted some
+functionality that fits perfectly. They have provided one place to put
+functionality instead of scattering it throughout the codebase.
+
+What am I talking about? Let me give an example.
+
+Imagine that we talk to a user service that has an API something like this:
+
+```python
+service.get_all_users() -> ["user1", "user2"]
+service.set_users_in_group("group1", ["user1", "user2"]) -> OK
+```
+The API works with users represented as list of strings. Now we want to write a
+function that applies some domain logic to assign users to groups. It is so
+easy and tempting to write something like this:
+
+```python
+def update_r_users(service)
+    r_users = []
+    for user in service.get_all_users():
+        if "r" in user:
+            r_users.append(user)
+    service.set_users_in_group("users_with_r_in_name", r_users)
+```
+One problem with this code is that it mixes calls to the user service with
+domain logic, so is is difficult to test domain logic without invoking the
+service. It's also more difficult to reason about.
+
+What if we instead did this:
+
+```python
+def update_r_users(service)
+    service.set_users_in_group(
+        "users_with_r_in_name",
+        Users.from_service(service.get_all_users()).filter_name("r").serialize()
+    )
+
+class Users:
+
+    @classmethod
+    def from_service(cls, users):
+        return cls(users)
+
+    def __init__(self, users):
+        self.users = users
+
+    def filter_name(self, text):
+        return Users([
+            user
+            for user in self.users
+            if text in user
+        ])
+
+    def serialize(self):
+        return self.users
+```
+This is what I mean by wrapping simple data structures in classes. Why is this
+better?
+
+First of all, I think `update_r_users` now reads a lot better. The filtering
+logic is no longer mixed with the calls to the service.
+
+This comes at the cost of writing the `Users` class which is quite long
+for the relative functionality that it provides. In the beginning, I often find
+it hard to motivate myself to write these classes. It feels like a lots of
+boilerplate code for not much benefit. However, I often find that these
+sort of classes attract functionality, at which point they start to become
+more useful.
+
+Another thing that they do is encapsulate the data format from the user
+service. Say that the API of the service changes. There is now more information
+about users:
+
+```python
+service.get_all_users() -> [{"name": "user1", "age": 21}, {"name": "user2", "age": 43}]
+service.set_users_in_group("group1", ["user1", "user2"]) -> OK
+```
+We can update the `User` class accordingly:
+
+```python
+class Users:
+
+    @classmethod
+    def from_service(cls, users):
+        return cls(users)
+
+    def __init__(self, users):
+        self.users = users
+
+    def filter_name(self, text):
+        return Users([
+            user
+            for user in self.users
+            if text in user["name"]
+        ])
+
+    def serialize(self):
+        return [user["name"] for user in self.users]
+```
+The `update_r_users` stays the same. We control the API of `Users`. Our
+application can safely depend on it. And we can change the internals.
+
+I couldn't find a name for this sort of pattern. My first though was that it
+was a way to avoid primitive obsession. And it is. But it feels like more than
+that. [Bill suggested](https://discuss.systems/@logosity/113414357615492957)
+that it might be just "good old encapsulation". [Dan
+said](https://mas.to/@tastapod/113414190531369119) that it depends on the
+context and that it could be an anti-corruption layer in DDD terms. What would
+you call it?
+
+Anyway, I've been doing this sort of thing a lot this month, and I thought it
+was worth sharing.
+
diff --git a/posts/2024/11/16/i-was-researching/post.md b/posts/2024/11/16/i-was-researching/post.md
index c8e3182..8171b8f 100644
--- a/posts/2024/11/16/i-was-researching/post.md
+++ b/posts/2024/11/16/i-was-researching/post.md
@@ -3,3 +3,5 @@ date: 2024-11-16 15:08:23
 title: 
 tags: vim
 ---
+
+I was researching how to run [Black](https://pypi.org/project/black/) (and possibly other formatters) from Vim and found [Ergonomic mappings for code formatting in Vim](https://phelipetls.github.io/posts/code-formatting-vim/). It was very helpful.
diff --git a/posts/2024/11/20/i-needed-to/post.md b/posts/2024/11/20/i-needed-to/post.md
index e22b1e9..0b61c68 100644
--- a/posts/2024/11/20/i-needed-to/post.md
+++ b/posts/2024/11/20/i-needed-to/post.md
@@ -3,3 +3,13 @@ date: 2024-11-20 22:35:41
 title: 
 tags: Linux
 ---
+
+I needed to submit some [heic](https://en.wikipedia.org/wiki/High_Efficiency_Image_File_Format) photos to a service that only accepted jpg. I didn't know about the heic format, but a little searching gave me a solution:
+
+```bash
+$ heif-convert
+bash: heif-convert: command not found...
+Install package 'libheif' to provide command 'heif-convert'? [N/y] y
+...
+$ find . -iname '*.heic' -exec heif-convert -q 100 {} {}.jpg \;
+```
diff --git a/posts/2024/11/20/today-was-the/post.md b/posts/2024/11/20/today-was-the/post.md
index 5b3a76d..b4eda2e 100644
--- a/posts/2024/11/20/today-was-the/post.md
+++ b/posts/2024/11/20/today-was-the/post.md
@@ -3,3 +3,7 @@ date: 2024-11-20 22:17:43
 title: 
 tags: Running
 ---
+
+Today was the first day of snow this season. Not much. I'm looking forward to many more runs on a white trail.
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/running-nov20.jpg" width="600" height="337" alt="Me running on a trail with a little snow.">
diff --git a/posts/2024/11/23/we-got-some/post.md b/posts/2024/11/23/we-got-some/post.md
index 857c8fb..5392042 100644
--- a/posts/2024/11/23/we-got-some/post.md
+++ b/posts/2024/11/23/we-got-some/post.md
@@ -3,3 +3,7 @@ date: 2024-11-23 21:54:13
 title: 
 tags: Running
 ---
+
+We got some more snow. I like running in the winter. Especially when there is snow and the sun is shining.
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/running-nov23.jpg" width="600" height="337" alt="Me running in a snow-covered landscape with the sun setting in the background.">
diff --git a/posts/2024/11/28/ive-started-working/post.md b/posts/2024/11/28/ive-started-working/post.md
index 988eac8..3cc908b 100644
--- a/posts/2024/11/28/ive-started-working/post.md
+++ b/posts/2024/11/28/ive-started-working/post.md
@@ -3,3 +3,7 @@ date: 2024-11-28 08:31:39
 title: 
 tags: rleditor
 ---
+
+I've started working on a code editor that is a mix of a text editor and a structured editor. It is all text, but parsers and pretty printers allow you to work with a tree structure and not think too much about syntax. It is a work in progress. Code is [here](https://github.com/rickardlindberg/rleditor).
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/rledit-nov28.png" width="478" height="333" alt="Screenshot of rledit editing a JSON document with a selection.">
diff --git a/posts/2024/11/28/sometimes-i-solve/post.md b/posts/2024/11/28/sometimes-i-solve/post.md
index e4d1cfa..3eb5670 100644
--- a/posts/2024/11/28/sometimes-i-solve/post.md
+++ b/posts/2024/11/28/sometimes-i-solve/post.md
@@ -3,3 +3,7 @@ date: 2024-11-28 08:40:09
 title: 
 tags: rleditor
 ---
+
+Sometimes, I solve programming problems by coding on paper. A few days ago, it looked like this:
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/code-on-paper-nov28.png" width="600" height="512" alt="A piece of paper with source code written on it with annotations.">
diff --git a/posts/2024/12/04/today-i-ran/post.md b/posts/2024/12/04/today-i-ran/post.md
index 46803cd..08dda31 100644
--- a/posts/2024/12/04/today-i-ran/post.md
+++ b/posts/2024/12/04/today-i-ran/post.md
@@ -3,3 +3,7 @@ date: 2024-12-04 23:37:47
 title: 
 tags: Running
 ---
+
+Today I ran part of the way to work. It was a cold, beautiful winter morning in Stockholm.
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/running-dec04.jpg" width="600" height="337" alt="Me running with water and Stockholm City Hall in the background.">
diff --git a/posts/2024/12/08/newsletter-november-a/post.md b/posts/2024/12/08/newsletter-november-a/post.md
index 5d70858..6ba6909 100644
--- a/posts/2024/12/08/newsletter-november-a/post.md
+++ b/posts/2024/12/08/newsletter-november-a/post.md
@@ -3,3 +3,54 @@ date: 2024-12-08 08:36:43
 title: Newsletter November 2024: A New Project
 tags: newsletter
 ---
+
+Compared to [last
+month](https://rickardlindberg.me/2024/11/03/newsletter-october-primitive.html),
+this month I did some programming in my spare time. I had fewer commitments,
+and my mind started thinking about various programming projects. We also got
+the first snowfall of the season and I got to enjoy a run in it:
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/running-nov23.jpg"
+width="600" height="337" alt="Me running in a snow-covered landscape with the
+sun setting in the background.">
+
+## A New Code Editor
+
+The programming project that I started working on is code editor that is a mix
+of a text editor and a structured editor. It is all text, but parsers and
+pretty printers allow you to work with a tree structure and not think too much
+about syntax. The code is available on
+[GitHub](https://github.com/rickardlindberg/rleditor), and here is what it
+looks like when editing a JSON document:
+
+<img src="https://cdn.uploads.micro.blog/173380/2024/rledit-nov28.png" width="478"
+height="333" alt="Screenshot of rledit editing a JSON document with a
+selection.">
+
+I got the idea for this project when trying out
+[Black](https://pypi.org/project/black/). Black automatically formats Python
+code for you so that you don't have to think about it. I've been interested in
+structured editors for some time, but my feeling is that they are not user
+friendly because they limit what you can type. Then I came up with this idea of
+an editor that constantly parses what you type. If the parse is successful, it
+pretty prints it for you and provides you with edit operations on the AST. But
+it is all still just text, so you can type whatever. In the worst case, the
+parse fails and you have to fix it manually.
+
+So far, it looks quite promising. And most importantly, I'm having fun
+experimenting. The most likely scenario is that the project will not be a
+success, but I will learn something and have fun doing so. But you never know.
+One day, one of these projects just might turn into something that is
+invaluable.
+
+## TDD
+
+This month I also watched a presentation by Kent Beck called [TDD: Theme &
+Variations](https://www.youtube.com/live/C5IH0ABmyc0). For me, it was a nice
+refresher on the origins of TDD.
+
+One thing that I appreciate with TDD, that I partially had forgotten, is how it
+reduces anxiety. Kent reminded me of it in the presentation. When all tests are
+passing and you can't think of any more tests to write, you are done, and you
+know that it works. That reduces anxiety a lot.
+
diff --git a/posts/2025/01/12/newsletter-december-advent-of-code/post.md b/posts/2025/01/12/newsletter-december-advent-of-code/post.md
index fe55403..63bb0f5 100644
--- a/posts/2025/01/12/newsletter-december-advent-of-code/post.md
+++ b/posts/2025/01/12/newsletter-december-advent-of-code/post.md
@@ -3,3 +3,66 @@ date: 2025-01-12 13:45:36
 title: Newsletter December 2024: Advent of Code
 tags: rleditor, Advent of Code
 ---
+
+December is the month of [Advent of Code](https://adventofcode.com/). I had
+told myself not to participate this year because I know I get [completely
+consumed](https://youtu.be/stBGg7v-URg) by the problems and it has a negative
+impact on the rest of my life. It worked. Until December 15th. More on that
+later.
+
+## Code Editor Update
+
+[Last month](https://rickardlindberg.me/2024/12/08/newsletter-november-a.html)
+I started working on a [new code
+editor](https://github.com/rickardlindberg/rleditor). It is a mix of a text
+editor and a structured editor. It is all text, but parsers and pretty printers
+allow you to work with a tree structure and not think too much about syntax.
+
+I continued working on it this month. The big achievement was that I added
+support for another language in addition to JSON. The other language is
+[rlmeta](https://rickardlindberg.me/categories/rlmeta/). Here is a screenshot
+showing the parser opened in the editor:
+
+<img src="https://cdn.uploads.micro.blog/173380/2025/rleditor-rlmeta-parser.png"
+width="600" height="289" alt="A screenshot of releditor editing the parser of
+rlmeta.">
+
+This is a big achievement because it ties everything together. You define a
+parser and a pretty printer for your language. That gives you all editing
+capabilities. However, you can also write a code generator, and now you have a
+full blown programming language with editing support "for free". This
+potentially provides an environment to quickly experiment with new programming
+languages.
+
+Conceptually, I'm quite happy with this achievement. However, there are many
+things to work on before this is "production ready". First of all, the
+performance is pretty horrible because of the constant parsing and pretty
+printing. Second of all, I need to see if a tree based editor can actually
+become better than a regular text editor.
+
+## Advent of Code
+
+I couldn't help myself but to participate this year as well. The experience was
+not as stressful as last year. I still got consumed by the problems, but the
+feeling was mostly positive. I managed to complete all but 3 problems. Right
+now, the interest to complete them is pretty low. I might take a look at other
+solutions to see if I can learn something from that.
+
+My approach to solving the problems is that I try to solve them in order, and I
+don't look at others' solutions until I have solved both parts. However, I'm
+out of ideas to try on the last problems, and I think the competition part is
+over by now. I might learn something for next year if I look at solutions now.
+
+This year I also practiced object oriented design. So my solutions involve many
+small objects interacting with each other to produce a solution. It was mostly
+a success I think. One of my favorite solutions is for [day
+11](https://github.com/rickardlindberg/aoc24/blob/main/11.py).
+
+This year I also think that I got the hang of Dijkstra and A\*. (I found
+[Introduction to the A\*
+Algorithm](https://www.redblobgames.com/pathfinding/a-star/introduction.html)
+from Red Blob Games really helpful.)
+
+You can find all my solutions on
+[GitHub](https://github.com/rickardlindberg/aoc24).
+
diff --git a/posts/2025/01/13/todays-realization-is-that-you/post.md b/posts/2025/01/13/todays-realization-is-that-you/post.md
index e5b0e77..4c2bf4a 100644
--- a/posts/2025/01/13/todays-realization-is-that-you/post.md
+++ b/posts/2025/01/13/todays-realization-is-that-you/post.md
@@ -3,3 +3,7 @@ date: 2025-01-13 22:37:56
 title: 
 tags: 
 ---
+
+Today's realization is that you can get important things done by consistently working on them for 15 minutes at the start of every day.
+
+By doing it at the start of the day, you ensure that it gets done. And the rest of the day you don't need to be stressed about not working on your important thing, because you already have.
diff --git a/posts/2025/01/19/replacing-ctrlr-in-bash-without/post.md b/posts/2025/01/19/replacing-ctrlr-in-bash-without/post.md
index a7c49d8..d571380 100644
--- a/posts/2025/01/19/replacing-ctrlr-in-bash-without/post.md
+++ b/posts/2025/01/19/replacing-ctrlr-in-bash-without/post.md
@@ -3,3 +3,198 @@ date: 2025-01-19 07:11:50
 title: Replacing Ctrl-R in Bash without TIOCSTI
 tags: rlselect, Bash
 ---
+
+I have [previously
+written](https://rickardlindberg.me/2017/05/19/evolution-of-recalling.html)
+about how I use [rlselect](https://rickardlindberg.me/projects/rlselect/) as a
+replacement for Ctrl+R in Bash.
+
+It works by creating a key binding in Bash for Ctrl+R that invokes `rlselect`
+instead of the default Bash interactive history search command. `rlselect`
+looks something like this:
+
+<img src="uploads/2025/rlselect-selecting-hello.png"
+width="600" height="373" alt="Screenshot of rlselect showing two entries, hello
+and world, with hello selected.">
+
+If you press tab, the current selection is inserted at the prompt. If you press
+enter, the current selection is executed. This is the same behavior as the
+default Ctrl+R.
+
+The mechanism for this stopped working in recent Linux kernel versions. I
+figured out how to solve it and in this blog post I explain how.
+
+## Old Mechanism
+
+When `rlselect` is invoked from Ctrl+R, it is invoked with the `--tab` and
+`--action` flags. The first flag allows the tab key to be used to select a line
+and the second makes `rlselect` print the action taken on the first line
+before to the selection.
+
+Here is an example where enter is pressed when "hello" is selected:
+
+```text
+$ (echo hello; echo world) | rlselect --tab --action
+enter
+hello
+```
+Here is an example where tab is pressed when "world" is selected:
+
+```text
+$ (echo hello; echo world) | rlselect --tab --action
+tab
+world
+```
+Here is an example where Ctrl+G is pressed:
+
+```text
+$ (echo hello; echo world) | rlselect --tab --action
+ctrl-g
+```
+Ctrl+G aborts, so no selection is printed on the second line.
+
+To feed this output to the prompt, TIOCSTI is used. It simulates that you type
+characters in the terminal. The full script that Ctrl+R invokes looks like
+this:
+
+```bash
+set -e
+
+result=$(tac ~/.bash_history | rlselect --tab --action -- "$@")
+
+python - "$result" << EOF
+import fcntl
+import sys
+import termios
+
+action, selection = sys.argv[1].split("\n", 1)
+
+if action != "tab":
+    selection += "\n"
+
+for ch in selection:
+    fcntl.ioctl(sys.stdout.fileno(), termios.TIOCSTI, ch)
+EOF
+```
+The last part is where TIOCSTI is used to simulate that you press the keys
+of the selection. Unless tab is pressed, it appends a newline to the
+selection to simulate that Enter is pressed.
+
+The Bash configuration looks like this:
+
+```bash
+if [[ $- =~ .*i.* ]]; then bind '"\C-r": "\C-a rlselect-history \C-j"'; fi
+```
+Here is how it works:
+
+* Ctrl+R is bound to a series of keystrokes.
+* First Ctrl+A is simulated which takes the cursor to the beginning of the
+  line.
+* Then `<space>rlselect-history<space>` is typed.
+* Then Ctrl+J is simulated which means accept the current line. Or execute it.
+  The initial space entered in the previous step ensures that the
+  `rlselect-history` command does not end up in the history. The moving of the
+  cursor to the beginning of the line ensures that anything typed at the prompt
+  is passed as an argument to `rlselect-history`.
+
+(This configuration also makes the text ` rlselect-history ...` appear in the
+terminal. The new mechanism makes that go away.)
+
+This mechanism stopped working in recent Linux kernel versions because TIOCSTI
+can not be used like this. There is apparently security issues with TIOCSTI and
+it is now only allowed as root.
+
+## New Mechanism
+
+The new Bash configuration for Ctrl+R behavior that I came up with looks like
+this:
+
+```bash
+rlselect-history() {
+    local action
+    local selection
+    {
+        read action
+        read selection
+    } < <(tac ~/.bash_history | rlselect --tab --action -- "${READLINE_LINE}")
+    if [ "$action" = "tab" ]; then
+        READLINE_LINE="${selection}"
+        READLINE_POINT=${#READLINE_LINE}
+        bind '"\C-x2":' # Bind Ctrl+x+2 to do nothing
+    elif [ "$action" = "enter" ]; then
+        READLINE_LINE="${selection}"
+        READLINE_POINT=${#READLINE_LINE}
+        bind '"\C-x2": accept-line' # Bind Ctrl+x+2 to accept line
+    else
+        bind '"\C-x2":' # Bind Ctrl+x+2 to do nothing
+    fi
+}
+
+if [[ $- =~ .*i.* ]]; then
+    # Bind history command to Ctrl+x+1 followed by Ctrl+x+2:
+    bind '"\C-r": "\C-x1\C-x2"'
+    # Bind Ctrl+x+1 to execute rlselect-history which does two things:
+    # 1. Sets READLINE_*
+    # 2. Binds Ctrl+x+2 to either accept line or do nothing.
+    bind -x '"\C-x1": rlselect-history'
+fi
+```
+Let's break this down.
+
+* Ctrl+R is bound to a series of keystrokes.
+* First Ctrl+X+1 is simulated.
+* Then Ctrl+X+2 is simulated.
+* Ctrl+X+1 is bound to execute the command `rlselect-history`. The `-x` to bind
+  ensures that the variables `READLINE_*` can be set. From `man bash` on `set
+  -x`:
+
+  > Cause shell-command to  be executed  whenever keyseq is entered. When
+  > shell-command is executed, the shell sets the READLINE_LINE variable to the
+  > contents of the readline line buffer and the READLINE_POINT and
+  > READLINE_MARK variables [...] If the executed command changes the value of
+  > any of READLINE_LINE, READLINE_POINT, or READLINE_MARK, those new values
+  > will be reflected in the editing state.
+
+* `rlselect-history` is defined as a Bash function which allows it to
+  reconfigure the key binding for Ctrl+X+2. Depending on if the current
+  selection should be executed or not, it binds Ctrl+X+2 to either
+  `accept-line` or nothing.
+
+So the new mechanism relies on using two extra key bindings: Ctrl+X+1 and
+Ctrl+X+2. I chose them because I don't use them otherwise. But they can be any
+two key bindings.
+
+The trick to finding this solution for me was understanding Bash key bindings.
+[This answer](https://stackoverflow.com/a/13978131) on StackOverflow writes the
+following:
+
+> With `bind`, you can bind keys to do one of three things, but no combination
+> of them:
+>
+> * Execute a readline command: `bind '"key": command'`
+> * Execute a series of keystrokes: `bind '"key":"keystrokes"'`
+> * Execute a shell command: `bind -x '"key": shell-command'`
+
+That made me understand that you can not call `accept-line` from within
+`rlselect-history` because it is executed in the context of `bind -x`, and
+readline commands can only be executed in the context of `bind '"key":
+command'`.
+
+## Resources
+
+Here are some resources that talks about the problem with TIOCSTI that helped
+me:
+
+* [hstr](https://github.com/dvorka/hstr) (the program that initially inspired
+  me to write `rlselect`) had a [similar
+  problem](https://github.com/dvorka/hstr/issues/478) and I found clues to my
+  solution there.
+
+* The [fzf-plugins](https://github.com/4z3/fzf-plugins) repo and [this
+  dicussion](https://github.com/junegunn/fzf/pull/1492) provides a similar
+  solution for [fzf](https://github.com/junegunn/fzf).
+
+* The article [Readline and Fuzzy
+  Finder](https://countdigi.github.io/post/2021/08/readline-and-fuzzy-finder/)
+  helped me understand how to work with `READLINE_*` in Bash.
+
diff --git a/posts/2025/02/01/newsletter-january-inspired-and-motivated/post.md b/posts/2025/02/01/newsletter-january-inspired-and-motivated/post.md
index 6b32a3e..d1e7f01 100644
--- a/posts/2025/02/01/newsletter-january-inspired-and-motivated/post.md
+++ b/posts/2025/02/01/newsletter-january-inspired-and-motivated/post.md
@@ -3,3 +3,109 @@ date: 2025-02-01 07:08:21
 title: Newsletter January 2025: Inspired and Motivated by New Laptop and Reading
 tags: rlmeta, newsletter, Micro.blog
 ---
+
+## New Laptop
+
+I got a new laptop this month. It was almost 10 years since I bought my
+previous one. I mainly needed a new one to be able to smoothly browse certain
+websites and for better performance when editing videos.
+
+When installing the latest version of Fedora on it, I took the time to clean up
+my [dotfiles](https://github.com/rickardlindberg/dotfiles). Since I jumped
+quite many Fedora versions, my often used tool
+[rlselect](https://rickardlindberg.me/projects/rlselect/) had stopped working.
+I figured out the problem and documented the fix in [Replacing Ctrl-R in Bash
+without
+TIOCSTI](https://rickardlindberg.me/2025/01/19/replacing-ctrlr-in-bash-without.html).
+
+That blog post came naturally to me. I was trying to find a solution to a
+problem. I found other people having the same problem. When I found a solution,
+I felt the need to share it to contribute to the discussion and hopefully help
+someone else. I even wrote a custom version of the blog post tailored to an
+issue on GitHub.
+
+## Bootstrapping
+
+I came across [Bootstrappable Builds](https://bootstrappable.org/).
+Bootstrapping is an interesting problem that I've mainly come across in my work
+on [RLMeta](https://rickardlindberg.me/projects/rlmeta/). They write that
+
+> To gain trust in our computing platforms, we need to be able to tell how each
+> part was produced from source.
+
+I started thinking how this would apply to RLMeta. The RLMeta "binary" is a
+Python file. So it needs Python to bootstrap itself. I'm not sure if that
+qualifies as a problem according to Bootstrappable.
+
+The "binary" is not really human readable, so it is not feasible to inspect it.
+On the other hand, the source code says exactly how it is produced, and we can
+verify that it produces itself.
+
+One way to figure out if this is a problem or not is to see if it is vulnerable
+to the "Trusting Trust" attack. The article [Reflections on Rusting
+Trust](https://manishearth.github.io/blog/2016/12/02/reflections-on-rusting-trust/)
+talks about how to make this attack in the Rust compiler. I don't fully
+understand it, but it could be interesting to try with RLMeta.
+
+## XXIIVV
+
+I came across [XXIIVV](https://wiki.xxiivv.com/site/about.html). There are so
+many things in there that interest me.
+
+One of those things is the idea that in order to be able to run our software
+many, many years from now, we need to target a small virtual machine that we
+can re-implement in a weekend. You can find more on this in
+[devlog](https://wiki.xxiivv.com/site/devlog.html) and the transcript of the
+talk [Weathering Software
+Winter](https://100r.co/site/weathering_software_winter.html).
+
+One thing that cause our software to break is when the things that it depend on
+change or go away. For that reason, I'm reluctant to pull in third party
+dependencies when building software. But what if the language our software is
+written in disappears? That is less likely than third party dependencies
+changing, but there is still a risk. Especially in the long run.
+
+But if we can not depend on third party software or languages, we have to
+implement the whole software stack ourselves. That is a lot of work. There is
+probably a balance where the trade-off of depending on something is worth it.
+And that balance differs depending on our goals with the software. However, my
+feeling is that many things that we pull in third party dependencies for, we
+can quite easily implement ourselves. And get rid of the bloat of the 80% of
+the third party dependency that we don't use. In addition to getting rid of
+bloat, it also increases understandability. We don't need to figure out how a
+third party dependency work, we just need to figure out how a much smaller set
+of our code works.
+
+Another area where preserving software is of interest to me is my website.
+About half a year ago, I moved to [Micro.blog](https://micro.blog/). Some of my
+posts now only exists there. The platform gives me some things that I like such
+as ease of posting and interaction with others. But what if Micro.blog goes
+away? What happens to my words? I think I need to go back to having the
+source code for my website in a git repo. Then I should be able to compile my
+website for different targets. One for publishing online. It might be an export
+to Micro.blog so that I can continue to use some of its features. But it might
+also be a pdf export. That way I can print the pdf and have my whole website
+preserved as a physical book in my bookshelf. That will most likely live for
+much longer than any technology. And of course, compiling my website should
+depend on as few dependencies as possible. Perhaps even target a small VM as
+XXIIVV does it?
+
+## A Note on Reading
+
+I was able to read and write about the topics above partly because of a
+[realization](https://rickardlindberg.me/2025/01/13/todays-realization-is-that-you.html)
+that I had earlier this month:
+
+> Today’s realization is that you can get important things done by consistently
+> working on them for 15 minutes at the start of every day.
+>
+> By doing it at the start of the day, you ensure that it gets done. And the
+> rest of the day you don’t need to be stressed about not working on your
+> important thing, because you already have.
+
+I want to read more. But it is easier to just scroll through my feeds and read
+headlines. What I've tried now is to bookmark things that look interesting.
+Then I spend some time in the mornings to carefully read those pieces. It's
+been a quite positive experience for me. I've also used that trick to get more
+boring tasks done. It might not work if you are a night person though.
+
diff --git a/posts/2025/03/19/newsletter-february-a-new-code/post.md b/posts/2025/03/19/newsletter-february-a-new-code/post.md
index 371ed25..12f418c 100644
--- a/posts/2025/03/19/newsletter-february-a-new-code/post.md
+++ b/posts/2025/03/19/newsletter-february-a-new-code/post.md
@@ -3,3 +3,27 @@ date: 2025-03-19 08:28:56
 title: Newsletter February 2025: A New Code Hosting Platform?
 tags: newsletter
 ---
+
+When I came across [XXIIVV](https://wiki.xxiivv.com/site/about.html) in last
+month, I immediately got interested in the idea that in order to be able to run
+our software many, many years from now, we need to target a small virtual
+machine that we can re-implement in a weekend. Their virtual machine is called
+[Uxn](https://wiki.xxiivv.com/site/uxn.html):
+
+> Uxn is the virtual machine powering the Hundred Rabbits software.
+
+I spent some time reading about Uxn and trying it out. I also started
+documenting my research in a blog post. Then I got distracted by other things.
+
+One thing that distracted me was starting working on my own code hosting
+platform. It will be tailored to my specific needs and my projects. I wrote
+about some of my needs back in 2017 in [A new home for
+Timeline](https://rickardlindberg.me/2017/11/06/a-new-home.html) and I also
+have new ideas for what I want today.
+
+I made pretty good progress, and I think I can soon start using it for some of
+my projects.
+
+However, as with most of my hobby projects, I got distracted. This time by a
+snowboarding vacation. We'll see what my interest decides to continue working
+on when I have the time and motivation.
diff --git a/posts/2025/04/02/newsletter-march-snowboarding/post.md b/posts/2025/04/02/newsletter-march-snowboarding/post.md
index 81e40f9..75faf1a 100644
--- a/posts/2025/04/02/newsletter-march-snowboarding/post.md
+++ b/posts/2025/04/02/newsletter-march-snowboarding/post.md
@@ -3,3 +3,14 @@ date: 2025-04-02 06:50:07
 title: Newsletter March 2025: Snowboarding
 tags: newsletter
 ---
+
+This month I have done nothing related to programming in my spare time. Partly
+because it is snowboard season.
+
+<img src="uploads/2025/snowboard-are.jpg"
+width="600" height="337" alt="Me standing on a snowboard in the mountains of
+Ã…re.">
+
+I'm most interested in continuing work on my own code hosting platform that
+will host my projects. We'll see if I have the time and motivation next month.
+Or if something completely different catches my interest.
diff --git a/posts/2025/05/02/newsletter-april-projects/post.md b/posts/2025/05/02/newsletter-april-projects/post.md
index 6026130..2b52724 100644
--- a/posts/2025/05/02/newsletter-april-projects/post.md
+++ b/posts/2025/05/02/newsletter-april-projects/post.md
@@ -3,3 +3,352 @@ date: 2025-05-02 11:42:17
 title: Newsletter April 2025: projects2
 tags: timeline, newsletter
 ---
+
+This month I've done a lot of programming. I ended up working more on [my own
+code hosting platform](https://projects.rickardlindberg.me/). I call it
+projects2. Why two? Because it's my second attempt at implementing this idea.
+Second attempt in recent times at least.
+
+In my 2017 blog post, [A new home for
+Timeline](https://rickardlindberg.me/2017/11/06/a-new-home.html), I wrote
+
+> My suggested way forward is therefore to develop a new platform whose core
+> features are registration free discussions and pull requests. In addition, it
+> would need features common to many platforms like hosting of releases and a
+> project web page.
+
+In my previous attempt I focused on registration free discussions. This time, I
+decided to instead focus on creating the minimal possible software that allowed
+us to move away from SourceForge for Timeline and also get rid of the Jenkins
+instance that I run. That way, the infrastructure for running Timeline would
+not depend on proprietary systems or "complicated" third party software
+(Jenkins) which is overkill for our needs.
+
+What follows is a demo of the current state of projects2.
+
+## Requirements
+
+To use projects2 we need the following:
+
+* A machine running Fedora Linux that we have root access to
+* A domain that resolves to that machine
+* An SSL certificate for that domain
+
+I use [DNSimple](https://dnsimple.com) to purchase domains and SSL certificates
+and [Linode](https://www.linode.com/) to provision Fedora servers.
+
+## Initial setup
+
+projects2 is implemented as a single Python script, `projects2.py`, which is
+used to configure a single Fedora Linux machine to act as a code hosting
+platform.
+
+We configure our server in a `config.ini` file. Let's use this for the demo:
+
+```ini
+[Global]
+InstanceName = projectsdemo
+Domain = projectsdemo.rickardlindberg.me
+Title = A demo site for projects2.
+Description = This site showcases the project2 code hosting platform.
+
+[User:admin]
+DisplayName = Rickard
+SshKeys = <my public ssh key>
+Projects = *
+
+[WildcardCertificate]
+pem = <my ssl certificate>
+key = <my ssl private key>
+```
+
+Next we run the `bootstrap` command, which should only be run once on a fresh
+Fedora install:
+
+```text
+$ path/to/projects2.py bootstrap
+ssh root login prompt
+...
+Ensuring user scm...
+Ensuring passwordless sudo for scm...
+Ensuring folder /home/scm/.ssh...
+Ensuring authorized keys...
+Ensuring folder /opt/projectsdemo...
+Ensuring folder /opt/projectsdemo/web/artifacts...
+Ensuring myself...
+Ensuring myself api...
+Ensuring config.ini...
+Ensuring folder /home/scm/.ssh...
+Ensuring authorized keys...
+Ensuring SSH configured...
+Ensuring sshd is restarted...
+Ensuring hostname is projectsdemo.rickardlindberg.me...
+Ensuring folder /opt/projectsdemo/web...
+Ensuring folder /opt/projectsdemo/web/artifacts...
+Ensuring folder /opt/projectsdemo/web/scm...
+Ensuring folder /opt/projectsdemo/events...
+Ensuring pem...
+Ensuring key...
+Setting up tools...
+Setting up CI...
+Setting up timezone...
+Building /opt/projectsdemo/web/index.html...
+```
+
+We now have our Fedora server configured as a code hosting platform! But it
+looks a little empty at the moment:
+
+<img src="uploads/2025/projects2-demo-setup.png"
+width="600" height="236" alt="The initial projectsdemo website which shows only
+the instance title, descriptions, and empty placeholders for projects and
+events.">
+
+## Adding a project
+
+Let's add a project to our `config.ini` and also fix two typos that I made in
+the title and description:
+
+```ini
+[Global]
+...
+Title = A demo site for projects2
+Description = This site showcases the projects2 code hosting platform.
+
+[Project:demo]
+Scm = git
+Description = A demo project.
+```
+
+To apply these changes, we run the `update` command:
+
+```text
+$ path/to/projects2.py update
+Ensuring myself...
+Ensuring myself api...
+Ensuring config.ini...
+Ensuring folder /home/scm/.ssh...
+Ensuring authorized keys...
+Ensuring SSH configured...
+Ensuring hostname is projectsdemo.rickardlindberg.me...
+Ensuring folder /opt/projectsdemo/web...
+Ensuring folder /opt/projectsdemo/web/artifacts...
+Ensuring folder /opt/projectsdemo/web/scm...
+Ensuring folder /opt/projectsdemo/events...
+Ensuring pem...
+Ensuring key...
+Setting up tools...
+Setting up CI...
+Setting up timezone...
+Configuring project demo...
+Ensuring pre-receive hook...
+Ensuring post-update hook...
+Building /opt/projectsdemo/web/demo.html...
+Building /opt/projectsdemo/web/index.html...
+```
+
+And now the demo project appears on the website along with the fixed texts:
+
+<img src="uploads/2025/projects2-demo-project.png"
+width="600" height="218" alt="The projectsdemo website which now also shows the
+projects placeholder filled in with the demo project.">
+
+## Pushing code to the project
+
+We have an empty git project setup up. Let's push some code to it:
+
+```text
+$ git init demo
+$ cd demo
+$ git branch -m main
+$ vim README.md
+$ git add README.md
+$ git commit -m 'Add readme.'
+$ git remote add origin scm@projectsdemo.rickardlindberg.me:demo.git
+$ git push -u origin main
+Enumerating objects: 3, done.
+Counting objects: 100% (3/3), done.
+Writing objects: 100% (3/3), 239 bytes | 239.00 KiB/s, done.
+Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
+remote: Hello from projects2 pre-receive hook!
+remote: Ensuring /opt/projectsdemo/web/demo gone...
+remote: Building /opt/projectsdemo/web/index.html...
+remote: Building /opt/projectsdemo/web/demo.html...
+To projectsdemo.rickardlindberg.me:demo.git
+ * [new branch]      main -> main
+branch 'main' set up to track 'origin/main'.
+```
+
+The website updates to show that we pushed some code to the demo project:
+
+<img
+src="https://rickardlindberg.me/uploads/2025/projects2-demo-project-initial.png"
+width="600" height="167" alt="The projectsdemo website which now alos shows the
+recent events placeholder filled in with one entry.">
+
+We can make more changes as usual and push them:
+
+```text
+$ ...make changes...
+$ git push
+Enumerating objects: 5, done.
+Counting objects: 100% (5/5), done.
+Writing objects: 100% (3/3), 281 bytes | 281.00 KiB/s, done.
+Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
+remote: Hello from projects2 pre-receive hook!
+remote: Ensuring /opt/projectsdemo/web/demo gone...
+remote: Building /opt/projectsdemo/web/index.html...
+remote: Building /opt/projectsdemo/web/demo.html...
+To projectsdemo.rickardlindberg.me:demo.git
+   b81aad4..6f7b10a  main -> main
+```
+
+And the diff will appear in the event log:
+
+<img
+src="https://rickardlindberg.me/uploads/2025/projects2-demo-project-commit.png"
+width="600" height="265" alt="The projectsdemo website which now shows two
+events for the demo project where the most recent event also includes a diff.">
+
+## CI
+
+You might have noticed that the push log includes lines like these:
+
+```text
+remote: Building /opt/projectsdemo/web/index.html...
+remote: Building /opt/projectsdemo/web/demo.html...
+```
+
+When we push code, projects2, intercepts that push to update the website. This
+mechanism is also used for Continuous Integration (CI).
+
+In our repo, we can add files called `Dockerfile*.ci`. Those define Docker
+images in which the CI scripts are run. Let's add `Dockerfile.py312.ci` to our
+demo project:
+
+```docker
+FROM python:3.12
+
+CMD ["python3.12", "build.py"]
+```
+
+It says that the CI command to run is `python3.12 build.py`. Here is what
+`build.py` looks like:
+
+```python
+#!/usr/bin/env python3
+
+import json
+import os
+import sys
+
+binary_path = "binary"
+site_root = "html"
+
+with open(binary_path, "w") as f:
+    f.write("the compiled binary")
+
+os.makedirs(site_root)
+with open(os.path.join(site_root, "index.html"), "w") as f:
+    f.write("hello from demo site")
+
+with open("Dockerfile.py312.ci.files", "w") as f:
+    f.write(json.dumps({
+        "artifacts": [
+            {
+                "source": binary_path,
+                "destination": "binary",
+            },
+        ],
+        "site": site_root,
+    }))
+```
+
+It simulates building a binary which looks like this:
+
+```text
+$ cat binary
+the compiled binary
+```
+
+And it builds a project website that looks like this:
+
+```text
+$ cat html/index.html
+hello from demo site
+```
+
+It tells projects2 about these artifacts via the file
+`Dockerfile.py312.ci.files` that looks like this:
+
+```json
+{
+  "artifacts": [
+    {
+      "source": "binary",
+      "destination": "binary"
+    }
+  ],
+  "site": "html"
+}
+```
+
+When we push this change, we can see the following addition in the log:
+
+```text
+remote: Building Dockerfile.py312.ci...
+remote: Running Dockerfile.py312.ci...
+```
+
+The `Dockerfile.py312.ci.files` is parsed by projects2 and the `binary` file
+has been saved as an artifact along with the project website. The link to the
+binary is shown in the event log:
+
+<img
+src="https://rickardlindberg.me/uploads/2025/projects2-demo-project-ci.png"
+width="600" height="239" alt="The projectsdemo website which shows a link to an
+artifact in the most recent event.">
+
+And we can verify that it is correct like this:
+
+```text
+$ curl https://projectsdemo.rickardlindberg.me/artifacts/demo/binary
+the compiled binary
+```
+
+The project website is also published at `<domain>/demo`:
+
+<img
+src="https://rickardlindberg.me/uploads/2025/projects2-demo-project-website.png"
+width="600" height="161" alt="The demo project website which shows the
+placeholder text.">
+
+This CI workflow is so nice. In my opinion, it is also much better than
+Jenkins'. It implements [real
+CI](https://rickardlindberg.me/2023/04/06/what-should-a.html). We just push
+code as we normally do. If the build brakes, the code will not get pushed and
+we can try again.
+
+## Summary
+
+projects2 is now complete enough that I can start using it for my projects. For
+Timeline, we can replace all infrastructure from SourceForge and my Jenkins
+instance with projects2. Almost. We still use the mailing list from
+SourceForge. And maybe we will continue doing that. I'm not sure that
+registration free discussions and pull requests are as important to me as I
+thought. Mostly because there are not many contributors to my projects. But I
+might incorporate some kind of communication mechanism into projects2.
+
+I couldn't have implemented projects2 say 5 years ago. I wasn't as good at
+Agile development and couldn't have implemented the simplest thing that could
+possible work. I have many prior projects to thank for that. In particular [I
+did the simplest thing that could possibly work. Here's what
+happened.](https://youtu.be/BXyiqhqXT0U) and [Agile Game Development with
+Python and Pygame](https://archive.rickardlindberg.me/projects/agdpp/). I also
+couldn't have come up with this solution for CI without prior reading,
+thinking, and prototyping solutions. I think the takeaway here is that you need
+to do many projects. From each project you will learn something that you can
+incorporate into your next project. Most projects will fail, but you will learn
+something. And eventually you will have a success. I have a feeling that
+projects2 might be a success. It is successful now in the sense that I actually
+use it. Time will tell for how long.
+

2025-05-18 11:37 Rickard pushed to blog

fatal: Invalid revision range 1cbf7cdec278090ef750bc8df3b8a8197835dadd..a931599fb878ce5fd6e6182d80420bd8e388e83b

2025-05-18 11:37 Rickard pushed to blog

fatal: Invalid revision range 1cbf7cdec278090ef750bc8df3b8a8197835dadd..a4fa1aeefbfebecd335abf432252c43317ed845d

2025-05-18 11:35 Rickard pushed to blog

fatal: Invalid revision range 1cbf7cdec278090ef750bc8df3b8a8197835dadd..9cd049ff0334f219c2ea0e649a4d023a46fec9be

2025-05-18 11:35 Rickard pushed to blog

fatal: Invalid revision range 1cbf7cdec278090ef750bc8df3b8a8197835dadd..6d5f186653804ee9235127ce9565c45901d4908d

2025-05-18 11:21 Rickard pushed to blog

commit 1cbf7cdec278090ef750bc8df3b8a8197835dadd
Author: Rickard Lindberg <rickard@rickardlindberg.me>
Date:   Sun May 18 11:21:13 2025 +0200

    Better post titles.

diff --git a/blog.py b/blog.py
index 62f384e..0e7f617 100755
--- a/blog.py
+++ b/blog.py
@@ -65,7 +65,7 @@ class Index:
                 ul.inner(
                     Tag("li").inner(
                         Tag("a", href=html_path).inner(
-                            post.html_path()
+                            post.link_title()
                         )
                     )
                 )
@@ -150,6 +150,8 @@ class Post:
                     self.date = Date.parse(value.strip())
                 elif name == "tags":
                     self.tags = [tag.strip() for tag in value.strip().split(",")]
+                elif name == "title":
+                    self.title = value.strip()
 
     def html_path(self, start="."):
         return os.path.relpath(
@@ -175,9 +177,15 @@ class Post:
     def html_name(self):
         return os.path.basename(os.path.dirname(self.path)) + ".html"
 
+    def link_title(self):
+        if self.title:
+            return self.title
+        else:
+            return self.date.serialize()
+
     def html_content(self):
         lines = []
-        lines.append(Tag("h1").inner(self.date.serialize()))
+        lines.append(Tag("h1").inner(self.link_title()))
         y, m, d = self.date.ymd_list()
         lines.append(Tag("a", href="../../..").inner("Home"))
         lines.append(" / ")

2025-05-18 11:18 Rickard pushed to blog

commit a97268dc096c0baaf2b203ae1c779dbda2c46ea7
Author: Rickard Lindberg <rickard@rickardlindberg.me>
Date:   Sun May 18 11:17:55 2025 +0200

    Import post skeletons from Micro.blog.

diff --git a/blog.py b/blog.py
index 74fbe26..62f384e 100755
--- a/blog.py
+++ b/blog.py
@@ -91,7 +91,7 @@ class Posts:
                 title=title,
                 posts=sorted(
                     posts,
-                    key=lambda post: post.date,
+                    key=lambda post: post.date.date,
                     reverse=True,
                 ),
             )
diff --git a/posts/2011/09/28/testing-configuration/post.md b/posts/2011/09/28/testing-configuration/post.md
new file mode 100644
index 0000000..e491e98
--- /dev/null
+++ b/posts/2011/09/28/testing-configuration/post.md
@@ -0,0 +1,5 @@
+---
+date: 2011-09-28 02:00:00
+title: Testing configuration
+tags: rop
+---
diff --git a/posts/2011/10/10/learning-haskell/post.md b/posts/2011/10/10/learning-haskell/post.md
new file mode 100644
index 0000000..de5cba9
--- /dev/null
+++ b/posts/2011/10/10/learning-haskell/post.md
@@ -0,0 +1,5 @@
+---
+date: 2011-10-10 02:00:00
+title: Learning Haskell
+tags: rop
+---
diff --git a/posts/2011/11/02/does-tdd-have/post.md b/posts/2011/11/02/does-tdd-have/post.md
new file mode 100644
index 0000000..93425d9
--- /dev/null
+++ b/posts/2011/11/02/does-tdd-have/post.md
@@ -0,0 +1,5 @@
+---
+date: 2011-11-02 02:00:00
+title: Does TDD have less advantage in Haskell?
+tags: rop
+---
diff --git a/posts/2012/01/11/introducing-a-series/post.md b/posts/2012/01/11/introducing-a-series/post.md
new file mode 100644
index 0000000..d2e57fe
--- /dev/null
+++ b/posts/2012/01/11/introducing-a-series/post.md
@@ -0,0 +1,5 @@
+---
+date: 2012-01-11 02:00:00
+title: Introducing a series about the development of an application
+tags: rop
+---
diff --git a/posts/2012/01/23/organizing-information-on/post.md b/posts/2012/01/23/organizing-information-on/post.md
new file mode 100644
index 0000000..50bd9b1
--- /dev/null
+++ b/posts/2012/01/23/organizing-information-on/post.md
@@ -0,0 +1,5 @@
+---
+date: 2012-01-23 02:00:00
+title: Organizing information on a wiki
+tags: rop
+---
diff --git a/posts/2012/02/05/writing-a-real/post.md b/posts/2012/02/05/writing-a-real/post.md
new file mode 100644
index 0000000..28d5d4a
--- /dev/null
+++ b/posts/2012/02/05/writing-a-real/post.md
@@ -0,0 +1,5 @@
+---
+date: 2012-02-05 02:00:00
+title: Writing a real application in Haskell
+tags: rop
+---
diff --git a/posts/2012/02/11/hello-world-in/post.md b/posts/2012/02/11/hello-world-in/post.md
new file mode 100644
index 0000000..18c3bc4
--- /dev/null
+++ b/posts/2012/02/11/hello-world-in/post.md
@@ -0,0 +1,5 @@
+---
+date: 2012-02-11 02:00:00
+title: Hello world in Haskell and GTK
+tags: rop
+---
diff --git a/posts/2012/02/25/setup-and-teardown/post.md b/posts/2012/02/25/setup-and-teardown/post.md
new file mode 100644
index 0000000..b2c82e4
--- /dev/null
+++ b/posts/2012/02/25/setup-and-teardown/post.md
@@ -0,0 +1,5 @@
+---
+date: 2012-02-25 02:00:00
+title: Setup and teardown in HUnit
+tags: rop
+---
diff --git a/posts/2012/03/03/closing-the-feedback/post.md b/posts/2012/03/03/closing-the-feedback/post.md
new file mode 100644
index 0000000..883962d
--- /dev/null
+++ b/posts/2012/03/03/closing-the-feedback/post.md
@@ -0,0 +1,5 @@
+---
+date: 2012-03-03 02:00:00
+title: Closing the feedback loop
+tags: rop
+---
diff --git a/posts/2012/06/17/a-beautiful-brainfuck/post.md b/posts/2012/06/17/a-beautiful-brainfuck/post.md
new file mode 100644
index 0000000..a2cc0bf
--- /dev/null
+++ b/posts/2012/06/17/a-beautiful-brainfuck/post.md
@@ -0,0 +1,5 @@
+---
+date: 2012-06-17 02:00:00
+title: A beautiful Brainfuck implementation
+tags: rop
+---
diff --git a/posts/2012/06/23/data-structures-in/post.md b/posts/2012/06/23/data-structures-in/post.md
new file mode 100644
index 0000000..2bbe790
--- /dev/null
+++ b/posts/2012/06/23/data-structures-in/post.md
@@ -0,0 +1,5 @@
+---
+date: 2012-06-23 02:00:00
+title: Data structures in OOP
+tags: rop
+---
diff --git a/posts/2012/07/11/a-refactoring-story/post.md b/posts/2012/07/11/a-refactoring-story/post.md
new file mode 100644
index 0000000..fb7ba98
--- /dev/null
+++ b/posts/2012/07/11/a-refactoring-story/post.md
@@ -0,0 +1,5 @@
+---
+date: 2012-07-11 02:00:00
+title: A refactoring story
+tags: rop
+---
diff --git a/posts/2012/07/22/good-bad-programmer/post.md b/posts/2012/07/22/good-bad-programmer/post.md
new file mode 100644
index 0000000..b4f6b6f
--- /dev/null
+++ b/posts/2012/07/22/good-bad-programmer/post.md
@@ -0,0 +1,5 @@
+---
+date: 2012-07-22 02:00:00
+title: Good bad programmer
+tags: rop
+---
diff --git a/posts/2012/08/30/learn-how-to/post.md b/posts/2012/08/30/learn-how-to/post.md
new file mode 100644
index 0000000..d0d5949
--- /dev/null
+++ b/posts/2012/08/30/learn-how-to/post.md
@@ -0,0 +1,5 @@
+---
+date: 2012-08-30 02:00:00
+title: Learn how to implement languages
+tags: rop
+---
diff --git a/posts/2012/09/08/how-to-organize/post.md b/posts/2012/09/08/how-to-organize/post.md
new file mode 100644
index 0000000..4d18de7
--- /dev/null
+++ b/posts/2012/09/08/how-to-organize/post.md
@@ -0,0 +1,5 @@
+---
+date: 2012-09-08 02:00:00
+title: How to organize your tests?
+tags: rop
+---
diff --git a/posts/2013/02/24/related-things-are/post.md b/posts/2013/02/24/related-things-are/post.md
new file mode 100644
index 0000000..f4e12a6
--- /dev/null
+++ b/posts/2013/02/24/related-things-are/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-02-24 02:00:00
+title: Related things are not kept together
+tags: favourite, rop
+---
diff --git a/posts/2013/06/12/refactor-with-higher/post.md b/posts/2013/06/12/refactor-with-higher/post.md
new file mode 100644
index 0000000..6197cfc
--- /dev/null
+++ b/posts/2013/06/12/refactor-with-higher/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-12 02:00:00
+title: Refactor with higher confidence
+tags: totd1
+---
diff --git a/posts/2013/06/13/boy-scout-habit/post.md b/posts/2013/06/13/boy-scout-habit/post.md
new file mode 100644
index 0000000..d8dcb07
--- /dev/null
+++ b/posts/2013/06/13/boy-scout-habit/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-13 02:00:00
+title: Boy scout habit
+tags: totd1
+---
diff --git a/posts/2013/06/14/what-tests-to/post.md b/posts/2013/06/14/what-tests-to/post.md
new file mode 100644
index 0000000..663ad3c
--- /dev/null
+++ b/posts/2013/06/14/what-tests-to/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-14 02:00:00
+title: What tests to keep?
+tags: totd1
+---
diff --git a/posts/2013/06/15/confidence-in-changing/post.md b/posts/2013/06/15/confidence-in-changing/post.md
new file mode 100644
index 0000000..625cf7a
--- /dev/null
+++ b/posts/2013/06/15/confidence-in-changing/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-15 02:00:00
+title: Confidence in changing code
+tags: totd1
+---
diff --git a/posts/2013/06/16/size-of-code/post.md b/posts/2013/06/16/size-of-code/post.md
new file mode 100644
index 0000000..f5fe457
--- /dev/null
+++ b/posts/2013/06/16/size-of-code/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-16 02:00:00
+title: Size of code
+tags: totd1
+---
diff --git a/posts/2013/06/17/test-coverage/post.md b/posts/2013/06/17/test-coverage/post.md
new file mode 100644
index 0000000..72b65f1
--- /dev/null
+++ b/posts/2013/06/17/test-coverage/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-17 02:00:00
+title: Test coverage
+tags: totd1
+---
diff --git a/posts/2013/06/18/maintainable-tests/post.md b/posts/2013/06/18/maintainable-tests/post.md
new file mode 100644
index 0000000..f7d1762
--- /dev/null
+++ b/posts/2013/06/18/maintainable-tests/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-18 02:00:00
+title: Maintainable tests
+tags: totd1
+---
diff --git a/posts/2013/06/19/duplicated-code/post.md b/posts/2013/06/19/duplicated-code/post.md
new file mode 100644
index 0000000..690d8bb
--- /dev/null
+++ b/posts/2013/06/19/duplicated-code/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-19 02:00:00
+title: Duplicated code
+tags: totd1
+---
diff --git a/posts/2013/06/20/using-tests-for/post.md b/posts/2013/06/20/using-tests-for/post.md
new file mode 100644
index 0000000..4ab8012
--- /dev/null
+++ b/posts/2013/06/20/using-tests-for/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-20 02:00:00
+title: Using tests for feedback
+tags: totd1
+---
diff --git a/posts/2013/06/21/bug-free-code/post.md b/posts/2013/06/21/bug-free-code/post.md
new file mode 100644
index 0000000..172f67c
--- /dev/null
+++ b/posts/2013/06/21/bug-free-code/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-21 02:00:00
+title: Bug free code
+tags: totd1
+---
diff --git a/posts/2013/06/22/features-and-bugs/post.md b/posts/2013/06/22/features-and-bugs/post.md
new file mode 100644
index 0000000..bb3a427
--- /dev/null
+++ b/posts/2013/06/22/features-and-bugs/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-22 02:00:00
+title: Features and bugs
+tags: totd1
+---
diff --git a/posts/2013/06/23/documenting-projects/post.md b/posts/2013/06/23/documenting-projects/post.md
new file mode 100644
index 0000000..c70d030
--- /dev/null
+++ b/posts/2013/06/23/documenting-projects/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-23 02:00:00
+title: Documenting projects
+tags: totd1
+---
diff --git a/posts/2013/06/24/resistance-to-learning/post.md b/posts/2013/06/24/resistance-to-learning/post.md
new file mode 100644
index 0000000..c513e76
--- /dev/null
+++ b/posts/2013/06/24/resistance-to-learning/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-24 02:00:00
+title: Resistance to learning
+tags: totd1
+---
diff --git a/posts/2013/06/25/smallest-possible-thing/post.md b/posts/2013/06/25/smallest-possible-thing/post.md
new file mode 100644
index 0000000..09754d4
--- /dev/null
+++ b/posts/2013/06/25/smallest-possible-thing/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-25 02:00:00
+title: Smallest possible thing
+tags: totd1
+---
diff --git a/posts/2013/06/26/small-steps/post.md b/posts/2013/06/26/small-steps/post.md
new file mode 100644
index 0000000..d608df7
--- /dev/null
+++ b/posts/2013/06/26/small-steps/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-26 02:00:00
+title: Small steps
+tags: totd1
+---
diff --git a/posts/2013/06/27/constant-progress/post.md b/posts/2013/06/27/constant-progress/post.md
new file mode 100644
index 0000000..8693edf
--- /dev/null
+++ b/posts/2013/06/27/constant-progress/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-27 02:00:00
+title: Constant progress
+tags: totd1
+---
diff --git a/posts/2013/06/28/atomic-operations/post.md b/posts/2013/06/28/atomic-operations/post.md
new file mode 100644
index 0000000..72b30d2
--- /dev/null
+++ b/posts/2013/06/28/atomic-operations/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-28 02:00:00
+title: Atomic operations
+tags: totd1
+---
diff --git a/posts/2013/06/29/one-thing-per/post.md b/posts/2013/06/29/one-thing-per/post.md
new file mode 100644
index 0000000..0f689a2
--- /dev/null
+++ b/posts/2013/06/29/one-thing-per/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-29 02:00:00
+title: One thing per commit
+tags: totd1
+---
diff --git a/posts/2013/06/30/formatting-code/post.md b/posts/2013/06/30/formatting-code/post.md
new file mode 100644
index 0000000..d7bebd6
--- /dev/null
+++ b/posts/2013/06/30/formatting-code/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-06-30 02:00:00
+title: Formatting code
+tags: totd1
+---
diff --git a/posts/2013/07/01/learning-about-a/post.md b/posts/2013/07/01/learning-about-a/post.md
new file mode 100644
index 0000000..7ab2a63
--- /dev/null
+++ b/posts/2013/07/01/learning-about-a/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-07-01 02:00:00
+title: Learning about a problem
+tags: totd1
+---
diff --git a/posts/2013/07/02/cohesion-an-naming/post.md b/posts/2013/07/02/cohesion-an-naming/post.md
new file mode 100644
index 0000000..a5c5a78
--- /dev/null
+++ b/posts/2013/07/02/cohesion-an-naming/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-07-02 02:00:00
+title: Cohesion an naming
+tags: totd1
+---
diff --git a/posts/2013/07/03/visualizing-hierarchy-and/post.md b/posts/2013/07/03/visualizing-hierarchy-and/post.md
new file mode 100644
index 0000000..ad848f3
--- /dev/null
+++ b/posts/2013/07/03/visualizing-hierarchy-and/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-07-03 02:00:00
+title: Visualizing hierarchy and grouping
+tags: totd1
+---
diff --git a/posts/2013/07/04/mindmap-tasks/post.md b/posts/2013/07/04/mindmap-tasks/post.md
new file mode 100644
index 0000000..bf81a13
--- /dev/null
+++ b/posts/2013/07/04/mindmap-tasks/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-07-04 02:00:00
+title: Mindmap tasks
+tags: totd1
+---
diff --git a/posts/2013/07/05/refactoring-step-in/post.md b/posts/2013/07/05/refactoring-step-in/post.md
new file mode 100644
index 0000000..3aaed00
--- /dev/null
+++ b/posts/2013/07/05/refactoring-step-in/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-07-05 02:00:00
+title: Refactoring step in TDD
+tags: totd1
+---
diff --git a/posts/2013/09/30/latency-free-overdubbing/post.md b/posts/2013/09/30/latency-free-overdubbing/post.md
new file mode 100644
index 0000000..2b92083
--- /dev/null
+++ b/posts/2013/09/30/latency-free-overdubbing/post.md
@@ -0,0 +1,5 @@
+---
+date: 2013-09-30 02:00:00
+title: Latency free overdubbing in Ardour
+tags: 
+---
diff --git a/posts/2014/05/12/software-writer/post.md b/posts/2014/05/12/software-writer/post.md
new file mode 100644
index 0000000..504168c
--- /dev/null
+++ b/posts/2014/05/12/software-writer/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-05-12 02:00:00
+title: Software writer
+tags: totd2
+---
diff --git a/posts/2014/05/13/powerful-software/post.md b/posts/2014/05/13/powerful-software/post.md
new file mode 100644
index 0000000..58ce029
--- /dev/null
+++ b/posts/2014/05/13/powerful-software/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-05-13 02:00:00
+title: Powerful software
+tags: totd2
+---
diff --git a/posts/2014/05/14/exploring-with-doctest/post.md b/posts/2014/05/14/exploring-with-doctest/post.md
new file mode 100644
index 0000000..b3b6526
--- /dev/null
+++ b/posts/2014/05/14/exploring-with-doctest/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-05-14 02:00:00
+title: Exploring with doctest
+tags: totd2
+---
diff --git a/posts/2014/05/15/clarity-is-hard/post.md b/posts/2014/05/15/clarity-is-hard/post.md
new file mode 100644
index 0000000..9089d51
--- /dev/null
+++ b/posts/2014/05/15/clarity-is-hard/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-05-15 02:00:00
+title: Clarity is hard
+tags: totd2
+---
diff --git a/posts/2014/05/18/visualizing-program-flow/post.md b/posts/2014/05/18/visualizing-program-flow/post.md
new file mode 100644
index 0000000..43f5c33
--- /dev/null
+++ b/posts/2014/05/18/visualizing-program-flow/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-05-18 02:00:00
+title: Visualizing program flow
+tags: totd2
+---
diff --git a/posts/2014/05/19/testability-good-design/post.md b/posts/2014/05/19/testability-good-design/post.md
new file mode 100644
index 0000000..238b715
--- /dev/null
+++ b/posts/2014/05/19/testability-good-design/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-05-19 02:00:00
+title: Testability == good design?
+tags: totd2
+---
diff --git a/posts/2014/05/20/state/post.md b/posts/2014/05/20/state/post.md
new file mode 100644
index 0000000..5873cb6
--- /dev/null
+++ b/posts/2014/05/20/state/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-05-20 02:00:00
+title: State
+tags: totd2
+---
diff --git a/posts/2014/05/21/naming-intermediate-steps/post.md b/posts/2014/05/21/naming-intermediate-steps/post.md
new file mode 100644
index 0000000..6ffc740
--- /dev/null
+++ b/posts/2014/05/21/naming-intermediate-steps/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-05-21 02:00:00
+title: Naming intermediate steps
+tags: totd2
+---
diff --git a/posts/2014/05/22/erlang/post.md b/posts/2014/05/22/erlang/post.md
new file mode 100644
index 0000000..b835b8e
--- /dev/null
+++ b/posts/2014/05/22/erlang/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-05-22 02:00:00
+title: Erlang
+tags: totd2
+---
diff --git a/posts/2014/05/23/editing-code-as/post.md b/posts/2014/05/23/editing-code-as/post.md
new file mode 100644
index 0000000..e431bc9
--- /dev/null
+++ b/posts/2014/05/23/editing-code-as/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-05-23 02:00:00
+title: Editing code as text
+tags: totd2
+---
diff --git a/posts/2014/05/26/functional-core/post.md b/posts/2014/05/26/functional-core/post.md
new file mode 100644
index 0000000..8b65caa
--- /dev/null
+++ b/posts/2014/05/26/functional-core/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-05-26 02:00:00
+title: Functional core
+tags: totd2
+---
diff --git a/posts/2014/05/27/discoverable-tests/post.md b/posts/2014/05/27/discoverable-tests/post.md
new file mode 100644
index 0000000..d45a7f2
--- /dev/null
+++ b/posts/2014/05/27/discoverable-tests/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-05-27 02:00:00
+title: Discoverable tests
+tags: totd2
+---
diff --git a/posts/2014/05/28/refactor-before/post.md b/posts/2014/05/28/refactor-before/post.md
new file mode 100644
index 0000000..5c4daed
--- /dev/null
+++ b/posts/2014/05/28/refactor-before/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-05-28 02:00:00
+title: Refactor before
+tags: totd2
+---
diff --git a/posts/2014/06/02/small-increments/post.md b/posts/2014/06/02/small-increments/post.md
new file mode 100644
index 0000000..6aec0b9
--- /dev/null
+++ b/posts/2014/06/02/small-increments/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-06-02 02:00:00
+title: Small increments
+tags: totd2
+---
diff --git a/posts/2014/06/03/testing-as-a/post.md b/posts/2014/06/03/testing-as-a/post.md
new file mode 100644
index 0000000..36c3a3c
--- /dev/null
+++ b/posts/2014/06/03/testing-as-a/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-06-03 02:00:00
+title: Testing as a minimum
+tags: totd2
+---
diff --git a/posts/2014/06/04/recognizing-progress/post.md b/posts/2014/06/04/recognizing-progress/post.md
new file mode 100644
index 0000000..688bd1b
--- /dev/null
+++ b/posts/2014/06/04/recognizing-progress/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-06-04 02:00:00
+title: Recognizing progress
+tags: totd2
+---
diff --git a/posts/2014/06/05/accumulating-cruft/post.md b/posts/2014/06/05/accumulating-cruft/post.md
new file mode 100644
index 0000000..8de2368
--- /dev/null
+++ b/posts/2014/06/05/accumulating-cruft/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-06-05 02:00:00
+title: Accumulating cruft
+tags: totd2
+---
diff --git a/posts/2014/09/17/xmodmap-on-fedora/post.md b/posts/2014/09/17/xmodmap-on-fedora/post.md
new file mode 100644
index 0000000..fcf325f
--- /dev/null
+++ b/posts/2014/09/17/xmodmap-on-fedora/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-09-17 02:00:00
+title: Xmodmap on Fedora
+tags: 
+---
diff --git a/posts/2014/11/03/the-danger-with/post.md b/posts/2014/11/03/the-danger-with/post.md
new file mode 100644
index 0000000..ae680d6
--- /dev/null
+++ b/posts/2014/11/03/the-danger-with/post.md
@@ -0,0 +1,5 @@
+---
+date: 2014-11-03 02:00:00
+title: The danger with implicit if statements in Python
+tags: python
+---
diff --git a/posts/2015/03/28/search-and-replace/post.md b/posts/2015/03/28/search-and-replace/post.md
new file mode 100644
index 0000000..ccc989c
--- /dev/null
+++ b/posts/2015/03/28/search-and-replace/post.md
@@ -0,0 +1,5 @@
+---
+date: 2015-03-28 02:00:00
+title: Search and replace in Vim
+tags: favourite, vim
+---
diff --git a/posts/2015/06/21/analysis-of-timeline/post.md b/posts/2015/06/21/analysis-of-timeline/post.md
new file mode 100644
index 0000000..1353e36
--- /dev/null
+++ b/posts/2015/06/21/analysis-of-timeline/post.md
@@ -0,0 +1,5 @@
+---
+date: 2015-06-21 02:00:00
+title: Analysis of Timeline emails
+tags: timeline
+---
diff --git a/posts/2015/06/27/precision-of-datetime/post.md b/posts/2015/06/27/precision-of-datetime/post.md
new file mode 100644
index 0000000..7ce2bb8
--- /dev/null
+++ b/posts/2015/06/27/precision-of-datetime/post.md
@@ -0,0 +1,5 @@
+---
+date: 2015-06-27 02:00:00
+title: Precision of datetime in Python
+tags: python
+---
diff --git a/posts/2015/07/01/timeline-release-statistics/post.md b/posts/2015/07/01/timeline-release-statistics/post.md
new file mode 100644
index 0000000..cecd6b7
--- /dev/null
+++ b/posts/2015/07/01/timeline-release-statistics/post.md
@@ -0,0 +1,5 @@
+---
+date: 2015-07-01 02:00:00
+title: Timeline release statistics
+tags: timeline
+---
diff --git a/posts/2015/10/23/problem-statements-in/post.md b/posts/2015/10/23/problem-statements-in/post.md
new file mode 100644
index 0000000..c2ef2a1
--- /dev/null
+++ b/posts/2015/10/23/problem-statements-in/post.md
@@ -0,0 +1,5 @@
+---
+date: 2015-10-23 02:00:00
+title: Problem statements in commit messages
+tags: 
+---
diff --git a/posts/2016/09/20/tell-dont-ask/post.md b/posts/2016/09/20/tell-dont-ask/post.md
new file mode 100644
index 0000000..0fc0cbf
--- /dev/null
+++ b/posts/2016/09/20/tell-dont-ask/post.md
@@ -0,0 +1,5 @@
+---
+date: 2016-09-20 02:00:00
+title: Tell, don't ask example
+tags: 
+---
diff --git a/posts/2017/03/11/bitten-by-python/post.md b/posts/2017/03/11/bitten-by-python/post.md
new file mode 100644
index 0000000..9525bed
--- /dev/null
+++ b/posts/2017/03/11/bitten-by-python/post.md
@@ -0,0 +1,5 @@
+---
+date: 2017-03-11 02:00:00
+title: Bitten by Python generators
+tags: python
+---
diff --git a/posts/2017/05/19/evolution-of-recalling/post.md b/posts/2017/05/19/evolution-of-recalling/post.md
new file mode 100644
index 0000000..7ecb3f4
--- /dev/null
+++ b/posts/2017/05/19/evolution-of-recalling/post.md
@@ -0,0 +1,5 @@
+---
+date: 2017-05-19 02:00:00
+title: Evolution of recalling Bash history
+tags: favourite, rlselect, Bash
+---
diff --git a/posts/2017/11/06/a-new-home/post.md b/posts/2017/11/06/a-new-home/post.md
new file mode 100644
index 0000000..7749c29
--- /dev/null
+++ b/posts/2017/11/06/a-new-home/post.md
@@ -0,0 +1,5 @@
+---
+date: 2017-11-06 02:00:00
+title: A new home for Timeline
+tags: timeline
+---
diff --git a/posts/2018/12/02/a-meta-approach/post.md b/posts/2018/12/02/a-meta-approach/post.md
new file mode 100644
index 0000000..46b2660
--- /dev/null
+++ b/posts/2018/12/02/a-meta-approach/post.md
@@ -0,0 +1,5 @@
+---
+date: 2018-12-02 02:00:00
+title: A meta approach to implementing programming languages
+tags: favourite, rlmeta
+---
diff --git a/posts/2019/05/28/modifying-the-rlmeta/post.md b/posts/2019/05/28/modifying-the-rlmeta/post.md
new file mode 100644
index 0000000..26f1360
--- /dev/null
+++ b/posts/2019/05/28/modifying-the-rlmeta/post.md
@@ -0,0 +1,5 @@
+---
+date: 2019-05-28 02:00:00
+title: Modifying the RLMeta metacompiler
+tags: rlmeta
+---
diff --git a/posts/2019/06/27/draft-parsing-offside/post.md b/posts/2019/06/27/draft-parsing-offside/post.md
new file mode 100644
index 0000000..431ca07
--- /dev/null
+++ b/posts/2019/06/27/draft-parsing-offside/post.md
@@ -0,0 +1,5 @@
+---
+date: 2019-06-27 02:00:00
+title: DRAFT: Parsing off-side rule languages with RLMeta
+tags: rlmeta, draft
+---
diff --git a/posts/2019/06/28/optimizing-rlmeta/post.md b/posts/2019/06/28/optimizing-rlmeta/post.md
new file mode 100644
index 0000000..5acaaee
--- /dev/null
+++ b/posts/2019/06/28/optimizing-rlmeta/post.md
@@ -0,0 +1,5 @@
+---
+date: 2019-06-28 02:00:00
+title: Optimizing RLMeta
+tags: rlmeta
+---
diff --git a/posts/2019/06/30/newsletter-june/post.md b/posts/2019/06/30/newsletter-june/post.md
new file mode 100644
index 0000000..94b7fae
--- /dev/null
+++ b/posts/2019/06/30/newsletter-june/post.md
@@ -0,0 +1,5 @@
+---
+date: 2019-06-30 02:00:00
+title: Newsletter June 2019
+tags: newsletter
+---
diff --git a/posts/2019/07/31/newsletter-july/post.md b/posts/2019/07/31/newsletter-july/post.md
new file mode 100644
index 0000000..11250df
--- /dev/null
+++ b/posts/2019/07/31/newsletter-july/post.md
@@ -0,0 +1,5 @@
+---
+date: 2019-07-31 02:00:00
+title: Newsletter July 2019
+tags: newsletter
+---
diff --git a/posts/2019/08/06/rlmeta-a-vm/post.md b/posts/2019/08/06/rlmeta-a-vm/post.md
new file mode 100644
index 0000000..097e0f2
--- /dev/null
+++ b/posts/2019/08/06/rlmeta-a-vm/post.md
@@ -0,0 +1,5 @@
+---
+date: 2019-08-06 02:00:00
+title: RLMeta: a VM based approach
+tags: rlmeta
+---
diff --git a/posts/2019/08/31/doctest-fails-in/post.md b/posts/2019/08/31/doctest-fails-in/post.md
new file mode 100644
index 0000000..a95d0d5
--- /dev/null
+++ b/posts/2019/08/31/doctest-fails-in/post.md
@@ -0,0 +1,5 @@
+---
+date: 2019-08-31 03:00:00
+title: Doctest fails in Python 3 with wxPython
+tags: timeline, python
+---
diff --git a/posts/2019/08/31/newsletter-august/post.md b/posts/2019/08/31/newsletter-august/post.md
new file mode 100644
index 0000000..a5eb1fa
--- /dev/null
+++ b/posts/2019/08/31/newsletter-august/post.md
@@ -0,0 +1,5 @@
+---
+date: 2019-08-31 02:00:00
+title: Newsletter August 2019
+tags: newsletter
+---
diff --git a/posts/2019/09/07/parsing-left-associative/post.md b/posts/2019/09/07/parsing-left-associative/post.md
new file mode 100644
index 0000000..22bb121
--- /dev/null
+++ b/posts/2019/09/07/parsing-left-associative/post.md
@@ -0,0 +1,5 @@
+---
+date: 2019-09-07 02:00:00
+title: Parsing left associative operators using RLMeta
+tags: rlmeta
+---
diff --git a/posts/2019/09/25/alan-kay-notes/post.md b/posts/2019/09/25/alan-kay-notes/post.md
new file mode 100644
index 0000000..fb485cc
--- /dev/null
+++ b/posts/2019/09/25/alan-kay-notes/post.md
@@ -0,0 +1,5 @@
+---
+date: 2019-09-25 02:00:00
+title: Alan Kay notes
+tags: alankay, favourite
+---
diff --git a/posts/2019/09/28/segfault-with-custom/post.md b/posts/2019/09/28/segfault-with-custom/post.md
new file mode 100644
index 0000000..b984985
--- /dev/null
+++ b/posts/2019/09/28/segfault-with-custom/post.md
@@ -0,0 +1,5 @@
+---
+date: 2019-09-28 02:00:00
+title: Segfault with custom events in wxPython
+tags: timeline, python
+---
diff --git a/posts/2019/10/01/newsletter-september/post.md b/posts/2019/10/01/newsletter-september/post.md
new file mode 100644
index 0000000..8d5c240
--- /dev/null
+++ b/posts/2019/10/01/newsletter-september/post.md
@@ -0,0 +1,5 @@
+---
+date: 2019-10-01 02:00:00
+title: Newsletter September 2019
+tags: newsletter
+---
diff --git a/posts/2019/11/02/newsletter-october/post.md b/posts/2019/11/02/newsletter-october/post.md
new file mode 100644
index 0000000..6b723a0
--- /dev/null
+++ b/posts/2019/11/02/newsletter-october/post.md
@@ -0,0 +1,5 @@
+---
+date: 2019-11-02 02:00:00
+title: Newsletter October 2019
+tags: newsletter
+---
diff --git a/posts/2019/12/03/newsletter-november/post.md b/posts/2019/12/03/newsletter-november/post.md
new file mode 100644
index 0000000..ac38dcc
--- /dev/null
+++ b/posts/2019/12/03/newsletter-november/post.md
@@ -0,0 +1,5 @@
+---
+date: 2019-12-03 02:00:00
+title: Newsletter November 2019
+tags: newsletter
+---
diff --git a/posts/2020/01/05/newsletter-december/post.md b/posts/2020/01/05/newsletter-december/post.md
new file mode 100644
index 0000000..ecd8bef
--- /dev/null
+++ b/posts/2020/01/05/newsletter-december/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-01-05 02:00:00
+title: Newsletter December 2019
+tags: newsletter
+---
diff --git a/posts/2020/01/11/memoizing-failures-in/post.md b/posts/2020/01/11/memoizing-failures-in/post.md
new file mode 100644
index 0000000..030f229
--- /dev/null
+++ b/posts/2020/01/11/memoizing-failures-in/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-01-11 02:00:00
+title: Memoizing failures in RLMeta
+tags: rlmeta
+---
diff --git a/posts/2020/02/03/newsletter-january/post.md b/posts/2020/02/03/newsletter-january/post.md
new file mode 100644
index 0000000..82c6a9d
--- /dev/null
+++ b/posts/2020/02/03/newsletter-january/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-02-03 02:00:00
+title: Newsletter January 2020
+tags: newsletter
+---
diff --git a/posts/2020/03/02/newsletter-february/post.md b/posts/2020/03/02/newsletter-february/post.md
new file mode 100644
index 0000000..6ff4dd1
--- /dev/null
+++ b/posts/2020/03/02/newsletter-february/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-03-02 02:00:00
+title: Newsletter February 2020
+tags: newsletter
+---
diff --git a/posts/2020/04/02/newsletter-march/post.md b/posts/2020/04/02/newsletter-march/post.md
new file mode 100644
index 0000000..1f5bf8c
--- /dev/null
+++ b/posts/2020/04/02/newsletter-march/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-04-02 02:00:00
+title: Newsletter March 2020
+tags: newsletter
+---
diff --git a/posts/2020/04/03/layoutupdate-problem-in/post.md b/posts/2020/04/03/layoutupdate-problem-in/post.md
new file mode 100644
index 0000000..2c9dbf1
--- /dev/null
+++ b/posts/2020/04/03/layoutupdate-problem-in/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-04-03 02:00:00
+title: Layout/Update problem in wxPython
+tags: wxpython, rliterate
+---
diff --git a/posts/2020/04/10/draft-porting-rlmeta/post.md b/posts/2020/04/10/draft-porting-rlmeta/post.md
new file mode 100644
index 0000000..6741aee
--- /dev/null
+++ b/posts/2020/04/10/draft-porting-rlmeta/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-04-10 02:00:00
+title: DRAFT: Porting RLMeta to C++
+tags: rlmeta, draft
+---
diff --git a/posts/2020/05/04/newsletter-april/post.md b/posts/2020/05/04/newsletter-april/post.md
new file mode 100644
index 0000000..3350011
--- /dev/null
+++ b/posts/2020/05/04/newsletter-april/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-05-04 02:00:00
+title: Newsletter April 2020
+tags: newsletter
+---
diff --git a/posts/2020/05/20/draft-compiling-expressions/post.md b/posts/2020/05/20/draft-compiling-expressions/post.md
new file mode 100644
index 0000000..91c0437
--- /dev/null
+++ b/posts/2020/05/20/draft-compiling-expressions/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-05-20 02:00:00
+title: DRAFT: Compiling expressions to x86 machine code
+tags: rlmeta, draft
+---
diff --git a/posts/2020/05/24/creating-the-rlmeta/post.md b/posts/2020/05/24/creating-the-rlmeta/post.md
new file mode 100644
index 0000000..58ac281
--- /dev/null
+++ b/posts/2020/05/24/creating-the-rlmeta/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-05-24 02:00:00
+title: Creating the RLMeta poster
+tags: rlmeta
+---
diff --git a/posts/2020/06/13/newsletter-may/post.md b/posts/2020/06/13/newsletter-may/post.md
new file mode 100644
index 0000000..e304081
--- /dev/null
+++ b/posts/2020/06/13/newsletter-may/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-06-13 02:00:00
+title: Newsletter May 2020
+tags: newsletter
+---
diff --git a/posts/2020/07/06/newsletter-june/post.md b/posts/2020/07/06/newsletter-june/post.md
new file mode 100644
index 0000000..2ccb5a4
--- /dev/null
+++ b/posts/2020/07/06/newsletter-june/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-07-06 02:00:00
+title: Newsletter June 2020
+tags: newsletter
+---
diff --git a/posts/2020/07/27/atomic-habits-the/post.md b/posts/2020/07/27/atomic-habits-the/post.md
new file mode 100644
index 0000000..05ba0b2
--- /dev/null
+++ b/posts/2020/07/27/atomic-habits-the/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-07-27 02:00:00
+title: Atomic Habits: The Two-Minute Rule
+tags: books
+---
diff --git a/posts/2020/08/03/newsletter-july/post.md b/posts/2020/08/03/newsletter-july/post.md
new file mode 100644
index 0000000..58d68e4
--- /dev/null
+++ b/posts/2020/08/03/newsletter-july/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-08-03 02:00:00
+title: Newsletter July 2020
+tags: newsletter
+---
diff --git a/posts/2020/08/13/the-bullet-journal/post.md b/posts/2020/08/13/the-bullet-journal/post.md
new file mode 100644
index 0000000..ef2bcf9
--- /dev/null
+++ b/posts/2020/08/13/the-bullet-journal/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-08-13 02:00:00
+title: The Bullet Journal Method: Migration as Review
+tags: books
+---
diff --git a/posts/2020/09/13/newsletter-august/post.md b/posts/2020/09/13/newsletter-august/post.md
new file mode 100644
index 0000000..b82dd0d
--- /dev/null
+++ b/posts/2020/09/13/newsletter-august/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-09-13 02:00:00
+title: Newsletter August 2020
+tags: newsletter
+---
diff --git a/posts/2020/10/03/newsletter-september/post.md b/posts/2020/10/03/newsletter-september/post.md
new file mode 100644
index 0000000..cf286d1
--- /dev/null
+++ b/posts/2020/10/03/newsletter-september/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-10-03 02:00:00
+title: Newsletter September 2020
+tags: newsletter
+---
diff --git a/posts/2020/11/11/newsletter-october/post.md b/posts/2020/11/11/newsletter-october/post.md
new file mode 100644
index 0000000..b68bf20
--- /dev/null
+++ b/posts/2020/11/11/newsletter-october/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-11-11 02:00:00
+title: Newsletter October 2020
+tags: newsletter
+---
diff --git a/posts/2020/12/03/newsletter-november/post.md b/posts/2020/12/03/newsletter-november/post.md
new file mode 100644
index 0000000..c10056d
--- /dev/null
+++ b/posts/2020/12/03/newsletter-november/post.md
@@ -0,0 +1,5 @@
+---
+date: 2020-12-03 02:00:00
+title: Newsletter November 2020
+tags: newsletter
+---
diff --git a/posts/2021/01/01/newsletter-december/post.md b/posts/2021/01/01/newsletter-december/post.md
new file mode 100644
index 0000000..0eebc0f
--- /dev/null
+++ b/posts/2021/01/01/newsletter-december/post.md
@@ -0,0 +1,5 @@
+---
+date: 2021-01-01 02:00:00
+title: Newsletter December 2020
+tags: newsletter
+---
diff --git a/posts/2021/02/02/newsletter-january/post.md b/posts/2021/02/02/newsletter-january/post.md
new file mode 100644
index 0000000..997eb3c
--- /dev/null
+++ b/posts/2021/02/02/newsletter-january/post.md
@@ -0,0 +1,5 @@
+---
+date: 2021-02-02 02:00:00
+title: Newsletter January 2021
+tags: newsletter
+---
diff --git a/posts/2021/02/15/kinesis-advantage-swedish/post.md b/posts/2021/02/15/kinesis-advantage-swedish/post.md
new file mode 100644
index 0000000..8ebfa35
--- /dev/null
+++ b/posts/2021/02/15/kinesis-advantage-swedish/post.md
@@ -0,0 +1,5 @@
+---
+date: 2021-02-15 02:00:00
+title: Kinesis Advantage 2 Swedish Setup
+tags: 
+---
diff --git a/posts/2021/03/02/newsletter-february/post.md b/posts/2021/03/02/newsletter-february/post.md
new file mode 100644
index 0000000..9ad1369
--- /dev/null
+++ b/posts/2021/03/02/newsletter-february/post.md
@@ -0,0 +1,5 @@
+---
+date: 2021-03-02 02:00:00
+title: Newsletter February 2021
+tags: newsletter
+---
diff --git a/posts/2021/04/04/newsletter-march/post.md b/posts/2021/04/04/newsletter-march/post.md
new file mode 100644
index 0000000..7962ffb
--- /dev/null
+++ b/posts/2021/04/04/newsletter-march/post.md
@@ -0,0 +1,5 @@
+---
+date: 2021-04-04 02:00:00
+title: Newsletter March 2021
+tags: newsletter
+---
diff --git a/posts/2021/05/04/newsletter-april/post.md b/posts/2021/05/04/newsletter-april/post.md
new file mode 100644
index 0000000..3be5b99
--- /dev/null
+++ b/posts/2021/05/04/newsletter-april/post.md
@@ -0,0 +1,5 @@
+---
+date: 2021-05-04 02:00:00
+title: Newsletter April 2021
+tags: newsletter
+---
diff --git a/posts/2021/06/06/may-update/post.md b/posts/2021/06/06/may-update/post.md
new file mode 100644
index 0000000..b75590a
--- /dev/null
+++ b/posts/2021/06/06/may-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2021-06-06 02:00:00
+title: May 2021 Update
+tags: newsletter
+---
diff --git a/posts/2021/07/04/dogfooding-literate-programming/post.md b/posts/2021/07/04/dogfooding-literate-programming/post.md
new file mode 100644
index 0000000..9cb1abd
--- /dev/null
+++ b/posts/2021/07/04/dogfooding-literate-programming/post.md
@@ -0,0 +1,5 @@
+---
+date: 2021-07-04 02:00:00
+title: Dogfooding Literate Programming Support in Smart Notes (June 2021 Update)
+tags: rlselect, newsletter
+---
diff --git a/posts/2021/08/03/july-update/post.md b/posts/2021/08/03/july-update/post.md
new file mode 100644
index 0000000..5891b32
--- /dev/null
+++ b/posts/2021/08/03/july-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2021-08-03 02:00:00
+title: July 2021 Update
+tags: newsletter
+---
diff --git a/posts/2021/09/07/august-update/post.md b/posts/2021/09/07/august-update/post.md
new file mode 100644
index 0000000..770caee
--- /dev/null
+++ b/posts/2021/09/07/august-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2021-09-07 02:00:00
+title: August 2021 Update
+tags: newsletter
+---
diff --git a/posts/2021/09/14/what-is-programming/post.md b/posts/2021/09/14/what-is-programming/post.md
new file mode 100644
index 0000000..f98ca1c
--- /dev/null
+++ b/posts/2021/09/14/what-is-programming/post.md
@@ -0,0 +1,5 @@
+---
+date: 2021-09-14 02:00:00
+title: What Is Programming?
+tags: 
+---
diff --git a/posts/2021/10/09/september-update/post.md b/posts/2021/10/09/september-update/post.md
new file mode 100644
index 0000000..2046c27
--- /dev/null
+++ b/posts/2021/10/09/september-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2021-10-09 02:00:00
+title: September 2021 Update
+tags: newsletter
+---
diff --git a/posts/2021/11/04/october-update/post.md b/posts/2021/11/04/october-update/post.md
new file mode 100644
index 0000000..d9c28cf
--- /dev/null
+++ b/posts/2021/11/04/october-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2021-11-04 02:00:00
+title: October 2021 Update
+tags: newsletter
+---
diff --git a/posts/2021/12/02/november-update/post.md b/posts/2021/12/02/november-update/post.md
new file mode 100644
index 0000000..75a061c
--- /dev/null
+++ b/posts/2021/12/02/november-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2021-12-02 02:00:00
+title: November 2021 Update
+tags: newsletter
+---
diff --git a/posts/2022/01/04/december-update/post.md b/posts/2022/01/04/december-update/post.md
new file mode 100644
index 0000000..286fb47
--- /dev/null
+++ b/posts/2022/01/04/december-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2022-01-04 02:00:00
+title: December 2021 Update
+tags: newsletter
+---
diff --git a/posts/2022/02/04/january-update/post.md b/posts/2022/02/04/january-update/post.md
new file mode 100644
index 0000000..91bc08d
--- /dev/null
+++ b/posts/2022/02/04/january-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2022-02-04 02:00:00
+title: January 2022 Update
+tags: newsletter
+---
diff --git a/posts/2022/02/12/rlmeta-poster-the/post.md b/posts/2022/02/12/rlmeta-poster-the/post.md
new file mode 100644
index 0000000..bafca9a
--- /dev/null
+++ b/posts/2022/02/12/rlmeta-poster-the/post.md
@@ -0,0 +1,5 @@
+---
+date: 2022-02-12 02:00:00
+title: RLMeta poster 2: the poster that wasn't
+tags: rlmeta
+---
diff --git a/posts/2022/03/02/february-update/post.md b/posts/2022/03/02/february-update/post.md
new file mode 100644
index 0000000..1ddbfd6
--- /dev/null
+++ b/posts/2022/03/02/february-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2022-03-02 02:00:00
+title: February 2022 Update
+tags: newsletter
+---
diff --git a/posts/2022/04/02/march-update/post.md b/posts/2022/04/02/march-update/post.md
new file mode 100644
index 0000000..1aa58b7
--- /dev/null
+++ b/posts/2022/04/02/march-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2022-04-02 02:00:00
+title: March 2022 Update
+tags: newsletter
+---
diff --git a/posts/2022/05/01/april-update/post.md b/posts/2022/05/01/april-update/post.md
new file mode 100644
index 0000000..873231d
--- /dev/null
+++ b/posts/2022/05/01/april-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2022-05-01 02:00:00
+title: April 2022 Update
+tags: newsletter
+---
diff --git a/posts/2022/06/04/may-update/post.md b/posts/2022/06/04/may-update/post.md
new file mode 100644
index 0000000..712d91d
--- /dev/null
+++ b/posts/2022/06/04/may-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2022-06-04 02:00:00
+title: May 2022 Update
+tags: newsletter
+---
diff --git a/posts/2022/07/04/june-update/post.md b/posts/2022/07/04/june-update/post.md
new file mode 100644
index 0000000..560f54c
--- /dev/null
+++ b/posts/2022/07/04/june-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2022-07-04 02:00:00
+title: June 2022 Update
+tags: newsletter
+---
diff --git a/posts/2022/08/02/july-update/post.md b/posts/2022/08/02/july-update/post.md
new file mode 100644
index 0000000..1c3fc4c
--- /dev/null
+++ b/posts/2022/08/02/july-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2022-08-02 02:00:00
+title: July 2022 Update
+tags: newsletter
+---
diff --git a/posts/2022/09/02/how-to-write/post.md b/posts/2022/09/02/how-to-write/post.md
new file mode 100644
index 0000000..ee12187
--- /dev/null
+++ b/posts/2022/09/02/how-to-write/post.md
@@ -0,0 +1,5 @@
+---
+date: 2022-09-02 02:00:00
+title: How to write reliable socket servers that survive crashes and restarts?
+tags: 
+---
diff --git a/posts/2022/09/09/august-update/post.md b/posts/2022/09/09/august-update/post.md
new file mode 100644
index 0000000..871976e
--- /dev/null
+++ b/posts/2022/09/09/august-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2022-09-09 02:00:00
+title: August 2022 Update
+tags: newsletter
+---
diff --git a/posts/2022/10/08/september-update/post.md b/posts/2022/10/08/september-update/post.md
new file mode 100644
index 0000000..9e8453b
--- /dev/null
+++ b/posts/2022/10/08/september-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2022-10-08 02:00:00
+title: September 2022 Update
+tags: newsletter
+---
diff --git a/posts/2022/11/10/october-update/post.md b/posts/2022/11/10/october-update/post.md
new file mode 100644
index 0000000..4f5de96
--- /dev/null
+++ b/posts/2022/11/10/october-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2022-11-10 02:00:00
+title: October 2022 Update
+tags: newsletter
+---
diff --git a/posts/2022/12/02/november-update/post.md b/posts/2022/12/02/november-update/post.md
new file mode 100644
index 0000000..ec0082c
--- /dev/null
+++ b/posts/2022/12/02/november-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2022-12-02 02:00:00
+title: November 2022 Update
+tags: newsletter
+---
diff --git a/posts/2022/12/15/how-should-i/post.md b/posts/2022/12/15/how-should-i/post.md
new file mode 100644
index 0000000..64b8756
--- /dev/null
+++ b/posts/2022/12/15/how-should-i/post.md
@@ -0,0 +1,5 @@
+---
+date: 2022-12-15 02:00:00
+title: How should I evolve the design of my projectional editor?
+tags: rlproject
+---
diff --git a/posts/2023/01/09/december-update/post.md b/posts/2023/01/09/december-update/post.md
new file mode 100644
index 0000000..c77ea06
--- /dev/null
+++ b/posts/2023/01/09/december-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-01-09 02:00:00
+title: December 2022 Update
+tags: newsletter
+---
diff --git a/posts/2023/02/11/january-update/post.md b/posts/2023/02/11/january-update/post.md
new file mode 100644
index 0000000..6c0a0c5
--- /dev/null
+++ b/posts/2023/02/11/january-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-02-11 02:00:00
+title: January 2023 Update
+tags: newsletter
+---
diff --git a/posts/2023/03/05/february-update/post.md b/posts/2023/03/05/february-update/post.md
new file mode 100644
index 0000000..15033b1
--- /dev/null
+++ b/posts/2023/03/05/february-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-03-05 02:00:00
+title: February 2023 Update
+tags: newsletter
+---
diff --git a/posts/2023/04/02/march-update/post.md b/posts/2023/04/02/march-update/post.md
new file mode 100644
index 0000000..f3aa8a4
--- /dev/null
+++ b/posts/2023/04/02/march-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-04-02 02:00:00
+title: March 2023 Update
+tags: newsletter
+---
diff --git a/posts/2023/04/06/what-should-a/post.md b/posts/2023/04/06/what-should-a/post.md
new file mode 100644
index 0000000..cf5ecbd
--- /dev/null
+++ b/posts/2023/04/06/what-should-a/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-04-06 02:00:00
+title: What should a Continuous Integration (CI) server do?
+tags: agile
+---
diff --git a/posts/2023/04/09/introducing-agile-game/post.md b/posts/2023/04/09/introducing-agile-game/post.md
new file mode 100644
index 0000000..32e8ae5
--- /dev/null
+++ b/posts/2023/04/09/introducing-agile-game/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-04-09 02:00:00
+title: Introducing Agile Game Development with Python and Pygame
+tags: agdpp
+---
diff --git a/posts/2023/04/17/tdd-trick-fake/post.md b/posts/2023/04/17/tdd-trick-fake/post.md
new file mode 100644
index 0000000..cad5920
--- /dev/null
+++ b/posts/2023/04/17/tdd-trick-fake/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-04-17 02:00:00
+title: TDD trick: fake it!
+tags: tdd
+---
diff --git a/posts/2023/04/18/trying-rons-python/post.md b/posts/2023/04/18/trying-rons-python/post.md
new file mode 100644
index 0000000..4f4aa20
--- /dev/null
+++ b/posts/2023/04/18/trying-rons-python/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-04-18 02:00:00
+title: Trying Ron's Python Asteroids
+tags: python
+---
diff --git a/posts/2023/04/19/test-driving-the/post.md b/posts/2023/04/19/test-driving-the/post.md
new file mode 100644
index 0000000..e29c9c8
--- /dev/null
+++ b/posts/2023/04/19/test-driving-the/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-04-19 02:00:00
+title: Test driving the game loop
+tags: agdpp
+---
diff --git a/posts/2023/04/20/separating-pygame-completely/post.md b/posts/2023/04/20/separating-pygame-completely/post.md
new file mode 100644
index 0000000..207f828
--- /dev/null
+++ b/posts/2023/04/20/separating-pygame-completely/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-04-20 02:00:00
+title: Separating pygame completely from the rest of the game
+tags: agdpp
+---
diff --git a/posts/2023/04/24/demo-and-game/post.md b/posts/2023/04/24/demo-and-game/post.md
new file mode 100644
index 0000000..2d2c42c
--- /dev/null
+++ b/posts/2023/04/24/demo-and-game/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-04-24 02:00:00
+title: Demo and game idea
+tags: agdpp
+---
diff --git a/posts/2023/04/27/shooting-the-arrow/post.md b/posts/2023/04/27/shooting-the-arrow/post.md
new file mode 100644
index 0000000..83bb67f
--- /dev/null
+++ b/posts/2023/04/27/shooting-the-arrow/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-04-27 02:00:00
+title: Shooting the arrow
+tags: agdpp
+---
diff --git a/posts/2023/04/28/thinking-about-test/post.md b/posts/2023/04/28/thinking-about-test/post.md
new file mode 100644
index 0000000..dd46a37
--- /dev/null
+++ b/posts/2023/04/28/thinking-about-test/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-04-28 02:00:00
+title: Thinking about test design
+tags: agdpp
+---
diff --git a/posts/2023/05/03/april-update/post.md b/posts/2023/05/03/april-update/post.md
new file mode 100644
index 0000000..d2e5293
--- /dev/null
+++ b/posts/2023/05/03/april-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-05-03 02:00:00
+title: April 2023 Update
+tags: newsletter
+---
diff --git a/posts/2023/05/06/game-over/post.md b/posts/2023/05/06/game-over/post.md
new file mode 100644
index 0000000..59470fc
--- /dev/null
+++ b/posts/2023/05/06/game-over/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-05-06 02:00:00
+title: Game over?
+tags: agdpp
+---
diff --git a/posts/2023/05/09/hit-balloon-and/post.md b/posts/2023/05/09/hit-balloon-and/post.md
new file mode 100644
index 0000000..219df48
--- /dev/null
+++ b/posts/2023/05/09/hit-balloon-and/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-05-09 02:00:00
+title: Hit balloon and score points
+tags: agdpp
+---
diff --git a/posts/2023/05/12/turning-arrow/post.md b/posts/2023/05/12/turning-arrow/post.md
new file mode 100644
index 0000000..03811b1
--- /dev/null
+++ b/posts/2023/05/12/turning-arrow/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-05-12 02:00:00
+title: Turning arrow
+tags: agdpp
+---
diff --git a/posts/2023/05/14/a-case-for/post.md b/posts/2023/05/14/a-case-for/post.md
new file mode 100644
index 0000000..b0f2353
--- /dev/null
+++ b/posts/2023/05/14/a-case-for/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-05-14 02:00:00
+title: A case for the infrastructure wrapper
+tags: agdpp
+---
diff --git a/posts/2023/05/19/programming-a-logitech/post.md b/posts/2023/05/19/programming-a-logitech/post.md
new file mode 100644
index 0000000..453b1d8
--- /dev/null
+++ b/posts/2023/05/19/programming-a-logitech/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-05-19 02:00:00
+title: Programming a Logitech Gamepad F310
+tags: agdpp
+---
diff --git a/posts/2023/05/20/how-to-test/post.md b/posts/2023/05/20/how-to-test/post.md
new file mode 100644
index 0000000..f0322b3
--- /dev/null
+++ b/posts/2023/05/20/how-to-test/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-05-20 02:00:00
+title: How to test a router?
+tags: 
+---
diff --git a/posts/2023/05/24/score-as-text/post.md b/posts/2023/05/24/score-as-text/post.md
new file mode 100644
index 0000000..fb3b336
--- /dev/null
+++ b/posts/2023/05/24/score-as-text/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-05-24 02:00:00
+title: Score as text
+tags: agdpp
+---
diff --git a/posts/2023/06/06/may-update/post.md b/posts/2023/06/06/may-update/post.md
new file mode 100644
index 0000000..3d21985
--- /dev/null
+++ b/posts/2023/06/06/may-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-06-06 02:00:00
+title: May 2023 Update
+tags: newsletter
+---
diff --git a/posts/2023/06/12/does-tdd-work/post.md b/posts/2023/06/12/does-tdd-work/post.md
new file mode 100644
index 0000000..f858ae9
--- /dev/null
+++ b/posts/2023/06/12/does-tdd-work/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-06-12 02:00:00
+title: Does TDD work when building a game?
+tags: agdpp
+---
diff --git a/posts/2023/06/17/spawn-multiple-balloons/post.md b/posts/2023/06/17/spawn-multiple-balloons/post.md
new file mode 100644
index 0000000..46fd447
--- /dev/null
+++ b/posts/2023/06/17/spawn-multiple-balloons/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-06-17 02:00:00
+title: Spawn multiple balloons
+tags: agdpp
+---
diff --git a/posts/2023/06/18/highlevel-or-microtests/post.md b/posts/2023/06/18/highlevel-or-microtests/post.md
new file mode 100644
index 0000000..7d1f750
--- /dev/null
+++ b/posts/2023/06/18/highlevel-or-microtests/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-06-18 02:00:00
+title: High-level or micro-tests? A discussion with Ron.
+tags: 
+---
diff --git a/posts/2023/06/29/multiplayer/post.md b/posts/2023/06/29/multiplayer/post.md
new file mode 100644
index 0000000..ed37f89
--- /dev/null
+++ b/posts/2023/06/29/multiplayer/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-06-29 02:00:00
+title: Multiplayer
+tags: agdpp
+---
diff --git a/posts/2023/07/04/june-update/post.md b/posts/2023/07/04/june-update/post.md
new file mode 100644
index 0000000..3b5ccda
--- /dev/null
+++ b/posts/2023/07/04/june-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-07-04 02:00:00
+title: June 2023 Update
+tags: newsletter
+---
diff --git a/posts/2023/07/28/devlog-jcuts-and/post.md b/posts/2023/07/28/devlog-jcuts-and/post.md
new file mode 100644
index 0000000..c7155a7
--- /dev/null
+++ b/posts/2023/07/28/devlog-jcuts-and/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-07-28 02:00:00
+title: DevLog 001: J-cuts and L-cuts in my video editor?
+tags: devlog, rlvideo
+---
diff --git a/posts/2023/07/28/how-to-get/post.md b/posts/2023/07/28/how-to-get/post.md
new file mode 100644
index 0000000..4854b6e
--- /dev/null
+++ b/posts/2023/07/28/how-to-get/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-07-28 03:00:00
+title: How to get fast feedback on graphical code?
+tags: rlvideo
+---
diff --git a/posts/2023/07/28/writing-my-own/post.md b/posts/2023/07/28/writing-my-own/post.md
new file mode 100644
index 0000000..aadf495
--- /dev/null
+++ b/posts/2023/07/28/writing-my-own/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-07-28 04:00:00
+title: Writing my own video editor
+tags: rlvideo
+---
diff --git a/posts/2023/07/29/devlog-change-mix/post.md b/posts/2023/07/29/devlog-change-mix/post.md
new file mode 100644
index 0000000..300eb9e
--- /dev/null
+++ b/posts/2023/07/29/devlog-change-mix/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-07-29 02:00:00
+title: DevLog 002: Change mix strategy for cuts in GUI
+tags: devlog, rlvideo
+---
diff --git a/posts/2023/07/29/devlog-clarify-gui/post.md b/posts/2023/07/29/devlog-clarify-gui/post.md
new file mode 100644
index 0000000..a3bebd6
--- /dev/null
+++ b/posts/2023/07/29/devlog-clarify-gui/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-07-29 03:00:00
+title: DevLog 003: Clarify GUI separation
+tags: devlog, rlvideo
+---
diff --git a/posts/2023/07/30/devlog-proxies-with/post.md b/posts/2023/07/30/devlog-proxies-with/post.md
new file mode 100644
index 0000000..f7b25a8
--- /dev/null
+++ b/posts/2023/07/30/devlog-proxies-with/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-07-30 02:00:00
+title: DevLog 004: Proxies with correct FPS
+tags: devlog, rlvideo, mlt
+---
diff --git a/posts/2023/07/31/devlog-adding-the/post.md b/posts/2023/07/31/devlog-adding-the/post.md
new file mode 100644
index 0000000..6183497
--- /dev/null
+++ b/posts/2023/07/31/devlog-adding-the/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-07-31 03:00:00
+title: DevLog 006: Adding the concept of a clip
+tags: devlog, rlvideo
+---
diff --git a/posts/2023/07/31/devlog-mlt-proxy/post.md b/posts/2023/07/31/devlog-mlt-proxy/post.md
new file mode 100644
index 0000000..af04a7a
--- /dev/null
+++ b/posts/2023/07/31/devlog-mlt-proxy/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-07-31 02:00:00
+title: DevLog 005: MLT proxy hell
+tags: devlog, rlvideo, mlt
+---
diff --git a/posts/2023/08/01/devlog-which-feature/post.md b/posts/2023/08/01/devlog-which-feature/post.md
new file mode 100644
index 0000000..e999b14
--- /dev/null
+++ b/posts/2023/08/01/devlog-which-feature/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-08-01 02:00:00
+title: DevLog 007: Which feature to work on next?
+tags: devlog, rlvideo, refactoring
+---
diff --git a/posts/2023/08/02/devlog-how-to/post.md b/posts/2023/08/02/devlog-how-to/post.md
new file mode 100644
index 0000000..a2b41cd
--- /dev/null
+++ b/posts/2023/08/02/devlog-how-to/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-08-02 02:00:00
+title: DevLog 008: How to overcome lack of motivation?
+tags: devlog, rlvideo, motivation
+---
diff --git a/posts/2023/08/03/devlog-debugging-mltgtk/post.md b/posts/2023/08/03/devlog-debugging-mltgtk/post.md
new file mode 100644
index 0000000..2502cb4
--- /dev/null
+++ b/posts/2023/08/03/devlog-debugging-mltgtk/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-08-03 03:00:00
+title: DevLog 010: Debugging MLT/GTK segfault
+tags: devlog, rlvideo, mlt
+---
diff --git a/posts/2023/08/03/devlog-improve-timeline/post.md b/posts/2023/08/03/devlog-improve-timeline/post.md
new file mode 100644
index 0000000..dfb97e0
--- /dev/null
+++ b/posts/2023/08/03/devlog-improve-timeline/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-08-03 02:00:00
+title: DevLog 009: Improve timeline scrubbing
+tags: devlog, rlvideo
+---
diff --git a/posts/2023/08/05/july-update/post.md b/posts/2023/08/05/july-update/post.md
new file mode 100644
index 0000000..254b3f5
--- /dev/null
+++ b/posts/2023/08/05/july-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-08-05 02:00:00
+title: July 2023 Update
+tags: newsletter
+---
diff --git a/posts/2023/08/06/devlog-modifying-cut/post.md b/posts/2023/08/06/devlog-modifying-cut/post.md
new file mode 100644
index 0000000..8a39bc5
--- /dev/null
+++ b/posts/2023/08/06/devlog-modifying-cut/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-08-06 02:00:00
+title: DevLog 011: Modifying cut out point
+tags: devlog, rlvideo
+---
diff --git a/posts/2023/08/21/the-end/post.md b/posts/2023/08/21/the-end/post.md
new file mode 100644
index 0000000..79f5760
--- /dev/null
+++ b/posts/2023/08/21/the-end/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-08-21 02:00:00
+title: The end?
+tags: agdpp
+---
diff --git a/posts/2023/08/23/devlog-investigating-export/post.md b/posts/2023/08/23/devlog-investigating-export/post.md
new file mode 100644
index 0000000..f236a57
--- /dev/null
+++ b/posts/2023/08/23/devlog-investigating-export/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-08-23 02:00:00
+title: DevLog 012: Investigating export crash
+tags: devlog, rlvideo, mlt
+---
diff --git a/posts/2023/09/04/august-update/post.md b/posts/2023/09/04/august-update/post.md
new file mode 100644
index 0000000..9e549b0
--- /dev/null
+++ b/posts/2023/09/04/august-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-09-04 02:00:00
+title: August 2023 Update
+tags: newsletter
+---
diff --git a/posts/2023/09/10/devlog-raspberry-pi/post.md b/posts/2023/09/10/devlog-raspberry-pi/post.md
new file mode 100644
index 0000000..6d57097
--- /dev/null
+++ b/posts/2023/09/10/devlog-raspberry-pi/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-09-10 02:00:00
+title: DevLog 013: Raspberry Pi game console
+tags: agdpp, devlog
+---
diff --git a/posts/2023/10/10/september-update/post.md b/posts/2023/10/10/september-update/post.md
new file mode 100644
index 0000000..80c8365
--- /dev/null
+++ b/posts/2023/10/10/september-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-10-10 02:00:00
+title: September 2023 Update
+tags: newsletter
+---
diff --git a/posts/2023/11/06/october-update/post.md b/posts/2023/11/06/october-update/post.md
new file mode 100644
index 0000000..0176129
--- /dev/null
+++ b/posts/2023/11/06/october-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-11-06 02:00:00
+title: October 2023 Update
+tags: newsletter
+---
diff --git a/posts/2023/12/12/november-update/post.md b/posts/2023/12/12/november-update/post.md
new file mode 100644
index 0000000..f9b2e2f
--- /dev/null
+++ b/posts/2023/12/12/november-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2023-12-12 02:00:00
+title: November 2023 Update
+tags: newsletter
+---
diff --git a/posts/2024/01/02/december-update/post.md b/posts/2024/01/02/december-update/post.md
new file mode 100644
index 0000000..2039e1e
--- /dev/null
+++ b/posts/2024/01/02/december-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-01-02 02:00:00
+title: December 2023 Update
+tags: newsletter
+---
diff --git a/posts/2024/02/07/january-update/post.md b/posts/2024/02/07/january-update/post.md
new file mode 100644
index 0000000..f228e97
--- /dev/null
+++ b/posts/2024/02/07/january-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-02-07 02:00:00
+title: January 2024 Update
+tags: newsletter
+---
diff --git a/posts/2024/03/01/february-update/post.md b/posts/2024/03/01/february-update/post.md
new file mode 100644
index 0000000..823738e
--- /dev/null
+++ b/posts/2024/03/01/february-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-03-01 02:00:00
+title: February 2024 Update
+tags: newsletter
+---
diff --git a/posts/2024/04/02/march-update/post.md b/posts/2024/04/02/march-update/post.md
new file mode 100644
index 0000000..6f61cb6
--- /dev/null
+++ b/posts/2024/04/02/march-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-04-02 02:00:00
+title: March 2024 Update
+tags: newsletter
+---
diff --git a/posts/2024/04/04/draft-what-is/post.md b/posts/2024/04/04/draft-what-is/post.md
new file mode 100644
index 0000000..0d3c47e
--- /dev/null
+++ b/posts/2024/04/04/draft-what-is/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-04-04 02:00:00
+title: DRAFT: 'What is a user story?'
+tags: draft, agile
+---
diff --git a/posts/2024/05/01/april-update/post.md b/posts/2024/05/01/april-update/post.md
new file mode 100644
index 0000000..57aa9c4
--- /dev/null
+++ b/posts/2024/05/01/april-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-05-01 02:00:00
+title: April 2024 Update
+tags: newsletter
+---
diff --git a/posts/2024/05/02/refactoring-a-function/post.md b/posts/2024/05/02/refactoring-a-function/post.md
new file mode 100644
index 0000000..7bfc908
--- /dev/null
+++ b/posts/2024/05/02/refactoring-a-function/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-05-02 02:00:00
+title: Refactoring a function to 6 classes
+tags: refactoring, oop
+---
diff --git a/posts/2024/06/08/may-update/post.md b/posts/2024/06/08/may-update/post.md
new file mode 100644
index 0000000..fdd3b05
--- /dev/null
+++ b/posts/2024/06/08/may-update/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-06-08 02:00:00
+title: May 2024 Update
+tags: newsletter
+---
diff --git a/posts/2024/07/02/newsletter-june-quines/post.md b/posts/2024/07/02/newsletter-june-quines/post.md
new file mode 100644
index 0000000..e2d5013
--- /dev/null
+++ b/posts/2024/07/02/newsletter-june-quines/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-07-02 02:00:00
+title: Newsletter June 2024: Quines and Smalltalk
+tags: newsletter
+---
diff --git a/posts/2024/07/26/output-tracking-vs/post.md b/posts/2024/07/26/output-tracking-vs/post.md
new file mode 100644
index 0000000..a264d36
--- /dev/null
+++ b/posts/2024/07/26/output-tracking-vs/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-07-26 02:00:00
+title: Output Tracking vs Mocks
+tags: 
+---
diff --git a/posts/2024/08/01/newsletter-july-note/post.md b/posts/2024/08/01/newsletter-july-note/post.md
new file mode 100644
index 0000000..9727a7d
--- /dev/null
+++ b/posts/2024/08/01/newsletter-july-note/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-08-01 02:00:00
+title: Newsletter July 2024: Note Making Re-Visited
+tags: newsletter
+---
diff --git a/posts/2024/08/08/today-i-did/post.md b/posts/2024/08/08/today-i-did/post.md
new file mode 100644
index 0000000..6922c52
--- /dev/null
+++ b/posts/2024/08/08/today-i-did/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-08-08 20:16:47
+title: 
+tags: Running
+---
diff --git a/posts/2024/08/09/i-first-learned/post.md b/posts/2024/08/09/i-first-learned/post.md
new file mode 100644
index 0000000..3201859
--- /dev/null
+++ b/posts/2024/08/09/i-first-learned/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-08-09 19:46:35
+title: 
+tags: 
+---
diff --git a/posts/2024/08/09/i-was-tired/post.md b/posts/2024/08/09/i-was-tired/post.md
new file mode 100644
index 0000000..6115c46
--- /dev/null
+++ b/posts/2024/08/09/i-was-tired/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-08-09 17:37:18
+title: 
+tags: Running
+---
diff --git a/posts/2024/08/09/poor-mans-redirect/post.md b/posts/2024/08/09/poor-mans-redirect/post.md
new file mode 100644
index 0000000..6bb6f6f
--- /dev/null
+++ b/posts/2024/08/09/poor-mans-redirect/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-08-09 19:44:27
+title: Poor man's redirect in a static site
+tags: Micro.blog, Javascript
+---
diff --git a/posts/2024/08/11/how-i-found/post.md b/posts/2024/08/11/how-i-found/post.md
new file mode 100644
index 0000000..672602e
--- /dev/null
+++ b/posts/2024/08/11/how-i-found/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-08-11 09:36:57
+title: How I found out about Micro.blog
+tags: Micro.blog
+---
diff --git a/posts/2024/08/11/i-just-implemented/post.md b/posts/2024/08/11/i-just-implemented/post.md
new file mode 100644
index 0000000..e659553
--- /dev/null
+++ b/posts/2024/08/11/i-just-implemented/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-08-11 09:15:41
+title: 
+tags: Zettelkasten, Smart Notes
+---
diff --git a/posts/2024/08/11/its-like-its/post.md b/posts/2024/08/11/its-like-its/post.md
new file mode 100644
index 0000000..8567881
--- /dev/null
+++ b/posts/2024/08/11/its-like-its/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-08-11 13:18:13
+title: 
+tags: Running
+---
diff --git a/posts/2024/08/11/its-time-for/post.md b/posts/2024/08/11/its-time-for/post.md
new file mode 100644
index 0000000..0df0640
--- /dev/null
+++ b/posts/2024/08/11/its-time-for/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-08-11 15:06:44
+title: 
+tags: 
+---
diff --git a/posts/2024/08/11/my-website-as/post.md b/posts/2024/08/11/my-website-as/post.md
new file mode 100644
index 0000000..60e563e
--- /dev/null
+++ b/posts/2024/08/11/my-website-as/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-08-11 06:42:10
+title: 
+tags: Micro.blog
+---
diff --git a/posts/2024/08/17/today-i-spent/post.md b/posts/2024/08/17/today-i-spent/post.md
new file mode 100644
index 0000000..240b1a0
--- /dev/null
+++ b/posts/2024/08/17/today-i-spent/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-08-17 21:49:57
+title: 
+tags: Running
+---
diff --git a/posts/2024/08/18/yes-the-draft/post.md b/posts/2024/08/18/yes-the-draft/post.md
new file mode 100644
index 0000000..7c18b47
--- /dev/null
+++ b/posts/2024/08/18/yes-the-draft/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-08-18 22:38:26
+title: 
+tags: Writing
+---
diff --git a/posts/2024/08/19/today-i-bought/post.md b/posts/2024/08/19/today-i-bought/post.md
new file mode 100644
index 0000000..930ccb2
--- /dev/null
+++ b/posts/2024/08/19/today-i-bought/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-08-19 21:12:41
+title: 
+tags: Running
+---
diff --git a/posts/2024/08/21/did-another-bike/post.md b/posts/2024/08/21/did-another-bike/post.md
new file mode 100644
index 0000000..22fe0aa
--- /dev/null
+++ b/posts/2024/08/21/did-another-bike/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-08-21 21:44:52
+title: 
+tags: Running
+---
diff --git a/posts/2024/08/29/linking-and-how/post.md b/posts/2024/08/29/linking-and-how/post.md
new file mode 100644
index 0000000..7a92d25
--- /dev/null
+++ b/posts/2024/08/29/linking-and-how/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-08-29 07:49:10
+title: Linking (and how it has evolved) in Smart Notes
+tags: Zettelkasten, Smart Notes
+---
diff --git a/posts/2024/09/01/i-just-implemented/post.md b/posts/2024/09/01/i-just-implemented/post.md
new file mode 100644
index 0000000..573b9a0
--- /dev/null
+++ b/posts/2024/09/01/i-just-implemented/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-09-01 18:01:41
+title: 
+tags: 
+---
diff --git a/posts/2024/09/01/newsletter-august-smart/post.md b/posts/2024/09/01/newsletter-august-smart/post.md
new file mode 100644
index 0000000..2c085b3
--- /dev/null
+++ b/posts/2024/09/01/newsletter-august-smart/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-09-01 07:33:59
+title: Newsletter August 2024: Smart Notes and Blogging
+tags: newsletter
+---
diff --git a/posts/2024/09/04/bash-redirects-explained/post.md b/posts/2024/09/04/bash-redirects-explained/post.md
new file mode 100644
index 0000000..ef6a426
--- /dev/null
+++ b/posts/2024/09/04/bash-redirects-explained/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-09-04 06:39:30
+title: Bash Redirects Explained
+tags: Bash
+---
diff --git a/posts/2024/09/04/do-you-know/post.md b/posts/2024/09/04/do-you-know/post.md
new file mode 100644
index 0000000..35da47b
--- /dev/null
+++ b/posts/2024/09/04/do-you-know/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-09-04 15:18:23
+title: 
+tags: 
+---
diff --git a/posts/2024/09/05/if-you-want/post.md b/posts/2024/09/05/if-you-want/post.md
new file mode 100644
index 0000000..4dfc1b1
--- /dev/null
+++ b/posts/2024/09/05/if-you-want/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-09-05 06:29:46
+title: 
+tags: 
+---
diff --git a/posts/2024/09/05/pull-requests-discourage/post.md b/posts/2024/09/05/pull-requests-discourage/post.md
new file mode 100644
index 0000000..c118c34
--- /dev/null
+++ b/posts/2024/09/05/pull-requests-discourage/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-09-05 21:05:39
+title: 
+tags: 
+---
diff --git a/posts/2024/09/05/today-i-just/post.md b/posts/2024/09/05/today-i-just/post.md
new file mode 100644
index 0000000..10d877c
--- /dev/null
+++ b/posts/2024/09/05/today-i-just/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-09-05 20:20:45
+title: 
+tags: Running
+---
diff --git a/posts/2024/10/14/newsletter-september-bash/post.md b/posts/2024/10/14/newsletter-september-bash/post.md
new file mode 100644
index 0000000..41e93c8
--- /dev/null
+++ b/posts/2024/10/14/newsletter-september-bash/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-10-14 19:11:59
+title: Newsletter September 2024: Bash Redirects and Reading
+tags: newsletter
+---
diff --git a/posts/2024/10/16/various-things-have/post.md b/posts/2024/10/16/various-things-have/post.md
new file mode 100644
index 0000000..21f34d4
--- /dev/null
+++ b/posts/2024/10/16/various-things-have/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-10-16 20:08:48
+title: 
+tags: Running
+---
diff --git a/posts/2024/10/28/its-getting-dark/post.md b/posts/2024/10/28/its-getting-dark/post.md
new file mode 100644
index 0000000..fd37d08
--- /dev/null
+++ b/posts/2024/10/28/its-getting-dark/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-10-28 19:51:08
+title: 
+tags: 
+---
diff --git a/posts/2024/11/02/ive-used-testing/post.md b/posts/2024/11/02/ive-used-testing/post.md
new file mode 100644
index 0000000..1132eb0
--- /dev/null
+++ b/posts/2024/11/02/ive-used-testing/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-11-02 19:05:13
+title: 
+tags: 
+---
diff --git a/posts/2024/11/02/today-i-learned/post.md b/posts/2024/11/02/today-i-learned/post.md
new file mode 100644
index 0000000..644f891
--- /dev/null
+++ b/posts/2024/11/02/today-i-learned/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-11-02 19:50:36
+title: 
+tags: 
+---
diff --git a/posts/2024/11/03/how-would-you/post.md b/posts/2024/11/03/how-would-you/post.md
new file mode 100644
index 0000000..ee04eb2
--- /dev/null
+++ b/posts/2024/11/03/how-would-you/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-11-03 09:56:01
+title: 
+tags: 
+---
diff --git a/posts/2024/11/03/newsletter-october-primitive/post.md b/posts/2024/11/03/newsletter-october-primitive/post.md
new file mode 100644
index 0000000..7acc459
--- /dev/null
+++ b/posts/2024/11/03/newsletter-october-primitive/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-11-03 09:33:04
+title: Newsletter October 2024: Primitive Obsession?
+tags: oop, newsletter
+---
diff --git a/posts/2024/11/16/i-was-researching/post.md b/posts/2024/11/16/i-was-researching/post.md
new file mode 100644
index 0000000..c8e3182
--- /dev/null
+++ b/posts/2024/11/16/i-was-researching/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-11-16 15:08:23
+title: 
+tags: vim
+---
diff --git a/posts/2024/11/20/i-needed-to/post.md b/posts/2024/11/20/i-needed-to/post.md
new file mode 100644
index 0000000..e22b1e9
--- /dev/null
+++ b/posts/2024/11/20/i-needed-to/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-11-20 22:35:41
+title: 
+tags: Linux
+---
diff --git a/posts/2024/11/20/today-was-the/post.md b/posts/2024/11/20/today-was-the/post.md
new file mode 100644
index 0000000..5b3a76d
--- /dev/null
+++ b/posts/2024/11/20/today-was-the/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-11-20 22:17:43
+title: 
+tags: Running
+---
diff --git a/posts/2024/11/23/we-got-some/post.md b/posts/2024/11/23/we-got-some/post.md
new file mode 100644
index 0000000..857c8fb
--- /dev/null
+++ b/posts/2024/11/23/we-got-some/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-11-23 21:54:13
+title: 
+tags: Running
+---
diff --git a/posts/2024/11/28/ive-started-working/post.md b/posts/2024/11/28/ive-started-working/post.md
new file mode 100644
index 0000000..988eac8
--- /dev/null
+++ b/posts/2024/11/28/ive-started-working/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-11-28 08:31:39
+title: 
+tags: rleditor
+---
diff --git a/posts/2024/11/28/sometimes-i-solve/post.md b/posts/2024/11/28/sometimes-i-solve/post.md
new file mode 100644
index 0000000..e4d1cfa
--- /dev/null
+++ b/posts/2024/11/28/sometimes-i-solve/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-11-28 08:40:09
+title: 
+tags: rleditor
+---
diff --git a/posts/2024/12/04/today-i-ran/post.md b/posts/2024/12/04/today-i-ran/post.md
new file mode 100644
index 0000000..46803cd
--- /dev/null
+++ b/posts/2024/12/04/today-i-ran/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-12-04 23:37:47
+title: 
+tags: Running
+---
diff --git a/posts/2024/12/08/newsletter-november-a/post.md b/posts/2024/12/08/newsletter-november-a/post.md
new file mode 100644
index 0000000..5d70858
--- /dev/null
+++ b/posts/2024/12/08/newsletter-november-a/post.md
@@ -0,0 +1,5 @@
+---
+date: 2024-12-08 08:36:43
+title: Newsletter November 2024: A New Project
+tags: newsletter
+---
diff --git a/posts/2025/01/12/newsletter-december-advent-of-code/post.md b/posts/2025/01/12/newsletter-december-advent-of-code/post.md
new file mode 100644
index 0000000..fe55403
--- /dev/null
+++ b/posts/2025/01/12/newsletter-december-advent-of-code/post.md
@@ -0,0 +1,5 @@
+---
+date: 2025-01-12 13:45:36
+title: Newsletter December 2024: Advent of Code
+tags: rleditor, Advent of Code
+---
diff --git a/posts/2025/01/13/todays-realization-is-that-you/post.md b/posts/2025/01/13/todays-realization-is-that-you/post.md
new file mode 100644
index 0000000..e5b0e77
--- /dev/null
+++ b/posts/2025/01/13/todays-realization-is-that-you/post.md
@@ -0,0 +1,5 @@
+---
+date: 2025-01-13 22:37:56
+title: 
+tags: 
+---
diff --git a/posts/2025/01/19/replacing-ctrlr-in-bash-without/post.md b/posts/2025/01/19/replacing-ctrlr-in-bash-without/post.md
new file mode 100644
index 0000000..a7c49d8
--- /dev/null
+++ b/posts/2025/01/19/replacing-ctrlr-in-bash-without/post.md
@@ -0,0 +1,5 @@
+---
+date: 2025-01-19 07:11:50
+title: Replacing Ctrl-R in Bash without TIOCSTI
+tags: rlselect, Bash
+---
diff --git a/posts/2025/02/01/newsletter-january-inspired-and-motivated/post.md b/posts/2025/02/01/newsletter-january-inspired-and-motivated/post.md
new file mode 100644
index 0000000..6b32a3e
--- /dev/null
+++ b/posts/2025/02/01/newsletter-january-inspired-and-motivated/post.md
@@ -0,0 +1,5 @@
+---
+date: 2025-02-01 07:08:21
+title: Newsletter January 2025: Inspired and Motivated by New Laptop and Reading
+tags: rlmeta, newsletter, Micro.blog
+---
diff --git a/posts/2025/03/19/newsletter-february-a-new-code/post.md b/posts/2025/03/19/newsletter-february-a-new-code/post.md
new file mode 100644
index 0000000..371ed25
--- /dev/null
+++ b/posts/2025/03/19/newsletter-february-a-new-code/post.md
@@ -0,0 +1,5 @@
+---
+date: 2025-03-19 08:28:56
+title: Newsletter February 2025: A New Code Hosting Platform?
+tags: newsletter
+---
diff --git a/posts/2025/04/02/newsletter-march-snowboarding/post.md b/posts/2025/04/02/newsletter-march-snowboarding/post.md
new file mode 100644
index 0000000..81e40f9
--- /dev/null
+++ b/posts/2025/04/02/newsletter-march-snowboarding/post.md
@@ -0,0 +1,5 @@
+---
+date: 2025-04-02 06:50:07
+title: Newsletter March 2025: Snowboarding
+tags: newsletter
+---
diff --git a/posts/2025/05/02/newsletter-april-projects/post.md b/posts/2025/05/02/newsletter-april-projects/post.md
new file mode 100644
index 0000000..6026130
--- /dev/null
+++ b/posts/2025/05/02/newsletter-april-projects/post.md
@@ -0,0 +1,5 @@
+---
+date: 2025-05-02 11:42:17
+title: Newsletter April 2025: projects2
+tags: timeline, newsletter
+---
diff --git a/posts/2025/05/18/082424/post.md b/posts/2025/05/18/082424/post.md
deleted file mode 100644
index 17146a8..0000000
--- a/posts/2025/05/18/082424/post.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-date: 2025-05-18 08:24:24
-title:
-tags: test1, test2
----
-
-This is the first blog post. It is a test note.