From 590558d0bf3aaef1f262452b2edc9d89b88ada70 Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Sun, 19 Dec 2021 22:03:42 +0200 Subject: [PATCH] Add notes for 2021-12-19 --- content/posts/2021-12.md | 140 +++++++++++++++++++++ docs/2021-12/index.html | 158 +++++++++++++++++++++++- docs/categories/index.html | 2 +- docs/categories/notes/index.html | 2 +- docs/categories/notes/page/2/index.html | 2 +- docs/categories/notes/page/3/index.html | 2 +- docs/categories/notes/page/4/index.html | 2 +- docs/categories/notes/page/5/index.html | 2 +- docs/categories/notes/page/6/index.html | 2 +- docs/index.html | 2 +- docs/page/2/index.html | 2 +- docs/page/3/index.html | 2 +- docs/page/4/index.html | 2 +- docs/page/5/index.html | 2 +- docs/page/6/index.html | 2 +- docs/page/7/index.html | 2 +- docs/page/8/index.html | 2 +- docs/posts/index.html | 2 +- docs/posts/page/2/index.html | 2 +- docs/posts/page/3/index.html | 2 +- docs/posts/page/4/index.html | 2 +- docs/posts/page/5/index.html | 2 +- docs/posts/page/6/index.html | 2 +- docs/posts/page/7/index.html | 2 +- docs/posts/page/8/index.html | 2 +- docs/sitemap.xml | 10 +- 26 files changed, 323 insertions(+), 31 deletions(-) diff --git a/content/posts/2021-12.md b/content/posts/2021-12.md index 44594b891..b5779ca70 100644 --- a/content/posts/2021-12.md +++ b/content/posts/2021-12.md @@ -129,4 +129,144 @@ Total number of bot hits purged: 34458 - Finalize country/region changes in csv-metadata-quality checker and release v0.5.0: https://github.com/ilri/csv-metadata-quality/releases/tag/v0.5.0 - This also includes the mojibake fixes and title/citation checks and some bug fixes +## 2021-12-09 + +- Help Francesca upload the dataset for one CIAT publication (it has like 100 authors so we did it via CSV) + +## 2021-12-12 + +- Patch OpenRXV's Elasticsearch for the CVE-2021-44228 log4j vulnerability and re-deploy AReS + - I added `-Dlog4j2.formatMsgNoLookups=true` to the Elasticsearch Java environment +- Run AReS harvesting + +## 2021-12-13 + +- I ran the `check-duplicates.py` script on the 1,000 items from the CGIAR System Office TAC/ICW/Green Cover archives and found hundreds or thousands of potential duplicates + - I sent feedback to Gaia +- Help Jacquie from WorldFish try to find all outputs for the Fish CRP because there are a few different formats for that name +- Create a temporary account for Rafael Rodriguez on DSpace Test so he can investigate the submission workflow + - I added him to the admin group on the Alliance community... + +## 2021-12-14 + +- I finally caught some stuck locks on CGSpace after checking several times per day for the last week: + +```console +$ psql -c "SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid" | wc -l +1508 +``` + +- Now looking at the locks query sorting by age of locks: + +```console +$ cat locks-age.sql +SELECT a.datname, + l.relation::regclass, + l.transactionid, + l.mode, + l.GRANTED, + a.usename, + a.query, + a.query_start, + age(now(), a.query_start) AS "age", + a.pid +FROM pg_stat_activity a +JOIN pg_locks l ON l.pid = a.pid +ORDER BY a.query_start; +``` + +- The oldest locks are 9 hours and 26 minutes old and the time on the server is `Tue Dec 14 18:41:58 CET 2021`, so it seems something happened around 9:15 this morning + - I looked at the maintenance tasks and there is nothing running around then (only the sitemap update that runs at 8AM, and should be quick) + - I looked at the DSpace log, but didn't see anything interesting there: only editors making edits... + - I looked at the nginx REST API logs and saw lots of GET action there from Drupal sites harvesting us... + - So I'm not sure what it causing this... perhaps something in the XMLUI submission / task workflow + - For now I just ran all system updates and rebooted the server + - I also enabled Atmire's `log-db-activity.sh` script to run every four hours (in the DSpace user's crontab) so perhaps that will be better than me checking manually +- Regarding Gaia's 1,000 items to upload to CGSpace, I checked the eighteen Green Cover records and there are no duplicates, so that's at least a starting point! + - I sent her a spreadsheet with the eighteen items with a new collection column to indicate where they should go + +## 2021-12-16 + +- Working on the CGIAR CAS Green Cover records for Gaia + - Add months to dcterms.issued from PDFs + - Add languages + - Format and fix several authors +- I created a SAF archive with SAFBuilder and then imported it to DSpace Test: + +```console +$ JAVA_OPTS="-Xmx1024m -Dfile.encoding=UTF-8" dspace import --add --eperson=fuuu@fuuu.com --source /tmp/SimpleArchiveFormat --mapfile=./2021-12-16-green-covers.map +``` + +## 2021-12-19 + +- I tried to update all Docker containers on AReS and then run a build, but I got an error in the backend: + +```console +> openrxv-backend@0.0.1 build +> nest build + +node_modules/@elastic/elasticsearch/api/types.d.ts:2454:13 - error TS2456: Type alias 'AggregationsAggregate' circularly references itself. + +2454 export type AggregationsAggregate = AggregationsSingleBucketAggregate | AggregationsAutoDateHistogramAggregate | AggregationsFiltersAggregate | AggregationsSignificantTermsAggregate | AggregationsTermsAggregate | AggregationsBucketAggregate | AggregationsCompositeBucketAggregate | AggregationsMultiBucketAggregate | AggregationsMatrixStatsAggregate | AggregationsKeyedValueAggregate | AggregationsMetricAggregate + ~~~~~~~~~~~~~~~~~~~~~ +node_modules/@elastic/elasticsearch/api/types.d.ts:3209:13 - error TS2456: Type alias 'AggregationsSingleBucketAggregate' circularly references itself. + +3209 export type AggregationsSingleBucketAggregate = AggregationsSingleBucketAggregateKeys + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Found 2 error(s). +``` + +- I'm not sure why because I build the backend successfully on my local machine... + - For now I just ran all the system updates and rebooted the machine (linode20) + - Then I started a fresh harvest +- Now I cleared all images on my local machine and I get the same error when building the backend + - It seems to be related to `@elastic/elasticsearch-js`](https://github.com/elastic/elasticsearch-js), which our `package.json` pins with version `^7.13.0" + - I see that AReS is currently using 7.15.0 in its `package-lock.json`, and 7.16.0 was released four days ago so perhaps it's that... + - Pinning `~7.15.0` allows nest to build fine... + - I made a pull request +- But since software sucks, now I get an error in the frontend while starting nginx: + +```console +nginx: [emerg] host not found in upstream "backend:3000" in /etc/nginx/conf.d/default.conf:2 +``` + +- In other news, looking at updating our Redis from version 5 to 6 (which is slightly less old, but still old!) and I'm happy to see that the [release notes for version 6](https://raw.githubusercontent.com/redis/redis/6.0/00-RELEASENOTES) say that it is compatible with 5 except for one minor thing that we don't seem to be using (SPOP?) +- For reference I see that our Redis 5 container is based on Debian 11, which I didn't expect... but I still want to try to upgrade to Redis 6 eventually: + +```console +$ docker exec -it redis bash +root@23692d6b51c5:/data# cat /etc/os-release +PRETTY_NAME="Debian GNU/Linux 11 (bullseye)" +NAME="Debian GNU/Linux" +VERSION_ID="11" +VERSION="11 (bullseye)" +VERSION_CODENAME=bullseye +ID=debian +HOME_URL="https://www.debian.org/" +SUPPORT_URL="https://www.debian.org/support" +BUG_REPORT_URL="https://bugs.debian.org/" +``` + +- I bumped the version to 6 on my local test machine and the logs look good: + +```console +$ docker logs redis +1:C 19 Dec 2021 19:27:15.583 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo +1:C 19 Dec 2021 19:27:15.583 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=1, just started +1:C 19 Dec 2021 19:27:15.583 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf +1:M 19 Dec 2021 19:27:15.584 * monotonic clock: POSIX clock_gettime +1:M 19 Dec 2021 19:27:15.584 * Running mode=standalone, port=6379. +1:M 19 Dec 2021 19:27:15.584 # Server initialized +1:M 19 Dec 2021 19:27:15.585 * Loading RDB produced by version 5.0.14 +1:M 19 Dec 2021 19:27:15.585 * RDB age 33 seconds +1:M 19 Dec 2021 19:27:15.585 * RDB memory usage when created 3.17 Mb +1:M 19 Dec 2021 19:27:15.595 # Done loading RDB, keys loaded: 932, keys expired: 1. +1:M 19 Dec 2021 19:27:15.595 * DB loaded from disk: 0.011 seconds +1:M 19 Dec 2021 19:27:15.595 * Ready to accept connections +``` + +- The interface and harvesting all work as expected... + - I pushed the update to OpenRXV + diff --git a/docs/2021-12/index.html b/docs/2021-12/index.html index 45eba70ea..b012db961 100644 --- a/docs/2021-12/index.html +++ b/docs/2021-12/index.html @@ -22,7 +22,7 @@ Total number of bot hits purged: 3679 - + @@ -50,9 +50,9 @@ Total number of bot hits purged: 3679 "@type": "BlogPosting", "headline": "December, 2021", "url": "https://alanorth.github.io/cgspace-notes/2021-12/", - "wordCount": "992", + "wordCount": "1942", "datePublished": "2021-12-01T16:07:07+02:00", - "dateModified": "2021-12-08T08:47:33+02:00", + "dateModified": "2021-12-08T19:34:39+02:00", "author": { "@type": "Person", "name": "Alan Orth" @@ -276,6 +276,158 @@ Purging 34458 hits from HeadlessChrome in statistics +

