Compare commits
9 Commits
1b86a1c30b
...
main
Author | SHA1 | Date | |
---|---|---|---|
0f692aba68
|
|||
92a0078b8b
|
|||
63ac26acb8
|
|||
2d38a75555
|
|||
3a2271ebb6
|
|||
ba0e6f92fe
|
|||
29139c807d
|
|||
3a82701008
|
|||
b8060817e5
|
File diff suppressed because one or more lines are too long
21
dist/articles/belarusian/index.html
vendored
21
dist/articles/belarusian/index.html
vendored
@@ -5,34 +5,27 @@
|
|||||||
<meta name="viewport" content="width=device-width">
|
<meta name="viewport" content="width=device-width">
|
||||||
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
||||||
<meta name="generator" content="Astro v2.10.7">
|
<meta name="generator" content="Astro v2.10.7">
|
||||||
<meta name="description" content="{frontmatter.description}">
|
<meta name="description" content="Беларусский или белорусский - как писать?">
|
||||||
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}">
|
<meta name="keywords" content="nothing.run nothing privacy free libre software floss self host">
|
||||||
|
<meta name="keywords" content="Беларусь или Белоруссия белорусский беларусский">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||||
|
|
||||||
<title>Беларусский или белорусский</title>
|
<title>Беларусский или белорусский</title>
|
||||||
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head>
|
<link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
|
||||||
<body>
|
<body>
|
||||||
<div class="header astro-HPNW4VWY">
|
<div class="header astro-HPNW4VWY">
|
||||||
<a href="/" class="astro-HPNW4VWY">~/</a>
|
<a href="/" class="astro-HPNW4VWY">~/</a>
|
||||||
<a href="/contact.html" class="astro-HPNW4VWY">Contact</a>
|
<a href="/contact" class="astro-HPNW4VWY">Contact</a>
|
||||||
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
|
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
|
||||||
<a href="/news" class="astro-HPNW4VWY">News</a>
|
<a href="/news" class="astro-HPNW4VWY">News</a>
|
||||||
<a href="/notes.html" class="astro-HPNW4VWY">Notes</a>
|
<a href="/notes" class="astro-HPNW4VWY">Notes</a>
|
||||||
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
|
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h1>Беларусский или белорусский</h1>
|
<h1>Беларусский или белорусский</h1>
|
||||||
|
|
||||||
<h2 id="введение">Введение</h2>
|
<div class="article"><h2 id="введение">Введение</h2><p>Вопрос “Беларусь или Белоруссия” здесь затронут не будет. Как беларус, могу сказать, что нам просто приятно, когда нас называют Беларусью, и мы считаем использование первого варианта минимальным уважением к нашему народу.</p><p>Но отдельная тема - писать белорусский или беларусский. Этот вопрос спорный, но я постараюсь ответить на него с точки зрения русского языка.</p><h2 id="морфологический-принцип">Морфологический принцип</h2><p>В отличие от беларусского языка, русская орфография имеет в своей основе морфологический принцип, то есть по идее вне зависимости от своей позиции морфема всегда пишется одинаково. Например, са<strong>д</strong> - са<strong>д</strong>ы (на конце всегда <code>д</code>).<br/>Исключения в виде <code>без-</code> - <code>без-</code> не учитываются, так как они редки.</p><h2 id="как-писать">Как писать?</h2><p>Для начала, в литературном стандарте закреплена форма с буквой <code>о</code>. Но в таком случае слово Беларусь должно было бы писаться с <code>о</code>, так как соеденительной морфемой в русском <code>а</code> быть не может.</p><p>Вот только слово Беларусь пишется с <code>а</code>. Что же пошло не так? Это заимствование из беларусского, и сейчас представляет из себя один цельный корень. Это значит, что при добавлении других морфем, в том числе суффикса -ск-, а в корне должно сохраняться. То есть самый логичный вариант - писать <code>беларусский</code>.<br/>Ну либо переходить на <code>Белорусь</code>, но…</p><p>P.s. естественно, всё это не касается официальных докемнтов, потому что там, как это ни странно, необходимо использовать литератный стандарт.</p></div>
|
||||||
<p>Вопрос “Беларусь или Белоруссия” здесь затронут не будет. Как беларус, могу сказать, что нам просто приятно, когда нас называют Беларусью, и мы считаем использование первого варианта минимальным уважением к нашему народу.</p>
|
|
||||||
<p>Но отдельная тема - писать белорусский или беларусский. Этот вопрос спорный, но я постараюсь ответить на него с точки зрения русского языка.</p>
|
|
||||||
<h2 id="морфологический-принцип">Морфологический принцип</h2>
|
|
||||||
<p>В отличие от беларусского языка, русская орфография имеет в своей основе морфологический принцип, то есть по идее вне зависимости от своей позиции морфема всегда пишется одинаково. Например, са<strong>д</strong> - са<strong>д</strong>ы (на конце всегда <code>д</code>).<br/>Исключения в виде <code>без-</code> - <code>без-</code> не учитываются, так как они редки.</p>
|
|
||||||
<h2 id="как-писать">Как писать?</h2>
|
|
||||||
<p>Для начала, в литературном стандарте закреплена форма с буквой <code>о</code>. Но в таком случае слово Беларусь должно было бы писаться с <code>о</code>, так как соеденительной морфемой в русском <code>а</code> быть не может.</p>
|
|
||||||
<p>Вот только слово Беларусь пишется с <code>а</code>. Что же пошло не так? Это заимствование из беларусского, и сейчас представляет из себя один цельный корень. Это значит, что при добавлении других морфем, в том числе суффикса -ск-, а в корне должно сохраняться. То есть самый логичный вариант - писать <code>беларусский</code>.<br/>Ну либо переходить на <code>Белорусь</code>, но…</p>
|
|
||||||
<p>P.s. естественно, всё это не касается официальных докемнтов, потому что там, как это ни странно, необходимо использовать литератный стандарт.</p>
|
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<main>
|
<main>
|
||||||
<pre> .--.
|
<pre> .--.
|
||||||
|
79
dist/articles/synapse-revitalization-script/index.html
vendored
Normal file
79
dist/articles/synapse-revitalization-script/index.html
vendored
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width">
|
||||||
|
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
||||||
|
<meta name="generator" content="Astro v2.10.7">
|
||||||
|
<meta name="description" content="Restoration of Synapse after losing 1 year of database history">
|
||||||
|
<meta name="keywords" content="nothing.run nothing privacy free libre software floss self host">
|
||||||
|
<meta name="keywords" content="matrix synapse conduit postgres">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||||
|
|
||||||
|
<title>Restoration of Synapse after losing 1 year of database history</title>
|
||||||
|
<link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
|
||||||
|
<body>
|
||||||
|
<div class="header astro-HPNW4VWY">
|
||||||
|
<a href="/" class="astro-HPNW4VWY">~/</a>
|
||||||
|
<a href="/contact" class="astro-HPNW4VWY">Contact</a>
|
||||||
|
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
|
||||||
|
<a href="/news" class="astro-HPNW4VWY">News</a>
|
||||||
|
<a href="/notes" class="astro-HPNW4VWY">Notes</a>
|
||||||
|
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h1>Restoration of Synapse after losing 1 year of database history</h1>
|
||||||
|
|
||||||
|
<div class="article"><h2 id="introduction">Introduction</h2><p>In July 2025, my Synapse 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 <a href="https://blog.erethon.com/blog/2023/06/21/what-happens-when-a-matrix-server-disappears/">this</a> article, so we understood what to do!</p><p>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.</p><h2 id="architecture">Architecture</h2><p>We get 2 types of error messages:</p><ul>
|
||||||
|
<li><code>synapse.handlers.receipts: [PUT-...] Ignoring receipt for room '!example:example.org' from server example.org as we're not in the room</code> (there is the same error message, but when you get a typing event from an unknown room)</li>
|
||||||
|
<li><code>synapse.federation.federation_server: [PUT-...] Ignoring PDU for unknown room_id: !example:example.org</code></li>
|
||||||
|
</ul><p>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 <a href="https://spec.matrix.org/v1.15/client-server-api/#post_matrixclientv3joinroomidoralias">POST /_matrix/client/v3/join/!example:example.org</a> 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).</p><p>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 <a href="https://spec.matrix.org/v1.15/server-server-api/#get_matrixfederationv1timestamp_to_eventroomid">GET /_matrix/federation/v1/timestamp_to_event</a>.
|
||||||
|
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 <a href="https://spec.matrix.org/v1.15/server-server-api/#get_matrixfederationv1stateroomid">GET /_matrix/federation/v1/state/!example:example.org?event_id=$event_id</a>, and I will get the actual state.
|
||||||
|
Of course, both of the requests, as I said, should be signed using your server’s key (<a href="https://spec.matrix.org/v1.15/server-server-api/#signing-events">how to sign events</a>).</p><br/><p>(There is no support of timestamp_to_event in Conduit, so it would be a good idea to make support of requesting different servers)</p><p>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 <a href="https://github.com/matrix-org/synapse/blob/develop/docs/admin_api/user_admin_api.md#login-as-a-user">POST /_synapse/admin/v1/users/user_id/login</a> and make <a href="https://spec.matrix.org/v1.15/client-server-api/#post_matrixclientv3joinroomidoralias">POST /_matrix/client/v3/join/!example:example.org</a> from the name of the user using their token.
|
||||||
|
The problem is solved!</p><h2 id="external-links">External links</h2><ul>
|
||||||
|
<li><a href="https://blog.erethon.com/blog/2023/06/21/what-happens-when-a-matrix-server-disappears/">Article that gave me the idea</a></li>
|
||||||
|
<li><a href="https://spec.matrix.org/v1.15/server-server-api/">Matrix Federation API docs</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="https://spec.matrix.org/v1.15/server-server-api/#signing-events">How to sign Federation API requests</a></li>
|
||||||
|
<li><a href="https://spec.matrix.org/v1.15/server-server-api/#get_matrixfederationv1stateroomid">GET /_matrix/federation/v1/state/!example:example.org?event_id=$event_id</a></li>
|
||||||
|
<li><a href="https://spec.matrix.org/v1.15/server-server-api/#get_matrixfederationv1timestamp_to_eventroomid">GET /_matrix/federation/v1/timestamp_to_event</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="https://spec.matrix.org/v1.15/server-server-api/">Matrix Client API docs</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="https://spec.matrix.org/v1.15/client-server-api/#post_matrixclientv3joinroomidoralias">POST /_matrix/client/v3/join/!example:example.org</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="https://github.com/matrix-org/synapse/blob/develop/docs/admin_api/user_admin_api.md#login-as-a-user">Admin API POST /_synapse/admin/v1/users/user_id/login</a></li>
|
||||||
|
</ul></div>
|
||||||
|
<div id="footer">
|
||||||
|
<main>
|
||||||
|
<pre> .--.
|
||||||
|
." o \__
|
||||||
|
_.-" ,( `
|
||||||
|
_.-" ,;;|
|
||||||
|
_.-=" _," ,,;;;'
|
||||||
|
.-"`_.-"``-..,,;;;;:'
|
||||||
|
`"'` `\`\
|
||||||
|
/^\\\
|
||||||
|
</pre>
|
||||||
|
</main>
|
||||||
|
<aside>
|
||||||
|
<b>Made with ♥</b> by Thary<br>
|
||||||
|
<!-- Website sources are available on <a href="https://git.vector1.dev/thary/website">Gitea</a>!<br> -->
|
||||||
|
<!-- All content is in Public domain and licensed under <a href="https://creativecommons.org/publicdomain/zero/1.0/">CC0</a><br> -->
|
||||||
|
Logo is created by <a href="https://houl.floof.company/">Houl</a><br>
|
||||||
|
ASCII arts are taken from <a href="https://web.archive.org/web/20010420182629/http://www.geocities.com/spunk1111/indexjava.htm">this website</a>
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body></html>
|
BIN
dist/cinny-preview.png
vendored
Normal file
BIN
dist/cinny-preview.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 290 KiB |
23
dist/contact/index.html
vendored
23
dist/contact/index.html
vendored
@@ -5,24 +5,25 @@
|
|||||||
<meta name="viewport" content="width=device-width">
|
<meta name="viewport" content="width=device-width">
|
||||||
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
||||||
<meta name="generator" content="Astro v2.10.7">
|
<meta name="generator" content="Astro v2.10.7">
|
||||||
<meta name="description" content="{frontmatter.description}">
|
<meta name="description" content="Contact nothing.run & nothing.run community">
|
||||||
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}">
|
<meta name="keywords" content="nothing.run nothing privacy free libre software floss self host">
|
||||||
|
<meta name="keywords">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||||
|
|
||||||
<title>Contact</title>
|
<title>Contact us</title>
|
||||||
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head>
|
<link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
|
||||||
<body>
|
<body>
|
||||||
<div class="header astro-HPNW4VWY">
|
<div class="header astro-HPNW4VWY">
|
||||||
<a href="/" class="astro-HPNW4VWY">~/</a>
|
<a href="/" class="astro-HPNW4VWY">~/</a>
|
||||||
<a href="/contact.html" class="astro-HPNW4VWY">Contact</a>
|
<a href="/contact" class="astro-HPNW4VWY">Contact</a>
|
||||||
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
|
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
|
||||||
<a href="/news" class="astro-HPNW4VWY">News</a>
|
<a href="/news" class="astro-HPNW4VWY">News</a>
|
||||||
<a href="/notes.html" class="astro-HPNW4VWY">Notes</a>
|
<a href="/notes" class="astro-HPNW4VWY">Notes</a>
|
||||||
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
|
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h1>Contact</h1>
|
<h1>Contact us</h1>
|
||||||
|
|
||||||
|
|
||||||
<div class="asciicontainer">
|
<div class="asciicontainer">
|
||||||
@@ -56,10 +57,10 @@
|
|||||||
<div>
|
<div>
|
||||||
<h2>Our chat</h2>
|
<h2>Our chat</h2>
|
||||||
<p>Nothing.run has chat in Matrix. Join it to get information about downtimes and updates, help, to suggest something that could make nothing.run better</p>
|
<p>Nothing.run has chat in Matrix. Join it to get information about downtimes and updates, help, to suggest something that could make nothing.run better</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Our Matrix space <a href="https://matrix.to/#/#nothingrun:nothing.run">#nothingrun:nothing.run</a></li>
|
<li>Our Matrix space <a href="https://matrix.to/#/#nothingrun:nothing.run">#nothingrun:nothing.run</a></li>
|
||||||
<li>Our Matrix chat <a href="https://matrix.to/#/#localhost:nothing.run">#localhost:nothing.run</a></li>
|
<li>Our Matrix chat <a href="https://matrix.to/#/#localhost:nothing.run">#localhost:nothing.run</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
11
dist/donate/index.html
vendored
11
dist/donate/index.html
vendored
@@ -5,20 +5,21 @@
|
|||||||
<meta name="viewport" content="width=device-width">
|
<meta name="viewport" content="width=device-width">
|
||||||
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
||||||
<meta name="generator" content="Astro v2.10.7">
|
<meta name="generator" content="Astro v2.10.7">
|
||||||
<meta name="description" content="{frontmatter.description}">
|
<meta name="description" content="Donate us :3">
|
||||||
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}">
|
<meta name="keywords" content="nothing.run nothing privacy free libre software floss self host">
|
||||||
|
<meta name="keywords">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||||
|
|
||||||
<title>Donate :3</title>
|
<title>Donate :3</title>
|
||||||
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head>
|
<link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
|
||||||
<body>
|
<body>
|
||||||
<div class="header astro-HPNW4VWY">
|
<div class="header astro-HPNW4VWY">
|
||||||
<a href="/" class="astro-HPNW4VWY">~/</a>
|
<a href="/" class="astro-HPNW4VWY">~/</a>
|
||||||
<a href="/contact.html" class="astro-HPNW4VWY">Contact</a>
|
<a href="/contact" class="astro-HPNW4VWY">Contact</a>
|
||||||
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
|
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
|
||||||
<a href="/news" class="astro-HPNW4VWY">News</a>
|
<a href="/news" class="astro-HPNW4VWY">News</a>
|
||||||
<a href="/notes.html" class="astro-HPNW4VWY">Notes</a>
|
<a href="/notes" class="astro-HPNW4VWY">Notes</a>
|
||||||
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
|
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
BIN
dist/element-preview.png
vendored
Normal file
BIN
dist/element-preview.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 775 KiB |
11
dist/index.html
vendored
11
dist/index.html
vendored
@@ -5,20 +5,21 @@
|
|||||||
<meta name="viewport" content="width=device-width">
|
<meta name="viewport" content="width=device-width">
|
||||||
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
||||||
<meta name="generator" content="Astro v2.10.7">
|
<meta name="generator" content="Astro v2.10.7">
|
||||||
<meta name="description" content="{frontmatter.description}">
|
<meta name="description" content="Librehoster, crypto- and infoanarchysts, free software fans">
|
||||||
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}">
|
<meta name="keywords" content="nothing.run nothing privacy free libre software floss self host">
|
||||||
|
<meta name="keywords" content="nothing crypto free software libre self host">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||||
|
|
||||||
<title>nothing.run</title>
|
<title>nothing.run</title>
|
||||||
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head>
|
<link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
|
||||||
<body>
|
<body>
|
||||||
<div class="header astro-HPNW4VWY">
|
<div class="header astro-HPNW4VWY">
|
||||||
<a href="/" class="astro-HPNW4VWY">~/</a>
|
<a href="/" class="astro-HPNW4VWY">~/</a>
|
||||||
<a href="/contact.html" class="astro-HPNW4VWY">Contact</a>
|
<a href="/contact" class="astro-HPNW4VWY">Contact</a>
|
||||||
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
|
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
|
||||||
<a href="/news" class="astro-HPNW4VWY">News</a>
|
<a href="/news" class="astro-HPNW4VWY">News</a>
|
||||||
<a href="/notes.html" class="astro-HPNW4VWY">Notes</a>
|
<a href="/notes" class="astro-HPNW4VWY">Notes</a>
|
||||||
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
|
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
35
dist/matrix/index.html
vendored
35
dist/matrix/index.html
vendored
@@ -5,33 +5,45 @@
|
|||||||
<meta name="viewport" content="width=device-width">
|
<meta name="viewport" content="width=device-width">
|
||||||
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
||||||
<meta name="generator" content="Astro v2.10.7">
|
<meta name="generator" content="Astro v2.10.7">
|
||||||
<meta name="description" content="{frontmatter.description}">
|
<meta name="description" content="nothing.run-s matrix instance info">
|
||||||
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}">
|
<meta name="keywords" content="nothing.run nothing privacy free libre software floss self host">
|
||||||
|
<meta name="keywords" content="matrix element synapse messenger IM">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||||
|
|
||||||
<title>Matrix</title>
|
<title>Matrix</title>
|
||||||
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head>
|
<link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
|
||||||
<body>
|
<body>
|
||||||
<div class="header astro-HPNW4VWY">
|
<div class="header astro-HPNW4VWY">
|
||||||
<a href="/" class="astro-HPNW4VWY">~/</a>
|
<a href="/" class="astro-HPNW4VWY">~/</a>
|
||||||
<a href="/contact.html" class="astro-HPNW4VWY">Contact</a>
|
<a href="/contact" class="astro-HPNW4VWY">Contact</a>
|
||||||
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
|
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
|
||||||
<a href="/news" class="astro-HPNW4VWY">News</a>
|
<a href="/news" class="astro-HPNW4VWY">News</a>
|
||||||
<a href="/notes.html" class="astro-HPNW4VWY">Notes</a>
|
<a href="/notes" class="astro-HPNW4VWY">Notes</a>
|
||||||
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
|
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h1>Matrix</h1>
|
<h1>Matrix</h1>
|
||||||
|
|
||||||
<p><a href="https://matrix.org"><strong>Matrix</strong></a> is modern federative network for communication. That means that users from different servers can interact with each other. We host our own Matrix network server. There also is a great cross-plattform-client available!</p>
|
<p><a href="https://matrix.org"><strong>Matrix</strong></a> is modern federative network for communication. That means that users from different servers can interact with each other. We host our own Matrix network server. There also is a great cross-plattform-client available!</p>
|
||||||
|
<h2 id="login-data">Login data</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Server name: nothing.run</li>
|
||||||
|
<li>Server address: <a href="https://matrix.nothing.run">https://matrix.nothing.run</a></li>
|
||||||
|
</ul>
|
||||||
<h2 id="our-room">Our room</h2>
|
<h2 id="our-room">Our room</h2>
|
||||||
|
<p>Nothing.run has chat in Matrix. Join it to get information about downtimes and updates, help, to suggest something that could make nothing.run better</p>
|
||||||
|
<ul>
|
||||||
|
<li>Our Matrix space <a href="https://matrix.to/#/#nothingrun:nothing.run">#nothingrun:nothing.run</a></li>
|
||||||
|
<li>Our Matrix chat <a href="https://matrix.to/#/#localhost:nothing.run">#localhost:nothing.run</a></li>
|
||||||
|
</ul>
|
||||||
<h2 id="clients">Clients</h2>
|
<h2 id="clients">Clients</h2>
|
||||||
<h3 id="web-clients">Web-clients</h3>
|
<h3 id="web-clients">Web-clients</h3>
|
||||||
<ul>
|
<div class="bigcontainer"><div class="matrixclient"><ul>
|
||||||
<li><a href="https://cinny.nothing.run">Cinny</a> - modern and beautiful Matrix web client</li>
|
<li><a href="https://cinny.nothing.run">Cinny</a> - modern and beautiful Matrix web client</li>
|
||||||
|
</ul><img src="/cinny-preview.png" alt="Cinny preview"/></div><div class="matrixclient"><ul>
|
||||||
<li><a href="https://element.nothing.run">Element</a> - the most popular and functional Matrix client</li>
|
<li><a href="https://element.nothing.run">Element</a> - the most popular and functional Matrix client</li>
|
||||||
</ul>
|
</ul><img src="/element-preview.png" alt="Element preview"/></div></div>
|
||||||
<h3 id="mobile-clients">Mobile clients</h3>
|
<h3 id="mobile-clients">Mobile clients</h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="https://github.com/element-hq/element-android">Element</a> - very buggy and uncomfortable client</li>
|
<li><a href="https://github.com/element-hq/element-android">Element</a> - very buggy and uncomfortable client</li>
|
||||||
@@ -42,13 +54,10 @@
|
|||||||
</ul>
|
</ul>
|
||||||
<h3 id="desktop-clients">Desktop clients</h3>
|
<h3 id="desktop-clients">Desktop clients</h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="https://iamb.chat/">iamb</a> - written in Rust terminal-based client with Vim keybindings</li>
|
<li><a href="https://iamb.chat/">iamb</a> & <a href="https://github.com/gomuks/gomuks">gomuks</a> - written in Rust and Go terminal-based clients. iamb uses Vim-like keybindings</li>
|
||||||
<li><a href="https://github.com/gomuks/gomuks">gomuks</a> - a terminal Matrix client written in Go</li>
|
<li><a href="https://wiki.gnome.org/Apps/Fractal">Fractal</a>, <a href="https://apps.kde.org/neochat/">NeoChat</a>, <a href="https://nheko-reborn.github.io/">Nheko</a> - nice desktop-oriented clients. Can be buggy sometimes</li>
|
||||||
|
<li>You can use Element, Schildi and Cinny Web as desktop clients via Electron. It’s a less performant way to message from Matrix, but… You can! :)</li>
|
||||||
<li><a href="https://github.com/alphapapa/ement.el">Ement.el</a> - really? Are you so crazy to chat from Emacs???</li>
|
<li><a href="https://github.com/alphapapa/ement.el">Ement.el</a> - really? Are you so crazy to chat from Emacs???</li>
|
||||||
<li>[Fractal]</li>
|
|
||||||
<li>[NeoChat]</li>
|
|
||||||
<li>[Nheko]</li>
|
|
||||||
<li>You can use Element, Schildi and Cinny Web as desktop clients through Electron. It’s unperformance way to use Matrix, but… You can! :)</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<main>
|
<main>
|
||||||
|
17
dist/news/index.html
vendored
17
dist/news/index.html
vendored
@@ -5,26 +5,31 @@
|
|||||||
<meta name="viewport" content="width=device-width">
|
<meta name="viewport" content="width=device-width">
|
||||||
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
||||||
<meta name="generator" content="Astro v2.10.7">
|
<meta name="generator" content="Astro v2.10.7">
|
||||||
<meta name="description" content="{frontmatter.description}">
|
<meta name="description" content="Librehoster, crypto- and infoanarchysts, free software fans">
|
||||||
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}">
|
<meta name="keywords" content="nothing.run nothing privacy free libre software floss self host">
|
||||||
|
<meta name="keywords">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||||
|
|
||||||
<title>nothing.run</title>
|
<title>nothing.run</title>
|
||||||
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head>
|
<link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
|
||||||
<body>
|
<body>
|
||||||
<div class="header astro-HPNW4VWY">
|
<div class="header astro-HPNW4VWY">
|
||||||
<a href="/" class="astro-HPNW4VWY">~/</a>
|
<a href="/" class="astro-HPNW4VWY">~/</a>
|
||||||
<a href="/contact.html" class="astro-HPNW4VWY">Contact</a>
|
<a href="/contact" class="astro-HPNW4VWY">Contact</a>
|
||||||
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
|
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
|
||||||
<a href="/news" class="astro-HPNW4VWY">News</a>
|
<a href="/news" class="astro-HPNW4VWY">News</a>
|
||||||
<a href="/notes.html" class="astro-HPNW4VWY">Notes</a>
|
<a href="/notes" class="astro-HPNW4VWY">Notes</a>
|
||||||
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
|
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h1>nothing.run</h1>
|
<h1>nothing.run</h1>
|
||||||
|
|
||||||
<h3 id="9-august-2025">9 August 2025</h3>
|
<h3 id="23-august-2025">23 August 2025</h3>
|
||||||
|
<ul>
|
||||||
|
<li>We have switched from Contabo nameservers to <a href="https://desec.io">Desec</a></li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="9-august-2025">9 August 2025</h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li>There are <a href="https://tea.nothing.run">Gitea</a> and <a href="https://idm.nothing.run">KaniDM</a> right now</li>
|
<li>There are <a href="https://tea.nothing.run">Gitea</a> and <a href="https://idm.nothing.run">KaniDM</a> right now</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
17
dist/notes/index.html
vendored
17
dist/notes/index.html
vendored
@@ -5,20 +5,21 @@
|
|||||||
<meta name="viewport" content="width=device-width">
|
<meta name="viewport" content="width=device-width">
|
||||||
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
||||||
<meta name="generator" content="Astro v2.10.7">
|
<meta name="generator" content="Astro v2.10.7">
|
||||||
<meta name="description" content="{frontmatter.description}">
|
<meta name="description" content="Tharys notes and articles">
|
||||||
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}">
|
<meta name="keywords" content="nothing.run nothing privacy free libre software floss self host">
|
||||||
|
<meta name="keywords">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||||
|
|
||||||
<title>nothing.run</title>
|
<title>nothing.run</title>
|
||||||
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head>
|
<link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
|
||||||
<body>
|
<body>
|
||||||
<div class="header astro-HPNW4VWY">
|
<div class="header astro-HPNW4VWY">
|
||||||
<a href="/" class="astro-HPNW4VWY">~/</a>
|
<a href="/" class="astro-HPNW4VWY">~/</a>
|
||||||
<a href="/contact.html" class="astro-HPNW4VWY">Contact</a>
|
<a href="/contact" class="astro-HPNW4VWY">Contact</a>
|
||||||
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
|
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
|
||||||
<a href="/news" class="astro-HPNW4VWY">News</a>
|
<a href="/news" class="astro-HPNW4VWY">News</a>
|
||||||
<a href="/notes.html" class="astro-HPNW4VWY">Notes</a>
|
<a href="/notes" class="astro-HPNW4VWY">Notes</a>
|
||||||
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
|
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -26,7 +27,11 @@
|
|||||||
|
|
||||||
<h2 id="linguistics">Linguistics</h2>
|
<h2 id="linguistics">Linguistics</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="/articles/belarusian.html">Беларусский или белорусский</a></li>
|
<li><a href="/articles/belarusian">Беларусский или белорусский</a></li>
|
||||||
|
</ul>
|
||||||
|
<h2 id="computers">Computers</h2>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/articles/synapse-revitalization-script">Restoration of Synapse after losing 1 year of database history</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<main>
|
<main>
|
||||||
|
BIN
public/cinny-preview.png
Normal file
BIN
public/cinny-preview.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 290 KiB |
BIN
public/element-preview.png
Normal file
BIN
public/element-preview.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 775 KiB |
@@ -8,10 +8,10 @@ const { location } = Astro.props;
|
|||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<a href="/">~/</a>
|
<a href="/">~/</a>
|
||||||
<a href="/contact.html">Contact</a>
|
<a href="/contact">Contact</a>
|
||||||
<a href="https://uptime.nothing.run">Uptime</a>
|
<a href="https://uptime.nothing.run">Uptime</a>
|
||||||
<a href="/news">News</a>
|
<a href="/news">News</a>
|
||||||
<a href="/notes.html">Notes</a>
|
<a href="/notes">Notes</a>
|
||||||
<a href="/donate">Donate :3</a>
|
<a href="/donate">Donate :3</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@@ -1,3 +0,0 @@
|
|||||||
- **[SchildiChat Web](https://element.nothing.run)** - built with Flutter and based on Element Matrix client with many features!
|
|
||||||
- **[Cinny](https://cinny.nothing.run)** - most beautiful Matrix client
|
|
||||||
- *Coming soon!* **[FluffyChat](https://fluffy.nothing.run)** - another Web Matrix client
|
|
7
src/components/matrixchat.astro
Normal file
7
src/components/matrixchat.astro
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
---
|
||||||
|
<p>Nothing.run has chat in Matrix. Join it to get information about downtimes and updates, help, to suggest something that could make nothing.run better</p>
|
||||||
|
<ul>
|
||||||
|
<li>Our Matrix space <a href="https://matrix.to/#/#nothingrun:nothing.run">#nothingrun:nothing.run</a></li>
|
||||||
|
<li>Our Matrix chat <a href="https://matrix.to/#/#localhost:nothing.run">#localhost:nothing.run</a></li>
|
||||||
|
</ul>
|
@@ -1,4 +0,0 @@
|
|||||||
- **[Main website](/)**
|
|
||||||
- **[Matrix](/matrix.html)** - decentralized communication server (powered by <a href="https://matrix.org/docs/projects/server/synapse">Synapse</a>). We have [Web-clients for Matrix](/matrix.html#web)
|
|
||||||
<!-- - *Coming soon!* **[Mastodon](https://social.nothing.run)** - free social network, part of the Fediverse, powered by ActivityPub -->
|
|
||||||
- *Coming soon!* **Forgejo** - lightwale Git repos hosting with Git over HTTPS and over SSH support. Based on Gitea
|
|
@@ -4,11 +4,13 @@ import Footer from "../components/footer.astro";
|
|||||||
import "../fonts.css";
|
import "../fonts.css";
|
||||||
import "../style.css";
|
import "../style.css";
|
||||||
|
|
||||||
const {frontmatter, title} = Astro.props;
|
const {frontmatter} = Astro.props;
|
||||||
let props = {};
|
let {title, description, keys} = Astro.props;
|
||||||
if (typeof frontmatter !== 'undefined') {
|
if (typeof frontmatter !== 'undefined') {
|
||||||
props.title = frontmatter.title;
|
title = frontmatter.title;
|
||||||
} else { props.title = title; };
|
description = frontmatter.description;
|
||||||
|
keys = frontmatter.keys;
|
||||||
|
};
|
||||||
---
|
---
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
@@ -18,17 +20,18 @@ if (typeof frontmatter !== 'undefined') {
|
|||||||
<meta name="viewport" content="width=device-width" />
|
<meta name="viewport" content="width=device-width" />
|
||||||
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
||||||
<meta name="generator" content={Astro.generator} />
|
<meta name="generator" content={Astro.generator} />
|
||||||
<meta name="description" content="{frontmatter.description}" />
|
<meta name="description" content={description} />
|
||||||
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}" />
|
<meta name="keywords" content="nothing.run nothing privacy free libre software floss self host" />
|
||||||
|
<meta name="keywords" content={keys} />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||||
|
|
||||||
<title>{props.title}</title>
|
<title>{title}</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<Header />
|
<Header />
|
||||||
|
|
||||||
<h1>{props.title}</h1>
|
<h1>{title}</h1>
|
||||||
|
|
||||||
<slot />
|
<slot />
|
||||||
<Footer />
|
<Footer />
|
||||||
|
@@ -2,10 +2,11 @@
|
|||||||
layout: '../../layouts/index.astro'
|
layout: '../../layouts/index.astro'
|
||||||
title: 'Беларусский или белорусский'
|
title: 'Беларусский или белорусский'
|
||||||
description: 'Беларусский или белорусский - как писать?'
|
description: 'Беларусский или белорусский - как писать?'
|
||||||
keys: 'nothing crypto free software libre self host'
|
keys: 'Беларусь или Белоруссия белорусский беларусский'
|
||||||
le: '19 Aug. 2025'
|
le: '19 Aug. 2025'
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<div class="article">
|
||||||
## Введение
|
## Введение
|
||||||
|
|
||||||
Вопрос "Беларусь или Белоруссия" здесь затронут не будет. Как беларус, могу сказать, что нам просто приятно, когда нас называют Беларусью, и мы считаем использование первого варианта минимальным уважением к нашему народу.
|
Вопрос "Беларусь или Белоруссия" здесь затронут не будет. Как беларус, могу сказать, что нам просто приятно, когда нас называют Беларусью, и мы считаем использование первого варианта минимальным уважением к нашему народу.
|
||||||
@@ -23,3 +24,4 @@ le: '19 Aug. 2025'
|
|||||||
Вот только слово Беларусь пишется с `а`. Что же пошло не так? Это заимствование из беларусского, и сейчас представляет из себя один цельный корень. Это значит, что при добавлении других морфем, в том числе суффикса -ск-, а в корне должно сохраняться. То есть самый логичный вариант - писать `беларусский`.<br/>Ну либо переходить на `Белорусь`, но...
|
Вот только слово Беларусь пишется с `а`. Что же пошло не так? Это заимствование из беларусского, и сейчас представляет из себя один цельный корень. Это значит, что при добавлении других морфем, в том числе суффикса -ск-, а в корне должно сохраняться. То есть самый логичный вариант - писать `беларусский`.<br/>Ну либо переходить на `Белорусь`, но...
|
||||||
|
|
||||||
P.s. естественно, всё это не касается официальных докемнтов, потому что там, как это ни странно, необходимо использовать литератный стандарт.
|
P.s. естественно, всё это не касается официальных докемнтов, потому что там, как это ни странно, необходимо использовать литератный стандарт.
|
||||||
|
</div>
|
||||||
|
48
src/pages/articles/synapse-revitalization-script.mdx
Executable file
48
src/pages/articles/synapse-revitalization-script.mdx
Executable file
@@ -0,0 +1,48 @@
|
|||||||
|
---
|
||||||
|
layout: '../../layouts/index.astro'
|
||||||
|
title: 'Restoration of Synapse after losing 1 year of database history'
|
||||||
|
description: 'Restoration of Synapse after losing 1 year of database history'
|
||||||
|
keys: 'matrix synapse conduit postgres'
|
||||||
|
le: '19 Aug. 2025'
|
||||||
|
---
|
||||||
|
|
||||||
|
<div class="article">
|
||||||
|
## Introduction
|
||||||
|
In July 2025, my Synapse 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>
|
@@ -1,7 +1,8 @@
|
|||||||
---
|
---
|
||||||
import Layout from '../layouts/index.astro'
|
import Layout from '../layouts/index.astro'
|
||||||
|
import MatrixChat from '../components/matrixchat.astro'
|
||||||
---
|
---
|
||||||
<Layout title="Contact">
|
<Layout title="Contact us" description="Contact nothing.run & nothing.run community">
|
||||||
<div class="asciicontainer">
|
<div class="asciicontainer">
|
||||||
<pre class="smaller">
|
<pre class="smaller">
|
||||||
__
|
__
|
||||||
@@ -33,11 +34,7 @@ import Layout from '../layouts/index.astro'
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<h2>Our chat</h2>
|
<h2>Our chat</h2>
|
||||||
<p>Nothing.run has chat in Matrix. Join it to get information about downtimes and updates, help, to suggest something that could make nothing.run better</p>
|
<MatrixChat />
|
||||||
<ul>
|
|
||||||
<li>Our Matrix space <a href="https://matrix.to/#/#nothingrun:nothing.run">#nothingrun:nothing.run</a></li>
|
|
||||||
<li>Our Matrix chat <a href="https://matrix.to/#/#localhost:nothing.run">#localhost:nothing.run</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
@@ -2,7 +2,6 @@
|
|||||||
layout: '../layouts/index.astro'
|
layout: '../layouts/index.astro'
|
||||||
title: 'Donate :3'
|
title: 'Donate :3'
|
||||||
description: 'Donate us :3'
|
description: 'Donate us :3'
|
||||||
keys: 'nothing crypto free software libre self host'
|
|
||||||
---
|
---
|
||||||
|
|
||||||
import Service from '../components/service.astro';
|
import Service from '../components/service.astro';
|
||||||
|
@@ -1,18 +1,35 @@
|
|||||||
---
|
---
|
||||||
layout: '../layouts/index.astro'
|
layout: '../layouts/index.astro'
|
||||||
title: 'Matrix'
|
title: 'Matrix'
|
||||||
description: 'Matrix'
|
description: 'nothing.run-s matrix instance info'
|
||||||
keys: 'nothing crypto free software libre self host'
|
keys: 'matrix element synapse messenger IM'
|
||||||
---
|
---
|
||||||
|
import MatrixChat from '../components/matrixchat.astro';
|
||||||
|
|
||||||
[**Matrix**](https://matrix.org) is modern federative network for communication. That means that users from different servers can interact with each other. We host our own Matrix network server. There also is a great cross-plattform-client available!
|
[**Matrix**](https://matrix.org) is modern federative network for communication. That means that users from different servers can interact with each other. We host our own Matrix network server. There also is a great cross-plattform-client available!
|
||||||
|
|
||||||
|
## Login data
|
||||||
|
- Server name: nothing.run
|
||||||
|
- Server address: https://matrix.nothing.run
|
||||||
|
|
||||||
## Our room
|
## Our room
|
||||||
|
<MatrixChat />
|
||||||
|
|
||||||
## Clients
|
## Clients
|
||||||
|
|
||||||
### Web-clients
|
### Web-clients
|
||||||
- [Cinny](https://cinny.nothing.run) - modern and beautiful Matrix web client
|
<div class="bigcontainer">
|
||||||
- [Element](https://element.nothing.run) - the most popular and functional Matrix client
|
|
||||||
|
<div class="matrixclient">
|
||||||
|
- [Cinny](https://cinny.nothing.run) - modern and beautiful Matrix web client
|
||||||
|
<img src="/cinny-preview.png" alt="Cinny preview" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="matrixclient">
|
||||||
|
- [Element](https://element.nothing.run) - the most popular and functional Matrix client
|
||||||
|
<img src="/element-preview.png" alt="Element preview" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
### Mobile clients
|
### Mobile clients
|
||||||
- [Element](https://github.com/element-hq/element-android) - very buggy and uncomfortable client
|
- [Element](https://github.com/element-hq/element-android) - very buggy and uncomfortable client
|
||||||
@@ -22,10 +39,7 @@ keys: 'nothing crypto free software libre self host'
|
|||||||
- [SchildiChat Next](https://schildi.chat/android/next/) - Element X with spaces support
|
- [SchildiChat Next](https://schildi.chat/android/next/) - Element X with spaces support
|
||||||
|
|
||||||
### Desktop clients
|
### Desktop clients
|
||||||
- [iamb](https://iamb.chat/) - written in Rust terminal-based client with Vim keybindings
|
- [iamb](https://iamb.chat/) & [gomuks](https://github.com/gomuks/gomuks) - written in Rust and Go terminal-based clients. iamb uses Vim-like keybindings
|
||||||
- [gomuks](https://github.com/gomuks/gomuks) - a terminal Matrix client written in Go
|
- [Fractal](https://wiki.gnome.org/Apps/Fractal), [NeoChat](https://apps.kde.org/neochat/), [Nheko](https://nheko-reborn.github.io/) - nice desktop-oriented clients. Can be buggy sometimes
|
||||||
|
- You can use Element, Schildi and Cinny Web as desktop clients via Electron. It's a less performant way to message from Matrix, but... You can! :)
|
||||||
- [Ement.el](https://github.com/alphapapa/ement.el) - really? Are you so crazy to chat from Emacs???
|
- [Ement.el](https://github.com/alphapapa/ement.el) - really? Are you so crazy to chat from Emacs???
|
||||||
- [Fractal]
|
|
||||||
- [NeoChat]
|
|
||||||
- [Nheko]
|
|
||||||
- You can use Element, Schildi and Cinny Web as desktop clients through Electron. It's unperformance way to use Matrix, but... You can! :)
|
|
||||||
|
@@ -2,9 +2,12 @@
|
|||||||
layout: '../layouts/index.astro'
|
layout: '../layouts/index.astro'
|
||||||
title: 'nothing.run'
|
title: 'nothing.run'
|
||||||
description: 'Librehoster, crypto- and infoanarchysts, free software fans'
|
description: 'Librehoster, crypto- and infoanarchysts, free software fans'
|
||||||
keys: 'nothing crypto free software libre self host'
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### 23 August 2025
|
||||||
|
|
||||||
|
- We have switched from Contabo nameservers to [Desec](https://desec.io)
|
||||||
|
|
||||||
### 9 August 2025
|
### 9 August 2025
|
||||||
|
|
||||||
- There are [Gitea](https://tea.nothing.run) and [KaniDM](https://idm.nothing.run) right now
|
- There are [Gitea](https://tea.nothing.run) and [KaniDM](https://idm.nothing.run) right now
|
||||||
|
@@ -2,8 +2,10 @@
|
|||||||
layout: '../layouts/index.astro'
|
layout: '../layouts/index.astro'
|
||||||
title: 'nothing.run'
|
title: 'nothing.run'
|
||||||
description: 'Tharys notes and articles'
|
description: 'Tharys notes and articles'
|
||||||
keys: 'nothing crypto free software libre self host'
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Linguistics
|
## Linguistics
|
||||||
- [Беларусский или белорусский](/articles/belarusian.html)
|
- [Беларусский или белорусский](/articles/belarusian)
|
||||||
|
|
||||||
|
## Computers
|
||||||
|
- [Restoration of Synapse after losing 1 year of database history](/articles/synapse-revitalization-script)
|
||||||
|
@@ -38,6 +38,7 @@ body {
|
|||||||
font-optical-sizing: auto;
|
font-optical-sizing: auto;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ul, li {
|
ul, li {
|
||||||
@@ -182,26 +183,27 @@ pre.smaller {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#matrix {
|
#matrix {
|
||||||
background-image: url("./assets/matrix.png");
|
background-image: url("/matrix.png");
|
||||||
}
|
}
|
||||||
#gitea {
|
#gitea {
|
||||||
background-image: url("./assets/gitea.png");
|
background-image: url("/gitea.png");
|
||||||
}
|
}
|
||||||
#hedgedoc {
|
#hedgedoc {
|
||||||
background-image: url("./assets/hedgedoc.png");
|
background-image: url("/hedgedoc.png");
|
||||||
}
|
}
|
||||||
#kanidm {
|
#kanidm {
|
||||||
background-image: url("./assets/kanidm.png");
|
background-image: url("/kanidm.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
display: grid;
|
display: grid;
|
||||||
/* margin: 0 auto; */
|
/* margin: 0 auto; */
|
||||||
padding: 10px;
|
padding: 20px;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
grid-column-gap: 10px;
|
grid-column-gap: 20px;
|
||||||
/* grid-template-columns: auto auto auto; */
|
/* grid-template-columns: auto auto auto; */
|
||||||
|
/* grid-template-columns: repeat(auto-fit, minmax(420px, 1fr)); */
|
||||||
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
|
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
|
||||||
max-width: 1300px;
|
max-width: 1300px;
|
||||||
}
|
}
|
||||||
@@ -215,10 +217,14 @@ pre.smaller {
|
|||||||
grid-template-columns: 250px repeat(auto-fit, minmax(250px, 1fr));
|
grid-template-columns: 250px repeat(auto-fit, minmax(250px, 1fr));
|
||||||
max-width: 1300px;
|
max-width: 1300px;
|
||||||
}
|
}
|
||||||
@media (min-width: 1570px) {
|
@media (min-width: 1000px) {
|
||||||
.bigcontainer {
|
.asciicontainer {
|
||||||
display: flex;
|
grid-template-columns: 250px repeat(auto-fit, minmax(250px, 1fr));
|
||||||
gap: 50px;
|
}
|
||||||
|
}
|
||||||
|
@media (max-width: 1000px) {
|
||||||
|
.asciicontainer {
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -226,3 +232,30 @@ pre.smaller {
|
|||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1570px) {
|
||||||
|
.bigcontainer {
|
||||||
|
display: flex;
|
||||||
|
gap: 50px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1570px) {
|
||||||
|
.bigcontainer .matrixclient img {
|
||||||
|
width: 40vw;
|
||||||
|
height :auth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (max-width: 1570px) {
|
||||||
|
.bigcontainer .matrixclient img {
|
||||||
|
width: 90vw;
|
||||||
|
height: auth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.article {
|
||||||
|
padding-left: auto;
|
||||||
|
padding-right: auto;
|
||||||
|
margin: auto;
|
||||||
|
max-width: 1000px;
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user