Add new article and specific for notes stylization

This commit is contained in:
2025-08-20 02:33:57 +03:00
parent 29139c807d
commit ba0e6f92fe
13 changed files with 151 additions and 18 deletions

View File

@@ -2,10 +2,11 @@
layout: '../../layouts/index.astro'
title: 'Беларусский или белорусский'
description: 'Беларусский или белорусский - как писать?'
keys: 'nothing crypto free software libre self host'
keys: 'Беларусь или Белоруссия белорусский беларусский'
le: '19 Aug. 2025'
---
<div class="article">
## Введение
Вопрос "Беларусь или Белоруссия" здесь затронут не будет. Как беларус, могу сказать, что нам просто приятно, когда нас называют Беларусью, и мы считаем использование первого варианта минимальным уважением к нашему народу.
@@ -23,3 +24,4 @@ le: '19 Aug. 2025'
Вот только слово Беларусь пишется с `а`. Что же пошло не так? Это заимствование из беларусского, и сейчас представляет из себя один цельный корень. Это значит, что при добавлении других морфем, в том числе суффикса -ск-, а в корне должно сохраняться. То есть самый логичный вариант - писать `беларусский`.<br/>Ну либо переходить на `Белорусь`, но...
P.s. естественно, всё это не касается официальных докемнтов, потому что там, как это ни странно, необходимо использовать литератный стандарт.
</div>

View File

@@ -0,0 +1,48 @@
---
layout: '../../layouts/index.astro'
title: 'Restoration of Synapse after disappearing 1 year of database history'
description: '?'
keys: 'matrix synapse conduit'
le: '19 Aug. 2025'
---
<div class="article">
## Introduction
In July 2025, my PostgreSQL had broken, so I needed to restore it from my 1-y.o. backup. I was thinking about what to do, and my friend sent me [this](https://blog.erethon.com/blog/2023/06/21/what-happens-when-a-matrix-server-disappears/) article, so we understood what to do!
For example, there is a room called #example:example.org (roomid !example:example.org), whose member was @user:example.net.
The problem is that every server knows @user:example.net is in the room #example:example.org. But our server doesn't! So that is what we should aim at solving the problem.
## Architecture
We get 2 types of error messages:
- `synapse.handlers.receipts: [PUT-...] Ignoring receipt for room '!example:example.org' from server example.org as we're not in the room` (there is the same error message, but when you get a typing event from an unknown room)
- `synapse.federation.federation_server: [PUT-...] Ignoring PDU for unknown room_id: !example:example.org`
We can read the journal and parse the error message (I use a bash script to do that).
Okay, we have a room id! In the given article, the author is the only user of their server, so they can just send [POST /_matrix/client/v3/join/!example:example.org](https://spec.matrix.org/v1.15/client-server-api/#post_matrixclientv3joinroomidoralias) request, and everything will be good.
But my server has multiple users, so I can't use the easiest way. We need to get information about membership (so we need to get state).
As we are admins of our servers, we have their signing keys.
We will need them because we are going to get state via Federation API requests.
How? There are different ways to do that.
However, all of them require at least 1 event id, so firstly we need to do [GET /_matrix/federation/v1/timestamp_to_event](https://spec.matrix.org/v1.15/server-server-api/#get_matrixfederationv1timestamp_to_eventroomid).
Determining request parameters (?dir as direction (b[ackward] or f[orward]) and &ts as timestamp in Unix time format in milliseconds), we have just got either the last or the first event id! In my case, I chose the way of getting the last event, so then I'll have to make [GET /_matrix/federation/v1/state/!example:example.org?event_id=$event_id](https://spec.matrix.org/v1.15/server-server-api/#get_matrixfederationv1stateroomid), and I will get the actual state.
Of course, both of the requests, as I said, should be signed using your server's key ([how to sign events](https://spec.matrix.org/v1.15/server-server-api/#signing-events)).
<br />
(There is no support of timestamp_to_event in Conduit, so it would be a good idea to make support of requesting different servers)
After we receive the state, we need to parse it, but I think this can't make a difficulty.
As a result, we have a list of our users that were in the given room, like ["@user:example.net", "@anotheruser:example.net", "@exampleuser:example.net"].
Then, the simplest way is to get temporary user's auth token via [POST /_synapse/admin/v1/users/user_id/login](https://github.com/matrix-org/synapse/blob/develop/docs/admin_api/user_admin_api.md#login-as-a-user) and make [POST /_matrix/client/v3/join/!example:example.org](https://spec.matrix.org/v1.15/client-server-api/#post_matrixclientv3joinroomidoralias) from the name of the user using their token.
The problem is solved!
## External links
- [Article that gave me the idea](https://blog.erethon.com/blog/2023/06/21/what-happens-when-a-matrix-server-disappears/)
- [Matrix Federation API docs](https://spec.matrix.org/v1.15/server-server-api/)
- [How to sign Federation API requests](https://spec.matrix.org/v1.15/server-server-api/#signing-events)
- [GET /_matrix/federation/v1/state/!example:example.org?event_id=$event_id](https://spec.matrix.org/v1.15/server-server-api/#get_matrixfederationv1stateroomid)
- [GET /_matrix/federation/v1/timestamp_to_event](https://spec.matrix.org/v1.15/server-server-api/#get_matrixfederationv1timestamp_to_eventroomid)
- [Matrix Client API docs](https://spec.matrix.org/v1.15/server-server-api/)
- [POST /_matrix/client/v3/join/!example:example.org](https://spec.matrix.org/v1.15/client-server-api/#post_matrixclientv3joinroomidoralias)
- [Admin API POST /_synapse/admin/v1/users/user_id/login](https://github.com/matrix-org/synapse/blob/develop/docs/admin_api/user_admin_api.md#login-as-a-user)
</div>

View File

@@ -7,3 +7,6 @@ keys: 'nothing crypto free software libre self host'
## Linguistics
- [Беларусский или белорусский](/articles/belarusian)
## Computers
- [Restoration of Synapse after disappearing 1 year of database history](/articles/synapse-revitalization-script)

View File

@@ -38,6 +38,7 @@ body {
font-optical-sizing: auto;
font-style: normal;
height: 100vh;
}
ul, li {
@@ -240,3 +241,8 @@ pre.smaller {
height: auth;
}
}
.article {
padding-left: 18%;
padding-right: 18%;
}