2021-12-09

+
    +
  • Help Francesca upload the dataset for one CIAT publication (it has like 100 authors so we did it via CSV)
  • +
+

2021-12-12

+
    +
  • Patch OpenRXV’s Elasticsearch for the CVE-2021-44228 log4j vulnerability and re-deploy AReS +
      +
    • I added -Dlog4j2.formatMsgNoLookups=true to the Elasticsearch Java environment
    • +
    +
  • +
  • Run AReS harvesting
  • +
+

2021-12-13

+
    +
  • I ran the check-duplicates.py script on the 1,000 items from the CGIAR System Office TAC/ICW/Green Cover archives and found hundreds or thousands of potential duplicates +
      +
    • I sent feedback to Gaia
    • +
    +
  • +
  • Help Jacquie from WorldFish try to find all outputs for the Fish CRP because there are a few different formats for that name
  • +
  • Create a temporary account for Rafael Rodriguez on DSpace Test so he can investigate the submission workflow +
      +
    • I added him to the admin group on the Alliance community…
    • +
    +
  • +
+

2021-12-14

+
    +
  • I finally caught some stuck locks on CGSpace after checking several times per day for the last week:
  • +
+
$ psql -c "SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid" | wc -l
+1508
+
    +
  • Now looking at the locks query sorting by age of locks:
  • +
