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">
|
||||
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
||||
<meta name="generator" content="Astro v2.10.7">
|
||||
<meta name="description" content="{frontmatter.description}">
|
||||
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}">
|
||||
<meta name="description" content="Беларусский или белорусский - как писать?">
|
||||
<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">
|
||||
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||
|
||||
<title>Беларусский или белорусский</title>
|
||||
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head>
|
||||
<link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
|
||||
<body>
|
||||
<div class="header astro-HPNW4VWY">
|
||||
<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="/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>
|
||||
</div>
|
||||
|
||||
<h1>Беларусский или белорусский</h1>
|
||||
|
||||
<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 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>
|
||||
<div id="footer">
|
||||
<main>
|
||||
<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 |
15
dist/contact/index.html
vendored
15
dist/contact/index.html
vendored
@@ -5,24 +5,25 @@
|
||||
<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="{frontmatter.description}">
|
||||
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}">
|
||||
<meta name="description" content="Contact nothing.run & nothing.run community">
|
||||
<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">
|
||||
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||
|
||||
<title>Contact</title>
|
||||
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head>
|
||||
<title>Contact us</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.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="/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>
|
||||
</div>
|
||||
|
||||
<h1>Contact</h1>
|
||||
<h1>Contact us</h1>
|
||||
|
||||
|
||||
<div class="asciicontainer">
|
||||
|
11
dist/donate/index.html
vendored
11
dist/donate/index.html
vendored
@@ -5,20 +5,21 @@
|
||||
<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="{frontmatter.description}">
|
||||
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}">
|
||||
<meta name="description" content="Donate us :3">
|
||||
<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">
|
||||
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||
|
||||
<title>Donate :3</title>
|
||||
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head>
|
||||
<link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
|
||||
<body>
|
||||
<div class="header astro-HPNW4VWY">
|
||||
<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="/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>
|
||||
</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">
|
||||
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
||||
<meta name="generator" content="Astro v2.10.7">
|
||||
<meta name="description" content="{frontmatter.description}">
|
||||
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}">
|
||||
<meta name="description" content="Librehoster, crypto- and infoanarchysts, free software fans">
|
||||
<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">
|
||||
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||
|
||||
<title>nothing.run</title>
|
||||
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head>
|
||||
<link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
|
||||
<body>
|
||||
<div class="header astro-HPNW4VWY">
|
||||
<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="/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>
|
||||
</div>
|
||||
|
||||
|
35
dist/matrix/index.html
vendored
35
dist/matrix/index.html
vendored
@@ -5,33 +5,45 @@
|
||||
<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="{frontmatter.description}">
|
||||
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}">
|
||||
<meta name="description" content="nothing.run-s matrix instance info">
|
||||
<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">
|
||||
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||
|
||||
<title>Matrix</title>
|
||||
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head>
|
||||
<link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
|
||||
<body>
|
||||
<div class="header astro-HPNW4VWY">
|
||||
<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="/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>
|
||||
</div>
|
||||
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
</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>
|
||||
</ul>
|
||||
</ul><img src="/element-preview.png" alt="Element preview"/></div></div>
|
||||
<h3 id="mobile-clients">Mobile clients</h3>
|
||||
<ul>
|
||||
<li><a href="https://github.com/element-hq/element-android">Element</a> - very buggy and uncomfortable client</li>
|
||||
@@ -42,13 +54,10 @@
|
||||
</ul>
|
||||
<h3 id="desktop-clients">Desktop clients</h3>
|
||||
<ul>
|
||||
<li><a href="https://iamb.chat/">iamb</a> - written in Rust terminal-based client with Vim keybindings</li>
|
||||
<li><a href="https://github.com/gomuks/gomuks">gomuks</a> - a terminal Matrix client written in Go</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://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>[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>
|
||||
<div id="footer">
|
||||
<main>
|
||||
|
15
dist/news/index.html
vendored
15
dist/news/index.html
vendored
@@ -5,25 +5,30 @@
|
||||
<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="{frontmatter.description}">
|
||||
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}">
|
||||
<meta name="description" content="Librehoster, crypto- and infoanarchysts, free software fans">
|
||||
<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">
|
||||
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||
|
||||
<title>nothing.run</title>
|
||||
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head>
|
||||
<link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
|
||||
<body>
|
||||
<div class="header astro-HPNW4VWY">
|
||||
<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="/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>
|
||||
</div>
|
||||
|
||||
<h1>nothing.run</h1>
|
||||
|
||||
<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>
|
||||
<li>There are <a href="https://tea.nothing.run">Gitea</a> and <a href="https://idm.nothing.run">KaniDM</a> right now</li>
|
||||
|
17
dist/notes/index.html
vendored
17
dist/notes/index.html
vendored
@@ -5,20 +5,21 @@
|
||||
<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="{frontmatter.description}">
|
||||
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}">
|
||||
<meta name="description" content="Tharys notes and articles">
|
||||
<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">
|
||||
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||
|
||||
<title>nothing.run</title>
|
||||
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head>
|
||||
<link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
|
||||
<body>
|
||||
<div class="header astro-HPNW4VWY">
|
||||
<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="/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>
|
||||
</div>
|
||||
|
||||
@@ -26,7 +27,11 @@
|
||||
|
||||
<h2 id="linguistics">Linguistics</h2>
|
||||
<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>
|
||||
<div id="footer">
|
||||
<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">
|
||||
<a href="/">~/</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="/contact">Contact</a>
|
||||
<a href="https://uptime.nothing.run">Uptime</a>
|
||||
<a href="/news">News</a>
|
||||
<a href="/notes.html">Notes</a>
|
||||
<a href="/notes">Notes</a>
|
||||
<a href="/donate">Donate :3</a>
|
||||
</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 "../style.css";
|
||||
|
||||
const {frontmatter, title} = Astro.props;
|
||||
let props = {};
|
||||
const {frontmatter} = Astro.props;
|
||||
let {title, description, keys} = Astro.props;
|
||||
if (typeof frontmatter !== 'undefined') {
|
||||
props.title = frontmatter.title;
|
||||
} else { props.title = title; };
|
||||
title = frontmatter.title;
|
||||
description = frontmatter.description;
|
||||
keys = frontmatter.keys;
|
||||
};
|
||||
---
|
||||
|
||||
<!DOCTYPE html>
|
||||
@@ -18,17 +20,18 @@ if (typeof frontmatter !== 'undefined') {
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
||||
<meta name="generator" content={Astro.generator} />
|
||||
<meta name="description" content="{frontmatter.description}" />
|
||||
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}" />
|
||||
<meta name="description" content={description} />
|
||||
<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" />
|
||||
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||
|
||||
<title>{props.title}</title>
|
||||
<title>{title}</title>
|
||||
</head>
|
||||
<body>
|
||||
<Header />
|
||||
|
||||
<h1>{props.title}</h1>
|
||||
<h1>{title}</h1>
|
||||
|
||||
<slot />
|
||||
<Footer />
|
||||
|
@@ -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>
|
||||
|
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 MatrixChat from '../components/matrixchat.astro'
|
||||
---
|
||||
<Layout title="Contact">
|
||||
<Layout title="Contact us" description="Contact nothing.run & nothing.run community">
|
||||
<div class="asciicontainer">
|
||||
<pre class="smaller">
|
||||
__
|
||||
@@ -33,11 +34,7 @@ import Layout from '../layouts/index.astro'
|
||||
|
||||
<div>
|
||||
<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>
|
||||
<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>
|
||||
<MatrixChat />
|
||||
</div>
|
||||
</div>
|
||||
</Layout>
|
||||
|
@@ -2,7 +2,6 @@
|
||||
layout: '../layouts/index.astro'
|
||||
title: 'Donate :3'
|
||||
description: 'Donate us :3'
|
||||
keys: 'nothing crypto free software libre self host'
|
||||
---
|
||||
|
||||
import Service from '../components/service.astro';
|
||||
|
@@ -1,18 +1,35 @@
|
||||
---
|
||||
layout: '../layouts/index.astro'
|
||||
title: 'Matrix'
|
||||
description: 'Matrix'
|
||||
keys: 'nothing crypto free software libre self host'
|
||||
description: 'nothing.run-s matrix instance info'
|
||||
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!
|
||||
|
||||
## Login data
|
||||
- Server name: nothing.run
|
||||
- Server address: https://matrix.nothing.run
|
||||
|
||||
## Our room
|
||||
<MatrixChat />
|
||||
|
||||
## Clients
|
||||
|
||||
### Web-clients
|
||||
<div class="bigcontainer">
|
||||
|
||||
<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
|
||||
- [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
|
||||
|
||||
### Desktop clients
|
||||
- [iamb](https://iamb.chat/) - written in Rust terminal-based client with Vim keybindings
|
||||
- [gomuks](https://github.com/gomuks/gomuks) - a terminal Matrix client written in Go
|
||||
- [iamb](https://iamb.chat/) & [gomuks](https://github.com/gomuks/gomuks) - written in Rust and Go terminal-based clients. iamb uses Vim-like keybindings
|
||||
- [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???
|
||||
- [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'
|
||||
title: 'nothing.run'
|
||||
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
|
||||
|
||||
- There are [Gitea](https://tea.nothing.run) and [KaniDM](https://idm.nothing.run) right now
|
||||
|
@@ -2,8 +2,10 @@
|
||||
layout: '../layouts/index.astro'
|
||||
title: 'nothing.run'
|
||||
description: 'Tharys notes and articles'
|
||||
keys: 'nothing crypto free software libre self host'
|
||||
---
|
||||
|
||||
## 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-style: normal;
|
||||
height: 100vh;
|
||||
|
||||
}
|
||||
|
||||
ul, li {
|
||||
@@ -182,26 +183,27 @@ pre.smaller {
|
||||
}
|
||||
|
||||
#matrix {
|
||||
background-image: url("./assets/matrix.png");
|
||||
background-image: url("/matrix.png");
|
||||
}
|
||||
#gitea {
|
||||
background-image: url("./assets/gitea.png");
|
||||
background-image: url("/gitea.png");
|
||||
}
|
||||
#hedgedoc {
|
||||
background-image: url("./assets/hedgedoc.png");
|
||||
background-image: url("/hedgedoc.png");
|
||||
}
|
||||
#kanidm {
|
||||
background-image: url("./assets/kanidm.png");
|
||||
background-image: url("/kanidm.png");
|
||||
}
|
||||
|
||||
.container {
|
||||
display: grid;
|
||||
/* margin: 0 auto; */
|
||||
padding: 10px;
|
||||
padding: 20px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
grid-column-gap: 10px;
|
||||
grid-column-gap: 20px;
|
||||
/* grid-template-columns: auto auto auto; */
|
||||
/* grid-template-columns: repeat(auto-fit, minmax(420px, 1fr)); */
|
||||
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
|
||||
max-width: 1300px;
|
||||
}
|
||||
@@ -215,10 +217,14 @@ pre.smaller {
|
||||
grid-template-columns: 250px repeat(auto-fit, minmax(250px, 1fr));
|
||||
max-width: 1300px;
|
||||
}
|
||||
@media (min-width: 1570px) {
|
||||
.bigcontainer {
|
||||
display: flex;
|
||||
gap: 50px;
|
||||
@media (min-width: 1000px) {
|
||||
.asciicontainer {
|
||||
grid-template-columns: 250px repeat(auto-fit, minmax(250px, 1fr));
|
||||
}
|
||||
}
|
||||
@media (max-width: 1000px) {
|
||||
.asciicontainer {
|
||||
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -226,3 +232,30 @@ pre.smaller {
|
||||
margin-left: 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