mirror of
https://github.com/alanorth/cgspace-notes.git
synced 2024-11-29 09:58:22 +01:00
Update notes for 2020-12-14
This commit is contained in:
parent
20f00d1279
commit
403fa49d46
@ -241,4 +241,114 @@ $ curl -XDELETE http://localhost:9200/openrxv-items-final
|
|||||||
$ curl -XDELETE http://localhost:9200/openrxv-items-temp
|
$ curl -XDELETE http://localhost:9200/openrxv-items-temp
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- Peter asked me for a list of all submitters and approvers that were active recently on CGSpace
|
||||||
|
- I can probably extract that from the `dc.description.provenance` field, for example any that contains a 2020 date:
|
||||||
|
|
||||||
|
```console
|
||||||
|
localhost/dspace63= > SELECT * FROM metadatavalue WHERE metadata_field_id=28 AND text_value ~ '^.*on 2020-[0-9]{2}-*';
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2020-12-14
|
||||||
|
|
||||||
|
- The re-harvesting finished last night on AReS but there are no records in the `openrxv-items-final` index
|
||||||
|
- Strangely, there are 99,000 items in the temp index:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ curl -s 'http://localhost:9200/openrxv-items-temp/_count?q=*' | json_pp
|
||||||
|
{
|
||||||
|
"count" : 99992,
|
||||||
|
"_shards" : {
|
||||||
|
"skipped" : 0,
|
||||||
|
"total" : 1,
|
||||||
|
"failed" : 0,
|
||||||
|
"successful" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- I'm going to try to [clone](https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-clone-index.html) the temp index to the final one...
|
||||||
|
- First, set the `openrxv-items-temp` index to block writes (read only) and then clone it to `openrxv-items-final`:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ curl -X PUT "localhost:9200/openrxv-items-temp/_settings?pretty" -H 'Content-Type: application/json' -d'{"settings": {"index.blocks.write": true}}'
|
||||||
|
$ curl -s -X POST http://localhost:9200/openrxv-items-temp/_clone/openrxv-items-final
|
||||||
|
{"acknowledged":true,"shards_acknowledged":true,"index":"openrxv-items-final"}
|
||||||
|
$ curl -X PUT "localhost:9200/openrxv-items-temp/_settings?pretty" -H 'Content-Type: application/json' -d'{"settings": {"index.blocks.write": false}}'
|
||||||
|
```
|
||||||
|
|
||||||
|
- Now I see that the `openrxv-items-final` index has items, but there are still none in AReS Explorer UI!
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ curl -s 'http://localhost:9200/openrxv-items-final/_count?q=*&pretty'
|
||||||
|
{
|
||||||
|
"count" : 99992,
|
||||||
|
"_shards" : {
|
||||||
|
"total" : 1,
|
||||||
|
"successful" : 1,
|
||||||
|
"skipped" : 0,
|
||||||
|
"failed" : 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- The api logs show this from last night after the harvesting:
|
||||||
|
|
||||||
|
```console
|
||||||
|
[Nest] 92 - 12/13/2020, 1:58:52 PM [HarvesterService] Starting Harvest
|
||||||
|
[Nest] 92 - 12/13/2020, 10:50:20 PM [FetchConsumer] OnGlobalQueueDrained
|
||||||
|
[Nest] 92 - 12/13/2020, 11:00:20 PM [PluginsConsumer] OnGlobalQueueDrained
|
||||||
|
[Nest] 92 - 12/13/2020, 11:00:20 PM [HarvesterService] reindex function is called
|
||||||
|
(node:92) UnhandledPromiseRejectionWarning: ResponseError: index_not_found_exception
|
||||||
|
at IncomingMessage.<anonymous> (/backend/node_modules/@elastic/elasticsearch/lib/Transport.js:232:25)
|
||||||
|
at IncomingMessage.emit (events.js:326:22)
|
||||||
|
at endReadableNT (_stream_readable.js:1223:12)
|
||||||
|
at processTicksAndRejections (internal/process/task_queues.js:84:21)
|
||||||
|
```
|
||||||
|
|
||||||
|
- But I'm not sure why the frontend doesn't show any data despite there being documents in the index...
|
||||||
|
- I talked to Moayad and he reminded me that OpenRXV uses an alias to point to temp and final indexes, but the UI actually uses the `openrxv-items` index
|
||||||
|
- I cloned the `openrxv-items-final` index to `openrxv-items` index and now I see items in the explorer UI
|
||||||
|
- The PDF report was broken and I looked in the API logs and saw this:
|
||||||
|
|
||||||
|
```console
|
||||||
|
(node:94) UnhandledPromiseRejectionWarning: Error: Error: Could not find soffice binary
|
||||||
|
at ExportService.downloadFile (/backend/dist/export/services/export/export.service.js:51:19)
|
||||||
|
at processTicksAndRejections (internal/process/task_queues.js:97:5)
|
||||||
|
```
|
||||||
|
|
||||||
|
- I installed `unoconv` in the backend api container and now it works... but I wonder why this changed...
|
||||||
|
- Skype with Abenet and Peter to discuss AReS that will be shown to ILRI scientists this week
|
||||||
|
- Peter noticed that [this item](https://hdl.handle.net/10568/110133) from the [ILRI policy and research briefs](https://cgspace.cgiar.org/handle/10568/24450) collection is missing in AReS, despite it being added one month ago in CGSpace and me harvesting on AReS last night
|
||||||
|
- The item appears fine in the REST API when I check the items in that collection
|
||||||
|
- Peter also noticed that [this item](https://hdl.handle.net/10568/110447) appears twice in AReS
|
||||||
|
- The item is _not_ duplicated on CGSpace or in the REST API
|
||||||
|
- We noticed that there are 136 items in the ILRI policy and research briefs collection according to AReS, yet on CGSpace there are only 132
|
||||||
|
- This is confirmed in the REST API (using [query-json](https://github.com/davesnx/query-json)):
|
||||||
|
|
||||||
|
```
|
||||||
|
$ http --print b 'https://cgspace.cgiar.org/rest/collections/defee001-8cc8-4a6c-8ac8-21bb5adab2db?expand=all&limit=100&offset=0' | json_pp > /tmp/policy1.json
|
||||||
|
$ http --print b 'https://cgspace.cgiar.org/rest/collections/defee001-8cc8-4a6c-8ac8-21bb5adab2db?expand=all&limit=100&offset=100' | json_pp > /tmp/policy2.json
|
||||||
|
$ query-json '.items | length' /tmp/policy1.json
|
||||||
|
100
|
||||||
|
$ query-json '.items | length' /tmp/policy2.json
|
||||||
|
32
|
||||||
|
```
|
||||||
|
|
||||||
|
- I realized that the issue of missing/duplicate items in AReS might be because of this [REST API bug that causes /items to return items in non-deterministic order](https://jira.lyrasis.org/browse/DS-3849)
|
||||||
|
- I decided to cherry-pick the following two patches from DSpace 6.4 into our `6_x-prod` (6.3) branch:
|
||||||
|
- High CPU usage when calling the collection_id/items REST endpoint
|
||||||
|
- Jira: https://jira.lyrasis.org/browse/DS-4342
|
||||||
|
- c2e6719fa763e291b81b2d61da2f8c758fe38ff3
|
||||||
|
- REST API items resource returns items in non-deterministic order
|
||||||
|
- Jira: https://jira.lyrasis.org/browse/DS-3849
|
||||||
|
- 2a2ea0cb5d03e6da9355a2eff12aad667e465433
|
||||||
|
- After deploying the REST API fixes I decided to harvest from AReS again to see if the missing and duplicate items get fixed
|
||||||
|
- I made a backup of the current `openrxv-items-temp` index just in case:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ curl -X PUT "localhost:9200/openrxv-items-temp/_settings?pretty" -H 'Content-Type: application/json' -d'{"settings": {"index.blocks.write": true}}'
|
||||||
|
$ curl -s -X POST http://localhost:9200/openrxv-items-temp/_clone/openrxv-items-2020-12-14
|
||||||
|
$ curl -X PUT "localhost:9200/openrxv-items-temp/_settings?pretty" -H 'Content-Type: application/json' -d'{"settings": {"index.blocks.write": false}}'
|
||||||
|
```
|
||||||
|
|
||||||
<!-- vim: set sw=2 ts=2: -->
|
<!-- vim: set sw=2 ts=2: -->
|
||||||
|
@ -20,7 +20,7 @@ I started processing those (about 411,000 records):
|
|||||||
<meta property="og:type" content="article" />
|
<meta property="og:type" content="article" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/2020-12/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/2020-12/" />
|
||||||
<meta property="article:published_time" content="2020-12-01T11:32:54+02:00" />
|
<meta property="article:published_time" content="2020-12-01T11:32:54+02:00" />
|
||||||
<meta property="article:modified_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="article:modified_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -46,9 +46,9 @@ I started processing those (about 411,000 records):
|
|||||||
"@type": "BlogPosting",
|
"@type": "BlogPosting",
|
||||||
"headline": "December, 2020",
|
"headline": "December, 2020",
|
||||||
"url": "https://alanorth.github.io/cgspace-notes/2020-12/",
|
"url": "https://alanorth.github.io/cgspace-notes/2020-12/",
|
||||||
"wordCount": "1378",
|
"wordCount": "2037",
|
||||||
"datePublished": "2020-12-01T11:32:54+02:00",
|
"datePublished": "2020-12-01T11:32:54+02:00",
|
||||||
"dateModified": "2020-12-10T23:43:09+02:00",
|
"dateModified": "2020-12-13T16:16:10+02:00",
|
||||||
"author": {
|
"author": {
|
||||||
"@type": "Person",
|
"@type": "Person",
|
||||||
"name": "Alan Orth"
|
"name": "Alan Orth"
|
||||||
@ -364,6 +364,132 @@ Caused by: org.apache.http.TruncatedChunkException: Truncated chunk ( expected s
|
|||||||
</ul>
|
</ul>
|
||||||
<pre><code>$ curl -XDELETE http://localhost:9200/openrxv-items-final
|
<pre><code>$ curl -XDELETE http://localhost:9200/openrxv-items-final
|
||||||
$ curl -XDELETE http://localhost:9200/openrxv-items-temp
|
$ curl -XDELETE http://localhost:9200/openrxv-items-temp
|
||||||
|
</code></pre><ul>
|
||||||
|
<li>Peter asked me for a list of all submitters and approvers that were active recently on CGSpace
|
||||||
|
<ul>
|
||||||
|
<li>I can probably extract that from the <code>dc.description.provenance</code> field, for example any that contains a 2020 date:</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code class="language-console" data-lang="console">localhost/dspace63= > SELECT * FROM metadatavalue WHERE metadata_field_id=28 AND text_value ~ '^.*on 2020-[0-9]{2}-*';
|
||||||
|
</code></pre><h2 id="2020-12-14">2020-12-14</h2>
|
||||||
|
<ul>
|
||||||
|
<li>The re-harvesting finished last night on AReS but there are no records in the <code>openrxv-items-final</code> index
|
||||||
|
<ul>
|
||||||
|
<li>Strangely, there are 99,000 items in the temp index:</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code class="language-console" data-lang="console">$ curl -s 'http://localhost:9200/openrxv-items-temp/_count?q=*' | json_pp
|
||||||
|
{
|
||||||
|
"count" : 99992,
|
||||||
|
"_shards" : {
|
||||||
|
"skipped" : 0,
|
||||||
|
"total" : 1,
|
||||||
|
"failed" : 0,
|
||||||
|
"successful" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</code></pre><ul>
|
||||||
|
<li>I’m going to try to <a href="https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-clone-index.html">clone</a> the temp index to the final one…
|
||||||
|
<ul>
|
||||||
|
<li>First, set the <code>openrxv-items-temp</code> index to block writes (read only) and then clone it to <code>openrxv-items-final</code>:</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code class="language-console" data-lang="console">$ curl -X PUT "localhost:9200/openrxv-items-temp/_settings?pretty" -H 'Content-Type: application/json' -d'{"settings": {"index.blocks.write": true}}'
|
||||||
|
$ curl -s -X POST http://localhost:9200/openrxv-items-temp/_clone/openrxv-items-final
|
||||||
|
{"acknowledged":true,"shards_acknowledged":true,"index":"openrxv-items-final"}
|
||||||
|
$ curl -X PUT "localhost:9200/openrxv-items-temp/_settings?pretty" -H 'Content-Type: application/json' -d'{"settings": {"index.blocks.write": false}}'
|
||||||
|
</code></pre><ul>
|
||||||
|
<li>Now I see that the <code>openrxv-items-final</code> index has items, but there are still none in AReS Explorer UI!</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code class="language-console" data-lang="console">$ curl -s 'http://localhost:9200/openrxv-items-final/_count?q=*&pretty'
|
||||||
|
{
|
||||||
|
"count" : 99992,
|
||||||
|
"_shards" : {
|
||||||
|
"total" : 1,
|
||||||
|
"successful" : 1,
|
||||||
|
"skipped" : 0,
|
||||||
|
"failed" : 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</code></pre><ul>
|
||||||
|
<li>The api logs show this from last night after the harvesting:</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code class="language-console" data-lang="console">[Nest] 92 - 12/13/2020, 1:58:52 PM [HarvesterService] Starting Harvest
|
||||||
|
[Nest] 92 - 12/13/2020, 10:50:20 PM [FetchConsumer] OnGlobalQueueDrained
|
||||||
|
[Nest] 92 - 12/13/2020, 11:00:20 PM [PluginsConsumer] OnGlobalQueueDrained
|
||||||
|
[Nest] 92 - 12/13/2020, 11:00:20 PM [HarvesterService] reindex function is called
|
||||||
|
(node:92) UnhandledPromiseRejectionWarning: ResponseError: index_not_found_exception
|
||||||
|
at IncomingMessage.<anonymous> (/backend/node_modules/@elastic/elasticsearch/lib/Transport.js:232:25)
|
||||||
|
at IncomingMessage.emit (events.js:326:22)
|
||||||
|
at endReadableNT (_stream_readable.js:1223:12)
|
||||||
|
at processTicksAndRejections (internal/process/task_queues.js:84:21)
|
||||||
|
</code></pre><ul>
|
||||||
|
<li>But I’m not sure why the frontend doesn’t show any data despite there being documents in the index…</li>
|
||||||
|
<li>I talked to Moayad and he reminded me that OpenRXV uses an alias to point to temp and final indexes, but the UI actually uses the <code>openrxv-items</code> index</li>
|
||||||
|
<li>I cloned the <code>openrxv-items-final</code> index to <code>openrxv-items</code> index and now I see items in the explorer UI</li>
|
||||||
|
<li>The PDF report was broken and I looked in the API logs and saw this:</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code class="language-console" data-lang="console">(node:94) UnhandledPromiseRejectionWarning: Error: Error: Could not find soffice binary
|
||||||
|
at ExportService.downloadFile (/backend/dist/export/services/export/export.service.js:51:19)
|
||||||
|
at processTicksAndRejections (internal/process/task_queues.js:97:5)
|
||||||
|
</code></pre><ul>
|
||||||
|
<li>I installed <code>unoconv</code> in the backend api container and now it works… but I wonder why this changed…</li>
|
||||||
|
<li>Skype with Abenet and Peter to discuss AReS that will be shown to ILRI scientists this week
|
||||||
|
<ul>
|
||||||
|
<li>Peter noticed that <a href="https://hdl.handle.net/10568/110133">this item</a> from the <a href="https://cgspace.cgiar.org/handle/10568/24450">ILRI policy and research briefs</a> collection is missing in AReS, despite it being added one month ago in CGSpace and me harvesting on AReS last night
|
||||||
|
<ul>
|
||||||
|
<li>The item appears fine in the REST API when I check the items in that collection</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Peter also noticed that <a href="https://hdl.handle.net/10568/110447">this item</a> appears twice in AReS
|
||||||
|
<ul>
|
||||||
|
<li>The item is <em>not</em> duplicated on CGSpace or in the REST API</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>We noticed that there are 136 items in the ILRI policy and research briefs collection according to AReS, yet on CGSpace there are only 132
|
||||||
|
<ul>
|
||||||
|
<li>This is confirmed in the REST API (using <a href="https://github.com/davesnx/query-json">query-json</a>):</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code>$ http --print b 'https://cgspace.cgiar.org/rest/collections/defee001-8cc8-4a6c-8ac8-21bb5adab2db?expand=all&limit=100&offset=0' | json_pp > /tmp/policy1.json
|
||||||
|
$ http --print b 'https://cgspace.cgiar.org/rest/collections/defee001-8cc8-4a6c-8ac8-21bb5adab2db?expand=all&limit=100&offset=100' | json_pp > /tmp/policy2.json
|
||||||
|
$ query-json '.items | length' /tmp/policy1.json
|
||||||
|
100
|
||||||
|
$ query-json '.items | length' /tmp/policy2.json
|
||||||
|
32
|
||||||
|
</code></pre><ul>
|
||||||
|
<li>I realized that the issue of missing/duplicate items in AReS might be because of this <a href="https://jira.lyrasis.org/browse/DS-3849">REST API bug that causes /items to return items in non-deterministic order</a></li>
|
||||||
|
<li>I decided to cherry-pick the following two patches from DSpace 6.4 into our <code>6_x-prod</code> (6.3) branch:
|
||||||
|
<ul>
|
||||||
|
<li>High CPU usage when calling the collection_id/items REST endpoint
|
||||||
|
<ul>
|
||||||
|
<li>Jira: <a href="https://jira.lyrasis.org/browse/DS-4342">https://jira.lyrasis.org/browse/DS-4342</a></li>
|
||||||
|
<li>c2e6719fa763e291b81b2d61da2f8c758fe38ff3</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>REST API items resource returns items in non-deterministic order
|
||||||
|
<ul>
|
||||||
|
<li>Jira: <a href="https://jira.lyrasis.org/browse/DS-3849">https://jira.lyrasis.org/browse/DS-3849</a></li>
|
||||||
|
<li>2a2ea0cb5d03e6da9355a2eff12aad667e465433</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>After deploying the REST API fixes I decided to harvest from AReS again to see if the missing and duplicate items get fixed
|
||||||
|
<ul>
|
||||||
|
<li>I made a backup of the current <code>openrxv-items-temp</code> index just in case:</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<pre><code class="language-console" data-lang="console">$ curl -X PUT "localhost:9200/openrxv-items-temp/_settings?pretty" -H 'Content-Type: application/json' -d'{"settings": {"index.blocks.write": true}}'
|
||||||
|
$ curl -s -X POST http://localhost:9200/openrxv-items-temp/_clone/openrxv-items-2020-12-14
|
||||||
|
$ curl -X PUT "localhost:9200/openrxv-items-temp/_settings?pretty" -H 'Content-Type: application/json' -d'{"settings": {"index.blocks.write": false}}'
|
||||||
</code></pre><!-- raw HTML omitted -->
|
</code></pre><!-- raw HTML omitted -->
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/categories/notes/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
<meta property="og:description" content="Documenting day-to-day work on the [CGSpace](https://cgspace.cgiar.org) repository." />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/posts/" />
|
||||||
<meta property="og:updated_time" content="2020-12-10T23:43:09+02:00" />
|
<meta property="og:updated_time" content="2020-12-13T16:16:10+02:00" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,27 +4,27 @@
|
|||||||
|
|
||||||
<url>
|
<url>
|
||||||
<loc>https://alanorth.github.io/cgspace-notes/categories/</loc>
|
<loc>https://alanorth.github.io/cgspace-notes/categories/</loc>
|
||||||
<lastmod>2020-12-10T23:43:09+02:00</lastmod>
|
<lastmod>2020-12-13T16:16:10+02:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
|
|
||||||
<url>
|
<url>
|
||||||
<loc>https://alanorth.github.io/cgspace-notes/</loc>
|
<loc>https://alanorth.github.io/cgspace-notes/</loc>
|
||||||
<lastmod>2020-12-10T23:43:09+02:00</lastmod>
|
<lastmod>2020-12-13T16:16:10+02:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
|
|
||||||
<url>
|
<url>
|
||||||
<loc>https://alanorth.github.io/cgspace-notes/2020-12/</loc>
|
<loc>https://alanorth.github.io/cgspace-notes/2020-12/</loc>
|
||||||
<lastmod>2020-12-10T23:43:09+02:00</lastmod>
|
<lastmod>2020-12-13T16:16:10+02:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
|
|
||||||
<url>
|
<url>
|
||||||
<loc>https://alanorth.github.io/cgspace-notes/categories/notes/</loc>
|
<loc>https://alanorth.github.io/cgspace-notes/categories/notes/</loc>
|
||||||
<lastmod>2020-12-10T23:43:09+02:00</lastmod>
|
<lastmod>2020-12-13T16:16:10+02:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
|
|
||||||
<url>
|
<url>
|
||||||
<loc>https://alanorth.github.io/cgspace-notes/posts/</loc>
|
<loc>https://alanorth.github.io/cgspace-notes/posts/</loc>
|
||||||
<lastmod>2020-12-10T23:43:09+02:00</lastmod>
|
<lastmod>2020-12-13T16:16:10+02:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
|
|
||||||
<url>
|
<url>
|
||||||
|
Loading…
Reference in New Issue
Block a user