+
$ cat locks-age.sql 
+SELECT a.datname,
+         l.relation::regclass,
+         l.transactionid,
+         l.mode,
+         l.GRANTED,
+         a.usename,
+         a.query,
+         a.query_start,
+         age(now(), a.query_start) AS "age",
+         a.pid
+FROM pg_stat_activity a
+JOIN pg_locks l ON l.pid = a.pid
+ORDER BY a.query_start;
+
    +
  • The oldest locks are 9 hours and 26 minutes old and the time on the server is Tue Dec 14 18:41:58 CET 2021, so it seems something happened around 9:15 this morning +
      +
    • I looked at the maintenance tasks and there is nothing running around then (only the sitemap update that runs at 8AM, and should be quick)
    • +
    • I looked at the DSpace log, but didn’t see anything interesting there: only editors making edits…
    • +
    • I looked at the nginx REST API logs and saw lots of GET action there from Drupal sites harvesting us…
    • +
    • So I’m not sure what it causing this… perhaps something in the XMLUI submission / task workflow
    • +
    • For now I just ran all system updates and rebooted the server
    • +
    • I also enabled Atmire’s log-db-activity.sh script to run every four hours (in the DSpace user’s crontab) so perhaps that will be better than me checking manually
    • +
    +
  • +
  • Regarding Gaia’s 1,000 items to upload to CGSpace, I checked the eighteen Green Cover records and there are no duplicates, so that’s at least a starting point! +
      +
    • I sent her a spreadsheet with the eighteen items with a new collection column to indicate where they should go
    • +
    +
  • +
+

2021-12-16

+
    +
  • Working on the CGIAR CAS Green Cover records for Gaia +
      +
    • Add months to dcterms.issued from PDFs
    • +
    • Add languages
    • +
    • Format and fix several authors
    • +
    +
  • +
  • I created a SAF archive with SAFBuilder and then imported it to DSpace Test:
  • +
+
$ JAVA_OPTS="-Xmx1024m -Dfile.encoding=UTF-8" dspace import --add --eperson=fuuu@fuuu.com --source /tmp/SimpleArchiveFormat --mapfile=./2021-12-16-green-covers.map
+

2021-12-19

+
    +
  • I tried to update all Docker containers on AReS and then run a build, but I got an error in the backend:
  • +
+
> openrxv-backend@0.0.1 build
+> nest build
+
+node_modules/@elastic/elasticsearch/api/types.d.ts:2454:13 - error TS2456: Type alias 'AggregationsAggregate' circularly references itself.
+
+2454 export type AggregationsAggregate = AggregationsSingleBucketAggregate | AggregationsAutoDateHistogramAggregate | AggregationsFiltersAggregate | AggregationsSignificantTermsAggregate<any> | AggregationsTermsAggregate<any> | AggregationsBucketAggregate | AggregationsCompositeBucketAggregate | AggregationsMultiBucketAggregate<AggregationsBucket> | AggregationsMatrixStatsAggregate | AggregationsKeyedValueAggregate | AggregationsMetricAggregate
+                 ~~~~~~~~~~~~~~~~~~~~~
+node_modules/@elastic/elasticsearch/api/types.d.ts:3209:13 - error TS2456: Type alias 'AggregationsSingleBucketAggregate' circularly references itself.
+
+3209 export type AggregationsSingleBucketAggregate = AggregationsSingleBucketAggregateKeys
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Found 2 error(s).
+
    +
  • I’m not sure why because I build the backend successfully on my local machine… +
      +
    • For now I just ran all the system updates and rebooted the machine (linode20)
    • +
    • Then I started a fresh harvest
    • +
    +
  • +
  • Now I cleared all images on my local machine and I get the same error when building the backend +
      +
    • It seems to be related to @elastic/elasticsearch-js](https://github.com/elastic/elasticsearch-js), which our package.json pins with version `^7.13.0"
    • +
    • I see that AReS is currently using 7.15.0 in its package-lock.json, and 7.16.0 was released four days ago so perhaps it’s that…
    • +
    • Pinning ~7.15.0 allows nest to build fine…
    • +
    • I made a pull request
    • +
    +
  • +
  • But since software sucks, now I get an error in the frontend while starting nginx:
  • +
+
nginx: [emerg] host not found in upstream "backend:3000" in /etc/nginx/conf.d/default.conf:2
+
    +
  • In other news, looking at updating our Redis from version 5 to 6 (which is slightly less old, but still old!) and I’m happy to see that the release notes for version 6 say that it is compatible with 5 except for one minor thing that we don’t seem to be using (SPOP?)
  • +
  • For reference I see that our Redis 5 container is based on Debian 11, which I didn’t expect… but I still want to try to upgrade to Redis 6 eventually:
  • +
+
$ docker exec -it redis bash
+root@23692d6b51c5:/data# cat /etc/os-release 
+PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
+NAME="Debian GNU/Linux"
+VERSION_ID="11"
+VERSION="11 (bullseye)"
+VERSION_CODENAME=bullseye
+ID=debian
+HOME_URL="https://www.debian.org/"
+SUPPORT_URL="https://www.debian.org/support"
+BUG_REPORT_URL="https://bugs.debian.org/"
+
    +
  • I bumped the version to 6 on my local test machine and the logs look good:
  • +
+
$ docker logs redis
+1:C 19 Dec 2021 19:27:15.583 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
+1:C 19 Dec 2021 19:27:15.583 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=1, just started
+1:C 19 Dec 2021 19:27:15.583 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
+1:M 19 Dec 2021 19:27:15.584 * monotonic clock: POSIX clock_gettime
+1:M 19 Dec 2021 19:27:15.584 * Running mode=standalone, port=6379.
+1:M 19 Dec 2021 19:27:15.584 # Server initialized
+1:M 19 Dec 2021 19:27:15.585 * Loading RDB produced by version 5.0.14
+1:M 19 Dec 2021 19:27:15.585 * RDB age 33 seconds
+1:M 19 Dec 2021 19:27:15.585 * RDB memory usage when created 3.17 Mb
+1:M 19 Dec 2021 19:27:15.595 # Done loading RDB, keys loaded: 932, keys expired: 1.
+1:M 19 Dec 2021 19:27:15.595 * DB loaded from disk: 0.011 seconds
+1:M 19 Dec 2021 19:27:15.595 * Ready to accept connections
+
    +
  • The interface and harvesting all work as expected… +
      +
    • I pushed the update to OpenRXV
    • +
    +
  • +
diff --git a/docs/categories/index.html b/docs/categories/index.html index b06d63a74..8716f025c 100644 --- a/docs/categories/index.html +++ b/docs/categories/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/categories/notes/index.html b/docs/categories/notes/index.html index a1cc7d140..991ffc4fb 100644 --- a/docs/categories/notes/index.html +++ b/docs/categories/notes/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/categories/notes/page/2/index.html b/docs/categories/notes/page/2/index.html index a74385350..602057dd0 100644 --- a/docs/categories/notes/page/2/index.html +++ b/docs/categories/notes/page/2/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/categories/notes/page/3/index.html b/docs/categories/notes/page/3/index.html index 1ea53edc5..b825b6c5e 100644 --- a/docs/categories/notes/page/3/index.html +++ b/docs/categories/notes/page/3/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/categories/notes/page/4/index.html b/docs/categories/notes/page/4/index.html index 9677e59cc..b338c3adb 100644 --- a/docs/categories/notes/page/4/index.html +++ b/docs/categories/notes/page/4/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/categories/notes/page/5/index.html b/docs/categories/notes/page/5/index.html index 5f159961d..d8cebf3b5 100644 --- a/docs/categories/notes/page/5/index.html +++ b/docs/categories/notes/page/5/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/categories/notes/page/6/index.html b/docs/categories/notes/page/6/index.html index e8bf1d525..51c7a4008 100644 --- a/docs/categories/notes/page/6/index.html +++ b/docs/categories/notes/page/6/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/index.html b/docs/index.html index 016eb4f52..e97502dda 100644 --- a/docs/index.html +++ b/docs/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/page/2/index.html b/docs/page/2/index.html index a907bb551..2c99d4816 100644 --- a/docs/page/2/index.html +++ b/docs/page/2/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/page/3/index.html b/docs/page/3/index.html index 8f25eff63..4cb59a3b0 100644 --- a/docs/page/3/index.html +++ b/docs/page/3/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/page/4/index.html b/docs/page/4/index.html index 2cded957b..fe2a0cd32 100644 --- a/docs/page/4/index.html +++ b/docs/page/4/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/page/5/index.html b/docs/page/5/index.html index ec2624bfe..e840d95f6 100644 --- a/docs/page/5/index.html +++ b/docs/page/5/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/page/6/index.html b/docs/page/6/index.html index a080a2d5a..58581897c 100644 --- a/docs/page/6/index.html +++ b/docs/page/6/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/page/7/index.html b/docs/page/7/index.html index c1df06791..c0b1b040c 100644 --- a/docs/page/7/index.html +++ b/docs/page/7/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/page/8/index.html b/docs/page/8/index.html index 0491d4fa1..1047ac639 100644 --- a/docs/page/8/index.html +++ b/docs/page/8/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/posts/index.html b/docs/posts/index.html index 0f9f92202..1caa67bf9 100644 --- a/docs/posts/index.html +++ b/docs/posts/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/posts/page/2/index.html b/docs/posts/page/2/index.html index 7be307422..4edce6274 100644 --- a/docs/posts/page/2/index.html +++ b/docs/posts/page/2/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/posts/page/3/index.html b/docs/posts/page/3/index.html index 91151fdc6..e94668022 100644 --- a/docs/posts/page/3/index.html +++ b/docs/posts/page/3/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/posts/page/4/index.html b/docs/posts/page/4/index.html index 96b193525..7b7df3c9c 100644 --- a/docs/posts/page/4/index.html +++ b/docs/posts/page/4/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/posts/page/5/index.html b/docs/posts/page/5/index.html index 8da6da224..74b6c9d8a 100644 --- a/docs/posts/page/5/index.html +++ b/docs/posts/page/5/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/posts/page/6/index.html b/docs/posts/page/6/index.html index fb152cd96..f13741670 100644 --- a/docs/posts/page/6/index.html +++ b/docs/posts/page/6/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/posts/page/7/index.html b/docs/posts/page/7/index.html index e8dbd0b58..fc7fa12b6 100644 --- a/docs/posts/page/7/index.html +++ b/docs/posts/page/7/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/posts/page/8/index.html b/docs/posts/page/8/index.html index cabd87f8d..dbfc52d7c 100644 --- a/docs/posts/page/8/index.html +++ b/docs/posts/page/8/index.html @@ -10,7 +10,7 @@ - + diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 8a784b765..360dc523d 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -3,19 +3,19 @@ xmlns:xhtml="http://www.w3.org/1999/xhtml"> https://alanorth.github.io/cgspace-notes/categories/ - 2021-12-08T08:47:33+02:00 + 2021-12-08T19:34:39+02:00 https://alanorth.github.io/cgspace-notes/ - 2021-12-08T08:47:33+02:00 + 2021-12-08T19:34:39+02:00 https://alanorth.github.io/cgspace-notes/2021-12/ - 2021-12-08T08:47:33+02:00 + 2021-12-08T19:34:39+02:00 https://alanorth.github.io/cgspace-notes/categories/notes/ - 2021-12-08T08:47:33+02:00 + 2021-12-08T19:34:39+02:00 https://alanorth.github.io/cgspace-notes/posts/ - 2021-12-08T08:47:33+02:00 + 2021-12-08T19:34:39+02:00 https://alanorth.github.io/cgspace-notes/2021-11/ 2021-11-30T16:44:30+02:00