remove url scheme from the inline context

This commit is contained in:
postscriptum 2026-03-17 19:55:50 +02:00
parent 4a13b769f4
commit 19bd39f8e6
37 changed files with 80 additions and 73 deletions

View file

@ -1,10 +1,10 @@
# Анонімний піринг BitTorrent з I2PSnark та i2pd # Анонімний піринг BitTorrent з I2PSnark та i2pd
Давно цікавлюсь тематикою альтернативних мереж, зокрема - експериментую з Yggdrasil в контексті BitTorrent. Про мережу I2P (https://uk.wikipedia.org/wiki/I2P) знаю давно, але мені жодного разу не доводилось нею користуватись. Утім, організувавши на прохання деяких користувачів доступ по I2P до форуму адміністраторів альтернативних мереж, налаштувавши дзеркало свого блогу Gemini, та ретрансляцію каналів eQtv і Громадське радіо, стало цікаво також спробувати цю мережу і в контексті торентів. Давно цікавлюсь тематикою альтернативних мереж, зокрема - експериментую з Yggdrasil в контексті BitTorrent. Про мережу I2P (uk.wikipedia.org/wiki/I2P) знаю давно, але мені жодного разу не доводилось нею користуватись. Утім, організувавши на прохання деяких користувачів доступ по I2P до форуму адміністраторів альтернативних мереж, налаштувавши дзеркало свого блогу Gemini, та ретрансляцію каналів eQtv і Громадське радіо, стало цікаво також спробувати цю мережу і в контексті торентів.
Для одночасного обміну файлами в Інтернет, Yggdrasil і Mycelium - я користуюсь вільним клієнтом qBittorrent (https://www.qbittorrent.org), що з коробки працює на всі мережі (Інтернет та Yggdrasil через подвійний стек IPv4/IPv6) і має гнучкі налаштування для керування великими колекціями. Але Yggdrasil не є анонімною мережею, а qBittorrent - допускає в такому випадку непередбачені з'єднання в гібридному режимі, оскільки розроблявся перш за все для максимальної конективності, а не для анонімізації/деперсоналізації. Так, в ньому є експериментальна опція I2P та універсальна реалізація проксі SOCKS5, але я вже помічав за цим клієнтом "сюрпризи" у вигляді вихідних з'єднань на веб-сокет IPv4 при біндінгу на IPv6 та інші нюанси, що в цілому залежать від конкретної версії. Для одночасного обміну файлами в Інтернет, Yggdrasil і Mycelium - я користуюсь вільним клієнтом qBittorrent (www.qbittorrent.org), що з коробки працює на всі мережі (Інтернет та Yggdrasil через подвійний стек IPv4/IPv6) і має гнучкі налаштування для керування великими колекціями. Але Yggdrasil не є анонімною мережею, а qBittorrent - допускає в такому випадку непередбачені з'єднання в гібридному режимі, оскільки розроблявся перш за все для максимальної конективності, а не для анонімізації/деперсоналізації. Так, в ньому є експериментальна опція I2P та універсальна реалізація проксі SOCKS5, але я вже помічав за цим клієнтом "сюрпризи" у вигляді вихідних з'єднань на веб-сокет IPv4 при біндінгу на IPv6 та інші нюанси, що в цілому залежать від конкретної версії.
Ситуація не краще й з віднайденою мною бібліотекою librqbit (на базі якої мав намір створити приватно-орієнтований клієнт GTK для оверлейних мереж) де наприклад не можливо вимкнути PEX (https://en.wikipedia.org/wiki/Peer_exchange), для чого треба користуватись костилями blacklist. Взагалі, тему приватного користування торентами в контексті оверлейних мереж краще розкрити окремо, бо тут є що розповісти. Ситуація не краще й з віднайденою мною бібліотекою librqbit (на базі якої мав намір створити приватно-орієнтований клієнт GTK для оверлейних мереж) де наприклад не можливо вимкнути PEX (en.wikipedia.org/wiki/Peer_exchange), для чого треба користуватись костилями blacklist. Взагалі, тему приватного користування торентами в контексті оверлейних мереж краще розкрити окремо, бо тут є що розповісти.
## Інфраструктура I2P ## Інфраструктура I2P
@ -16,7 +16,7 @@
Переглянувши доступні клієнти: Переглянувши доступні клієнти:
=> https://i2pd.readthedocs.io/en/latest/tutorials/filesharing/ => https://i2pd.readthedocs.io/en/latest/tutorials/filesharing/
- відкинув вже згаданий qBittorrent і BiglyBT (https://www.biglybt.com/) через їх універсальність; XD (https://github.com/majestrate/XD) - як такий, що "крашить" i2pd. Тому з кандидатів лишився I2P-only I2PSnark. - відкинув вже згаданий qBittorrent і BiglyBT (www.biglybt.com/) через їх універсальність; XD (github.com/majestrate/XD) - як такий, що "крашить" i2pd. Тому з кандидатів лишився I2P-only I2PSnark.
### I2PSnark ### I2PSnark

View file

@ -55,7 +55,9 @@ bridges = [
### Мости obfs4 ### Мости obfs4
В списках мостів бувають і такі, що підтримують обфускацію [obfs4](https://github.com/Yawning/obfs4): В списках мостів бувають і такі, що підтримують обфускацію:
=> https://github.com/Yawning/obfs4
``` config.toml ``` config.toml
bridges = [ bridges = [

View file

@ -1,6 +1,6 @@
# Блокування вихідних з'єднань BitTorrent по діапазону IPv6 # Блокування вихідних з'єднань BitTorrent по діапазону IPv6
Деякі бібліотеки, такі як librqbit (https://github.com/ikatson/rqbit/issues/469) - не вміють вимикати надбудови міжпірингової комунікації типу PEX, але можуть робити це засобами так званого Blocklist. Деякі бібліотеки, такі як librqbit - не вміють (github.com/ikatson/rqbit/issues/469) вимикати надбудови міжпірингової комунікації типу PEX, але можуть робити це засобами так званого Blocklist.
В принципі, для IPv4 все просто: В принципі, для IPv4 все просто:

View file

@ -2,7 +2,7 @@
> Даний матеріал писався як гайд для локальної спільноти адміністраторів альтернативних мереж, утім, я знайшов його потенційно цікавим для широкого загалу: зокрема для тих, хто бажає підняти свій торент трекер і автоматизований Веб-каталог з функцією пошуку та статистикою роздач на базі інфраструктури Rust. > Даний матеріал писався як гайд для локальної спільноти адміністраторів альтернативних мереж, утім, я знайшов його потенційно цікавим для широкого загалу: зокрема для тих, хто бажає підняти свій торент трекер і автоматизований Веб-каталог з функцією пошуку та статистикою роздач на базі інфраструктури Rust.
βtracker (beta-tracker) - BitTorrent каталог агрегаційного типу з Веб-інтерфейсом на базі фреймворку Rocket (https://rocket.rs), що є продовженням попереднього проєкту YGGtracker але на відміну від останнього - повністю автоматизований. βtracker (beta-tracker) - BitTorrent каталог агрегаційного типу з Веб-інтерфейсом на базі фреймворку Rocket (rocket.rs), що є продовженням попереднього проєкту YGGtracker але на відміну від останнього - повністю автоматизований.
Індекс тут складається на базі додаткових компонентів: Індекс тут складається на базі додаткових компонентів:
=> https://github.com/YGGverse/aquatic/tree/yggverse/crates/udp форк UDP трекера "aquatic", який генерує дамп інфо-хешів у бінарному форматі API => https://github.com/YGGverse/aquatic/tree/yggverse/crates/udp форк UDP трекера "aquatic", який генерує дамп інфо-хешів у бінарному форматі API
@ -25,7 +25,7 @@ torrent client <-----------------------| * /preload/info-
## Мережі ## Мережі
βtracker розроблявся для мережі Yggdrasil (https://yggdrasil-network.github.io), але на відміну від YGGtracker, може без проблемно працювати з Інтернет / IPv4 включно, а також споріднених оверлейних мережах типу Mycelium (https://github.com/threefoldtech/mycelium). βtracker розроблявся для мережі Yggdrasil (yggdrasil-network.github.io), але на відміну від YGGtracker, може без проблемно працювати з Інтернет / IPv4 включно, а також споріднених оверлейних мережах типу Mycelium (github.com/threefoldtech/mycelium).
## Проблеми ## Проблеми

View file

@ -2,7 +2,7 @@
> Здається, інструкція з розгортання поточної версії βtracker була написана в одному екземплярі для проєкту howto.ygg і я зовсім забув зробити для неї локальну версію. Свій інстанс я згорнув, але на випадок, якщо передумаю (та для інших користувачів) - гайд нижче. > Здається, інструкція з розгортання поточної версії βtracker була написана в одному екземплярі для проєкту howto.ygg і я зовсім забув зробити для неї локальну версію. Свій інстанс я згорнув, але на випадок, якщо передумаю (та для інших користувачів) - гайд нижче.
βtracker - альтернативна гілка розробки YGGtracker (https://github.com/YGGverse/YGGtracker), яка надає програмний комплекс для автоматичного відстеження та агрегації без участі модератора та ручного додавання торентів до каталогу. βtracker - альтернативна гілка розробки YGGtracker (github.com/YGGverse/YGGtracker), яка надає програмний комплекс для автоматичного відстеження та агрегації без участі модератора та ручного додавання торентів до каталогу.
Система створена для мережі Yggdrasil, але може працювати з будь-якою іншою, що підтримує стек IPv4/IPv6 або в гібридному режимі. Щоб додати торренти до каталогу, користувачеві достатньо додати пов'язані з агрегатором трекери в свій клієнт (дистрибутив) Система створена для мережі Yggdrasil, але може працювати з будь-якою іншою, що підтримує стек IPv4/IPv6 або в гібридному режимі. Щоб додати торренти до каталогу, користувачеві достатньо додати пов'язані з агрегатором трекери в свій клієнт (дистрибутив)
@ -197,7 +197,7 @@ cd btracker
cargo build --release cargo build --release
sudo install target/release/btracker /usr/local/bin/btracker sudo install target/release/btracker /usr/local/bin/btracker
``` ```
* у зв'язку з поточною реалізацією шаблонізатора Rocker (https://rocket.rs/guide/v0.5/deploying), потрібно скопіювати директорії `public` і `templates` до простору `WorkingDirectory` (див. налаштування systemd) * у зв'язку з поточною реалізацією шаблонізатора Rocker (rocket.rs/guide/v0.5/deploying), потрібно скопіювати директорії `public` і `templates` до простору `WorkingDirectory` (див. налаштування systemd)
``` /etc/systemd/system/btracker.service ``` /etc/systemd/system/btracker.service
[Unit] [Unit]

View file

@ -1,6 +1,6 @@
# Копіювання Веб-сайту з обходом анти-бот захисту через wget # Копіювання Веб-сайту з обходом анти-бот захисту через wget
В рамках проєкту з реставрації українських Веб-архівів, я періодично роблю "сирі" дампи деяких Веб-сайтів, на випадок їх зникнення з онлайну. Утім один з ресурсів, який мене зацікавив (https://prolinux.pp.ua/news/prolinuxua-stopped.html) - використовував динамічний анти-бот захист на основі JavaScript + Cookies, перший з яких утиліта wget обробляти не вміє, через що цей сайт також не може проіндексуватись проєктом Web-archive: В рамках проєкту з реставрації українських Веб-архівів, я періодично роблю "сирі" дампи деяких Веб-сайтів, на випадок їх зникнення з онлайну. Утім один з ресурсів, який мене зацікавив (prolinux.pp.ua/news/prolinuxua-stopped.html) - використовував динамічний анти-бот захист на основі JavaScript + Cookies, перший з яких утиліта wget обробляти не вміє, через що цей сайт також не може проіндексуватись проєктом Web-archive:
=> https://web.archive.org/web/20231130201641/https://prolinux.pp.ua/?i=1 => https://web.archive.org/web/20231130201641/https://prolinux.pp.ua/?i=1
Тобто у цьому випадку, його сторінка віддає кравлеру наступний код, точніше логічне завдання для клієнт-сайду, результат якого потрібно зберегти до Cookies та застосувати для подальших запитів: Тобто у цьому випадку, його сторінка віддає кравлеру наступний код, точніше логічне завдання для клієнт-сайду, результат якого потрібно зберегти до Cookies та застосувати для подальших запитів:

View file

@ -55,12 +55,10 @@ peers = [
"[301:84f7:4bc0:2f3a::53]:4244" "[301:84f7:4bc0:2f3a::53]:4244"
] ]
# стандартна гілка (https://github.com/Revertron/Alfis) # стандартна гілка (github.com/Revertron/Alfis)
yggdrasil_only = true yggdrasil_only = true
# якщо гілка mycelium-network-mode # якщо гілка mycelium-network-mode (github.com/YGGverse/Alfis/tree/mycelium-network-mode)
# https://github.com/YGGverse/Alfis/tree/mycelium-network-mode
#
# yggdrasil_mode = true # yggdrasil_mode = true
# mycelium_mode = true # mycelium_mode = true
``` ```

View file

@ -49,7 +49,7 @@ ufw allow out to 1.1.1.1 port 53 proto udp
ufw allow out to any port 53 proto udp ufw allow out to any port 53 proto udp
``` ```
Якщо використовується локальний DNS для Yggdrasil (https://yggdrasil-network.github.io/services.html#dns) або Mycelium, цей крок можна пропустити, адже вище ми вже дозволили усі вихідні з'єднання на ці мережі. Якщо використовується локальний DNS для Yggdrasil (yggdrasil-network.github.io/services.html#dns) або Mycelium, цей крок можна пропустити, адже вище ми вже дозволили усі вихідні з'єднання на ці мережі.
## NTP ## NTP

View file

@ -211,7 +211,7 @@ void someMethod(int arg1 = 1, bool arg2 = true);
Поки що, мені не доводилось користуватись такими бібліотеками, яких немає в репозиторії мого дистрибутиву. Звісно, розумію що одного разу такий момент настане, тим паче, що я звик виносити окремі функції програми на рівень маленьких бібліотек і працювати з ними через пакетний менеджер, замість використання моделей. Поки що, мені не доводилось користуватись такими бібліотеками, яких немає в репозиторії мого дистрибутиву. Звісно, розумію що одного разу такий момент настане, тим паче, що я звик виносити окремі функції програми на рівень маленьких бібліотек і працювати з ними через пакетний менеджер, замість використання моделей.
В принципі, такі пакетні менеджери для C++ є, наприклад Conan (https://conan.io). Але мене трохи засмучує, що немає якось єдиного хабу по типу Composer/Packagist для PHP. В цьому плані, звісно дуже виграє Rust з його пакетним менеджером Cargo. Хотілось би подібний набір для C++ з коробки, але все таки це мова, яка сформована спільнотою і має трохи іншу, свого роду анархічну парадигму в своїй основі, яка не прив'язує вас до конкретного рішення і дає повну свободу дій. В принципі, такі пакетні менеджери для C++ є, наприклад Conan (conan.io). Але мене трохи засмучує, що немає якось єдиного хабу по типу Composer/Packagist для PHP. В цьому плані, звісно дуже виграє Rust з його пакетним менеджером Cargo. Хотілось би подібний набір для C++ з коробки, але все таки це мова, яка сформована спільнотою і має трохи іншу, свого роду анархічну парадигму в своїй основі, яка не прив'язує вас до конкретного рішення і дає повну свободу дій.
Коли дійдуть руки до організації сторонніх бібліотек, в першу чергу, хочу спробувати варіант з git submodule. Це не зовсім пакетний менеджер, але у даного рішення є таке поняття як "теги", з яких формуються безпосередньо версії, git також перед-встановлено на більшості систем тих, хто займається збіркою і не доведеться вимагати від користувача додаткових рухів. Тому наразі це рішення для мене виглядає найбільш привабливим, перш за все - з точки зору універсальності. Коли дійдуть руки до організації сторонніх бібліотек, в першу чергу, хочу спробувати варіант з git submodule. Це не зовсім пакетний менеджер, але у даного рішення є таке поняття як "теги", з яких формуються безпосередньо версії, git також перед-встановлено на більшості систем тих, хто займається збіркою і не доведеться вимагати від користувача додаткових рухів. Тому наразі це рішення для мене виглядає найбільш привабливим, перш за все - з точки зору універсальності.

View file

@ -123,13 +123,13 @@ Flathub - це безкоштовний хостинг для пакунків F
### Публікація ### Публікація
Суть публікації пакунку на Flathub полягає в створенні форку ініціативного репозиторію (https://github.com/flathub/flathub), в якому створюється окрема гілка для подальшого запиту на додавання (https://github.com/flathub/flathub/pulls). Суть публікації пакунку на Flathub полягає в створенні форку ініціативного репозиторію (github.com/flathub/flathub), в якому створюється окрема гілка для подальшого запиту на додавання (github.com/flathub/flathub/pulls).
До PR, окрім файлу маніфесту, додається ще один, схожий до маніфесту файл metainfo (https://docs.flathub.org/docs/for-app-authors/metainfo-guidelines) у форматі XML. Наприклад для twister p2p - він виглядає так До PR, окрім файлу маніфесту, додається ще один, схожий до маніфесту файл metainfo (docs.flathub.org/docs/for-app-authors/metainfo-guidelines) у форматі XML. Наприклад для twister p2p - він виглядає так
=> https://github.com/twisterarmy/flathub/blob/twister-bundle/io.github.twisterarmy.twister.metainfo.xml => https://github.com/twisterarmy/flathub/blob/twister-bundle/io.github.twisterarmy.twister.metainfo.xml
* а саме: містить назву, опис проєкту, версію збірки а також скріншоти та деяку іншу інформацію, необхідну для коректного відображення на сайті каталогу. * а саме: містить назву, опис проєкту, версію збірки а також скріншоти та деяку іншу інформацію, необхідну для коректного відображення на сайті каталогу.
Після модерації, ваш проєкт буде (або не буде) розміщено в офіційному списку постачальників (https://github.com/orgs/flathub/repositories) Flathub, а вам (у разі схвалення) - надано статус майнтейнера до відповідного репозиторію для його подальших оновлень. Після модерації, ваш проєкт буде (або не буде) розміщено в офіційному списку постачальників (github.com/orgs/flathub/repositories) Flathub, а вам (у разі схвалення) - надано статус майнтейнера до відповідного репозиторію для його подальших оновлень.
Опціонально, постачальники можуть отримати верифікований статус та інші фічі для подальшого просування власного проєкту. Опціонально, постачальники можуть отримати верифікований статус та інші фічі для подальшого просування власного проєкту.

View file

@ -5,7 +5,7 @@
* мінімальний розмір контенту, та одно-поточні запити до сервера: що добре для швидкості відгуку та легкі для мережі I2P в цілому, адже не тягатимуть купу асинхронних скриптів, трекерів, стилів, медіа та іншого мотлоху * мінімальний розмір контенту, та одно-поточні запити до сервера: що добре для швидкості відгуку та легкі для мережі I2P в цілому, адже не тягатимуть купу асинхронних скриптів, трекерів, стилів, медіа та іншого мотлоху
* приватно-орієнтованість: немає заголовків з рефералами, сторонніх підвантажень контенту, а отже - не потрібні костилі з ізольованими контейнерами, окремі браузери з PAC чи правила фаєрволу, що фільтруватимуть потенційні витоки з'єднань на Інтернет * приватно-орієнтованість: немає заголовків з рефералами, сторонніх підвантажень контенту, а отже - не потрібні костилі з ізольованими контейнерами, окремі браузери з PAC чи правила фаєрволу, що фільтруватимуть потенційні витоки з'єднань на Інтернет
* відсутність потреби у виділеному IP: роутер I2P може поставити собі кожен, для цього не потрібно навіть відкривати порт * відсутність потреби у виділеному IP: роутер I2P може поставити собі кожен, для цього не потрібно навіть відкривати порт
* ідеально для соціальних децентралізованих застосунків: авторизація на базі TLS (https://geminiprotocol.net/docs/protocol-specification.gmi#client-certificates) не передбачає передачу на сервер класичних для Веб e-mail, паролів та іншої потенційно чутливої інформації * ідеально для соціальних децентралізованих застосунків: авторизація на базі TLS (geminiprotocol.net/docs/protocol-specification.gmi#client-certificates) не передбачає передачу на сервер класичних для Веб e-mail, паролів та іншої потенційно чутливої інформації
Сьогодні таки зібрався і вирішив спробувати опублікувати свою капсулу. При цьому, вирішив не проксувати (proxy) трафік I2P на віддалений хостинг Yesterweb, а саме задзеркалити копію ресурсу (mirror) на локальному сервері. Сьогодні таки зібрався і вирішив спробувати опублікувати свою капсулу. При цьому, вирішив не проксувати (proxy) трафік I2P на віддалений хостинг Yesterweb, а саме задзеркалити копію ресурсу (mirror) на локальному сервері.
@ -38,7 +38,7 @@ systemctl i2pd restart
## Agate ## Agate
Agate (https://github.com/mbrubeck/agate) - це один з відомих серверів Gemini для публікації статики Gemtext, написаний мовою Rust. Agate (github.com/mbrubeck/agate) - це один з відомих серверів Gemini для публікації статики Gemtext, написаний мовою Rust.
Взагалі, я хотів би опублікувати дзеркало на усі мережі: I2P, Yggdrasil і Mycelium, але сервер Agate має свою специфіку роботи з SNI: чомусь, більшість розробників в очі не бачили IPv6 і таке поняття як мульти-стек. Тому забігаючи на перед - ця інструкція підходить лише для публікації одного домену в I2P; якщо ви хочете забіндитись на різні мережі, то подивіться: Взагалі, я хотів би опублікувати дзеркало на усі мережі: I2P, Yggdrasil і Mycelium, але сервер Agate має свою специфіку роботи з SNI: чомусь, більшість розробників в очі не бачили IPv6 і таке поняття як мульти-стек. Тому забігаючи на перед - ця інструкція підходить лише для публікації одного домену в I2P; якщо ви хочете забіндитись на різні мережі, то подивіться:
=> gmid-server-for-gemini-protocol.gmi Gmid - багатофункціональний сервер для Gemini => gmid-server-for-gemini-protocol.gmi Gmid - багатофункціональний сервер для Gemini
@ -98,9 +98,9 @@ WantedBy=multi-user.target
## Клієнт ## Клієнт
Для доступу до ресурсів I2P, потрібен клієнт (браузер) Gemini з функціями проксування SOCKS або HTTP. Наскільки мені відомо, популярний браузер Lagrange (https://github.com/skyjake/lagrange/) (на момент публікації матеріалу) того не вміє. Останнім часом, активно розвивається клієнт Alhena (https://github.com/mochaman/alhena), але там альтернативно реалізована клієнтська частина, що виходить за рамки специфікації і підвантажує inline-медіа на фоні. Для доступу до ресурсів I2P, потрібен клієнт (браузер) Gemini з функціями проксування SOCKS або HTTP. Наскільки мені відомо, популярний браузер Lagrange (github.com/skyjake/lagrange/) (на момент публікації матеріалу) того не вміє. Останнім часом, активно розвивається клієнт Alhena (github.com/mochaman/alhena), але там альтернативно реалізована клієнтська частина, що виходить за рамки специфікації і підвантажує inline-медіа на фоні.
Особисто я користуюсь спеціально створеним для моїх потреб GTK браузером Yoda (https://github.com/YGGverse/Yoda), де реалізовано підтримку різних типів проксі а також маршрутизацію по regex і пріоритетам: Особисто я користуюсь спеціально створеним для моїх потреб GTK браузером Yoda (github.com/YGGverse/Yoda), де реалізовано підтримку різних типів проксі а також маршрутизацію по regex і пріоритетам:
``` ```
\.i2p$ http://127.0.0.1:4444 \.i2p$ http://127.0.0.1:4444

View file

@ -1,6 +1,7 @@
# Не верифіковане проксі Kellnr на базі власного індексу # Не верифіковане проксі Kellnr на базі власного індексу
> Повний аудит рішення не проводився, зокрема обробка [config.json](https://github.com/rust-lang/crates.io-index/blob/master/config.json). Візуально, лічильники завантажень в ланцюгу проксі працюють коректно, підміна фіктивним індексом - не дозволяє оновлень. > Повний аудит рішення не проводився, зокрема обробка файлу github.com/rust-lang/crates.io-index/blob/master/config.json
> Візуально, лічильники завантажень в ланцюгу проксі працюють коректно, підміна фіктивним індексом - не дозволяє оновлень.
У попередньому гайді, я описав базове встановлення Kellnr в режимі локального та віддаленого проксі сервера: У попередньому гайді, я описав базове встановлення Kellnr в режимі локального та віддаленого проксі сервера:
=> rust-crates-mirroring-with-kellnr.gmi Організація локального дзеркала залежностей Cargo з Kellnr => rust-crates-mirroring-with-kellnr.gmi Організація локального дзеркала залежностей Cargo з Kellnr

View file

@ -79,7 +79,7 @@
=> https://blogs.gnome.org/alicem/files/2021/03/ephy-pinned2-768x78.png Вигляд закріплених вкладок при зміні ширини вікна => https://blogs.gnome.org/alicem/files/2021/03/ephy-pinned2-768x78.png Вигляд закріплених вкладок при зміні ширини вікна
* Epiphany вручну підсвічує стрілки, коли вкладка була відкрита за межами екрана, також надає спливаюче вікно для швидкого перемикання між вкладками, коли вони не вміщаються на екрані, однак це не допомагає з перестановкою вкладок * Epiphany вручну підсвічує стрілки, коли вкладка була відкрита за межами екрана, також надає спливаюче вікно для швидкого перемикання між вкладками, коли вони не вміщаються на екрані, однак це не допомагає з перестановкою вкладок
* динамічний віджет DynamicNotebook (https://valadoc.org/granite/Granite.Widgets.DynamicNotebook.html) в Elementary реалізує затримку зміни розміру після закриття вкладки, але це не завжди надійно; наприклад, він стрибає, коли стрілки прокрутки зникають, крім того, він може працювати лише тоді, коли вкладки не розширені * динамічний віджет DynamicNotebook (valadoc.org/granite/Granite.Widgets.DynamicNotebook.html) в Elementary реалізує затримку зміни розміру після закриття вкладки, але це не завжди надійно; наприклад, він стрибає, коли стрілки прокрутки зникають, крім того, він може працювати лише тоді, коли вкладки не розширені
* ці особливості підкреслюють, що, хоча обидва додатки намагаються покращити управління вкладками, існують обмеження, які можуть призвести до непередбачуваного або незручного досвіду для користувачів; підсвічування стрілок може бути корисним, але не вирішує основну проблему з доступом до вкладок, які відкриваються за межами екрана; затримка зміни розміру може бути корисною, але її ненадійність може викликати додаткові труднощі * ці особливості підкреслюють, що, хоча обидва додатки намагаються покращити управління вкладками, існують обмеження, які можуть призвести до непередбачуваного або незручного досвіду для користувачів; підсвічування стрілок може бути корисним, але не вирішує основну проблему з доступом до вкладок, які відкриваються за межами екрана; затримка зміни розміру може бути корисною, але її ненадійність може викликати додаткові труднощі
Крім того, GtkNotebook містить як вміст, так і вкладки, і вони є невід'ємними, тому неможливо мати вкладки у повноекранному режимі, автоматично приховуючи їх з заголовної панелі, або розміщувати їх у панелі заголовку, відокремлено від вмісту. Крім того, GtkNotebook містить як вміст, так і вкладки, і вони є невід'ємними, тому неможливо мати вкладки у повноекранному режимі, автоматично приховуючи їх з заголовної панелі, або розміщувати їх у панелі заголовку, відокремлено від вмісту.
@ -94,7 +94,7 @@
Отже, з урахуванням усіх цих обмежень, я вважаю, що найчистішим шляхом вперед є створення абсолютно нового віджета, який реалізує специфічно динамічні вкладки. Таким чином, також зможемо відокремити перегляд вкладок і панель вкладок в окремі віджети, так само як GtkStack і GtkStackSwitcher - є окремими. Отже, з урахуванням усіх цих обмежень, я вважаю, що найчистішим шляхом вперед є створення абсолютно нового віджета, який реалізує специфічно динамічні вкладки. Таким чином, також зможемо відокремити перегляд вкладок і панель вкладок в окремі віджети, так само як GtkStack і GtkStackSwitcher - є окремими.
Реалізацію цього віджета було розпочато незадовго до GUADEC 2020 року, і до кінця вересня, на момент долучення до Purism (https://puri.sm) - її було майже завершено. У січні ми з Адрієном нарешті знайшли час, щоб закінчити, переглянути та впровадити його. Реалізацію цього віджета було розпочато незадовго до GUADEC 2020 року, і до кінця вересня, на момент долучення до Purism (puri.sm) - її було майже завершено. У січні ми з Адрієном нарешті знайшли час, щоб закінчити, переглянути та впровадити його.
Результатом цього стали два віджети під назвою HdyTabView і HdyTabBar, доступні в бібліотеці libhandy, починаючи з версії 1.2: Результатом цього стали два віджети під назвою HdyTabView і HdyTabBar, доступні в бібліотеці libhandy, починаючи з версії 1.2:

View file

@ -1,10 +1,10 @@
# Ізоляція Linux від прямих Інтернет з'єднань на базі QEMU / Virtual Machine Manager з VSOCK # Ізоляція Linux від прямих Інтернет з'єднань на базі QEMU / Virtual Machine Manager з VSOCK
В матеріалі наведено приклад ізоляції віртуальної операційної системи Linux (та відповідно - усіх її програм) від вхідних та вихідних з'єднань в Інтернет, без додаткових правил в iptables. Зв'язок передбачається виключно засобами локальної мережі Yggdrasil з використанням технології VSOCK (https://man7.org/linux/man-pages/man7/vsock.7.html), а Інтернет-інтерфейс - буде відсутній як такий. В матеріалі наведено приклад ізоляції віртуальної операційної системи Linux (та відповідно - усіх її програм) від вхідних та вихідних з'єднань в Інтернет, без додаткових правил в iptables. Зв'язок передбачається виключно засобами локальної мережі Yggdrasil з використанням технології VSOCK (man7.org/linux/man-pages/man7/vsock.7.html), а Інтернет-інтерфейс - буде відсутній як такий.
Кому потрібен доступ в Інтернет, це можна зробити окремо - засобами локальних проксі DNS та дзеркал репозиторіїв. Тобто, така система не буде "сліпою" та з певними доопрацюваннями буде здатна оновлюватись і взаємодіяти зі світом, але робити це без витоків через дірки софту та пропущені опції в конфігах. Кому потрібен доступ в Інтернет, це можна зробити окремо - засобами локальних проксі DNS та дзеркал репозиторіїв. Тобто, така система не буде "сліпою" та з певними доопрацюваннями буде здатна оновлюватись і взаємодіяти зі світом, але робити це без витоків через дірки софту та пропущені опції в конфігах.
Нижче розглядається налаштування засобами GUI Virtual Machine Manager (https://virt-manager.org), що зручно для десктоп образів. Користувачі CLI, зокрема системні адміністратори - можуть цей допис не читати. Нижче розглядається налаштування засобами GUI Virtual Machine Manager (virt-manager.org), що зручно для десктоп образів. Користувачі CLI, зокрема системні адміністратори - можуть цей допис не читати.
## VSOCK ## VSOCK

View file

@ -109,7 +109,7 @@ $ mat2 -show /path/to/file.pdf
creator: Mozilla Firefox 145.0.1 creator: Mozilla Firefox 145.0.1
format: PDF-1.7 format: PDF-1.7
mod-date: -1 mod-date: -1
producer: cairo 1.18.0 (https://cairographics.org) producer: cairo 1.18.0 (cairographics.org)
``` ```
то його "очищена" версія виглядатиме так: то його "очищена" версія виглядатиме так:

View file

@ -1,8 +1,8 @@
# Misfin - поштовий сателіт Geminispace # Misfin - поштовий сателіт Geminispace
Про Misfin я знаю давно, декілька разів намагався ним користуватись, але жодного - не доводилось перевірити його в реальних умовах. Зокрема, через брак аудиторії та відсутність такої необхідності в сучасному світі месенджерів, де й сама пошта є епохою динозаврів. Утім, хотілось би трішки освітити цю альтернативну технологію для широкого загалу, адже з протоколом Gemini - знайомий не заочно і вже встиг написати для його специфікації, у свій час, повнофункціональний GTK браузер Yoda (https://github.com/YGGverse/Yoda) а також ряд інших серверних рішень різними мовами. Про Misfin я знаю давно, декілька разів намагався ним користуватись, але жодного - не доводилось перевірити його в реальних умовах. Зокрема, через брак аудиторії та відсутність такої необхідності в сучасному світі месенджерів, де й сама пошта є епохою динозаврів. Утім, хотілось би трішки освітити цю альтернативну технологію для широкого загалу, адже з протоколом Gemini - знайомий не заочно і вже встиг написати для його специфікації, у свій час, повнофункціональний GTK браузер Yoda (github.com/YGGverse/Yoda) а також ряд інших серверних рішень різними мовами.
Протокол доставки повідомлень Misfin - названо на честь космічного проєкту MSFN, Manned Space Flight Network (https://en.wikipedia.org/wiki/Manned_Space_Flight_Network) і є спробою реалізації мінімалістичної альтернативи класичній пошті e-mail, за образом і подобою концепції протоколу Gemini. Протокол доставки повідомлень Misfin - названо на честь космічного проєкту MSFN, Manned Space Flight Network (en.wikipedia.org/wiki/Manned_Space_Flight_Network) і є спробою реалізації мінімалістичної альтернативи класичній пошті e-mail, за образом і подобою концепції протоколу Gemini.
З офіційного маніфесту: З офіційного маніфесту:

View file

@ -1,10 +1,10 @@
# Мої перші враження від Flarum # Мої перші враження від Flarum
Я знаю, що тема вибору рушія для форуму й досі актуальна для адмінів, тому лишу деякі спостереження після свого першого досвіду користування Flarum (https://flarum.org) впродовж місяця. Я знаю, що тема вибору рушія для форуму й досі актуальна для адмінів, тому лишу деякі спостереження після свого першого досвіду користування Flarum (flarum.org) впродовж місяця.
## Сподобалося ## Сподобалося
* Мінімалістичний. Якщо порівнювати з популярним Discourse (https://www.discourse.org) - я не втопився в налаштуваннях, а також не мучусь з усіляким задротним JS типу кастомних Ctrl+F (та їх вимиканням) * Мінімалістичний. Якщо порівнювати з популярним Discourse (www.discourse.org) - я не втопився в налаштуваннях, а також не мучусь з усіляким задротним JS типу кастомних Ctrl+F (та їх вимиканням)
* Зручно писати довгі дописи, статті. Усі навороти організовані модулями, я просто вимкнув BBCode і лишив Markdown, тому усі мої попередні дописи вдалося просто портувати. Також тут зручна форма редагування: вона влаштована так, що вікно можна просто масштабувати, при цьому текст вирівняно до ширини реального блоку стандартної теми; оновлення існуючого блоку відбувається прямо під час написання. * Зручно писати довгі дописи, статті. Усі навороти організовані модулями, я просто вимкнув BBCode і лишив Markdown, тому усі мої попередні дописи вдалося просто портувати. Також тут зручна форма редагування: вона влаштована так, що вікно можна просто масштабувати, при цьому текст вирівняно до ширини реального блоку стандартної теми; оновлення існуючого блоку відбувається прямо під час написання.
* Правильна архітектура на базі Symfony / Laravel: це значить що тут використовуються промислові, перевірені часом стандарти, а не самопал. Це трохи ускладнює модифікації в плані часових витрат на розгортання середовища але воно того варте, плюсую. * Правильна архітектура на базі Symfony / Laravel: це значить що тут використовуються промислові, перевірені часом стандарти, а не самопал. Це трохи ускладнює модифікації в плані часових витрат на розгортання середовища але воно того варте, плюсую.
* Є більш-менш робочий сценарій перегляду форуму без JavaScript. Це може бути зручно для користувачів Інтернет в плані SEO просування а також альт-мереж, в плані приватності - бо тут часто зустрічаються садомазохісти що орієнтуються без ~світла~ JS. * Є більш-менш робочий сценарій перегляду форуму без JavaScript. Це може бути зручно для користувачів Інтернет в плані SEO просування а також альт-мереж, в плані приватності - бо тут часто зустрічаються садомазохісти що орієнтуються без ~світла~ JS.
@ -13,13 +13,13 @@
## Не сподобалося ## Не сподобалося
* Повільний. Реально настільки, що я спочатку не розумів які такі функції працюють на бекграунді, але вимкнувши дебаг режим, інших не знайшов. Тут можна грішити на SSD і той факт, що я не налаштував сесії в пам'яті, але в мене на цьому ж диску працює βtracker (btracker-bittorrent-tracker-in-rust.gmi), який швиденько собі шукає по нинішнім 500 торентам, враховуючи час на bencode парсинг, scrape та повнотекстовий пошук файлів, яких там буває до десятка тисяч на торент. Не знаю коротше, поки загадка для мене. * Повільний. Реально настільки, що я спочатку не розумів які такі функції працюють на бекграунді, але вимкнувши дебаг режим, інших не знайшов. Тут можна грішити на SSD і той факт, що я не налаштував сесії в пам'яті, але в мене на цьому ж диску працює βtracker (btracker-bittorrent-tracker-in-rust.gmi), який швиденько собі шукає по нинішнім 500 торентам, враховуючи час на bencode парсинг, scrape та повнотекстовий пошук файлів, яких там буває до десятка тисяч на торент. Не знаю коротше, поки загадка для мене.
* Немає RSS з коробки. Це сабж другої версії рушія, котру я поставив від балди як "профі" не боючись бета-тестів і можливих доопрацювань - я потім не хочу мігрувати, мені простіше почати з другої. Отже, я поцікавився (https://discuss.flarum.org/d/38016-rss-feed-for-v2) сабжем, та зрозумів, що адміни ультра-модні, RSS для них вже не камільфо - враховуйте. * Немає RSS з коробки. Це сабж другої версії рушія, котру я поставив від балди як "профі" не боючись бета-тестів і можливих доопрацювань - я потім не хочу мігрувати, мені простіше почати з другої. Отже, я поцікавився (discuss.flarum.org/d/38016-rss-feed-for-v2) сабжем, та зрозумів, що адміни ультра-модні, RSS для них вже не камільфо - враховуйте.
* Немає української локалізації і покищо хз як натягнути першу версію локалізацію рушія на другу, хоча б частково, я думаю там має бути спільний скелет. Майнейнеру на моє питання - пофіг (https://discuss.flarum.org/d/31921-ukrainian-language-pack-for-flarum/54). * Немає української локалізації і покищо хз як натягнути першу версію локалізацію рушія на другу, хоча б частково, я думаю там має бути спільний скелет. Майнейнеру на моє питання - пофіг (discuss.flarum.org/d/31921-ukrainian-language-pack-for-flarum/54).
* Налаштування теми. Зокрема - теґів: тут якийсь фільтр палітри, дрочусь і по цей день: бо в темній темі одне а в світлій інше. Утім, це не є великою траблою якщо зайнятись питанням фундаментально. * Налаштування теми. Зокрема - теґів: тут якийсь фільтр палітри, дрочусь і по цей день: бо в темній темі одне а в світлій інше. Утім, це не є великою траблою якщо зайнятись питанням фундаментально.
* Хоч і наявне сховище файлів для аватарок, не можливо просто додати вкладення до повідомлення, тому наприклад, далекі від технічних приколів адміни сусіднього форуму `zabytki.in.ua` - публікують історичні фото на сторонніх сервісах, типу `twimg.com` про що я їм своєчасно нагадав (https://zabytki.in.ua/community/d/618-zovnisnye-sxovishhe-dlya-zobrazen) * Хоч і наявне сховище файлів для аватарок, не можливо просто додати вкладення до повідомлення, тому наприклад, далекі від технічних приколів адміни сусіднього форуму `zabytki.in.ua` - публікують історичні фото на сторонніх сервісах, типу `twimg.com` про що я їм своєчасно нагадав (zabytki.in.ua/community/d/618-zovnisnye-sxovishhe-dlya-zobrazen)
* З коробки немає функціональності відтермінованих дописів, чернеток та автозбереження, що б могло бути зручним в локальних умовах перебоїв з живленням. * З коробки немає функціональності відтермінованих дописів, чернеток та автозбереження, що б могло бути зручним в локальних умовах перебоїв з живленням.
* Немає підтримки альтернативних URL парсером Markdown, зокрема - сирих IPv6 і усіляких протоколів (схем) Gemini (gemini-protocol-as-http-alternative.gmi), Nex (nex-lightweight-gemini-alternative.gmi) тощо: й досі вісять не клікабельні лінки, знаю, але фікситиму потім - тут в нас під капотом патерни Symfony / Laravel. * Немає підтримки альтернативних URL парсером Markdown, зокрема - сирих IPv6 і усіляких протоколів (схем) Gemini (gemini-protocol-as-http-alternative.gmi), Nex (nex-lightweight-gemini-alternative.gmi) тощо: й досі вісять не клікабельні лінки, знаю, але фікситиму потім - тут в нас під капотом патерни Symfony / Laravel.
* Немає підтримки кастомних E-mail та альтернативної системи авторизації зокрема. Є окремі модулі OAuth, але в рамках моєї спільноти не актуально. Думаю, це частково вирішується модулями але з побаченого я зустрів залежність від констант filter_var аж на рівні хвалених вище компонентів Symfony. Також є науково-популярні рішення від типових веб-розробників, які мені замість дебатів, таки довелось просто вирішити для себе форком фреймворку (https://github.com/YGGverse/flarum-framework/commit/bd421ee6604b358a9c81e59d4f100c93e2ce264d). * Немає підтримки кастомних E-mail та альтернативної системи авторизації зокрема. Є окремі модулі OAuth, але в рамках моєї спільноти не актуально. Думаю, це частково вирішується модулями але з побаченого я зустрів залежність від констант filter_var аж на рівні хвалених вище компонентів Symfony. Також є науково-популярні рішення від типових веб-розробників, які мені замість дебатів, таки довелось просто вирішити для себе форком фреймворку (github.com/YGGverse/flarum-framework/commit/bd421ee6604b358a9c81e59d4f100c93e2ce264d).
## Висновки ## Висновки

View file

@ -6,7 +6,7 @@
Чи доведу почате до кінця - не знаю, але до відома, така ініціатива реалізується в гілці: Чи доведу почате до кінця - не знаю, але до відома, така ініціатива реалізується в гілці:
=> https://github.com/YGGverse/i2pd/tree/mycelium => https://github.com/YGGverse/i2pd/tree/mycelium
UPD. експериментально поколупавшись (https://github.com/YGGverse/i2pd/pull/1) в реалізації транспорту, прийшов до висновку, що варто або створити окремий реєстр `eNTCP2V6MeshIdx` або перейменувати самі опції конфігу з `ygg` на щось типу `mesh` щоб воно відповідало логіці. UPD. експериментально поколупавшись (github.com/YGGverse/i2pd/pull/1) в реалізації транспорту, прийшов до висновку, що варто або створити окремий реєстр `eNTCP2V6MeshIdx` або перейменувати самі опції конфігу з `ygg` на щось типу `mesh` щоб воно відповідало логіці.
Наразі, кому потрібна підтримка Mycelium тут і зараз - простіше додати умову: Наразі, кому потрібна підтримка Mycelium тут і зараз - простіше додати умову:
=> https://github.com/PurpleI2P/i2pd/pull/2245/commits/b079fb63c759a27ef090ad759a102d1b108f5650 "OR" => https://github.com/PurpleI2P/i2pd/pull/2245/commits/b079fb63c759a27ef090ad759a102d1b108f5650 "OR"

View file

@ -1,6 +1,6 @@
# Каталог сервісів Mycelium # Каталог сервісів Mycelium
Наразі існує один відомий мені, вручну модерований (через PR) список [YGGverse](https://github.com/YGGverse/mycelium-catalog). Нижче його локальна копія, якщо маєте чим поділитись - пишіть в коментарях, може згодом піднімемо якийсь аналог [Web-directory](http://[21e:a51c:885b:7db0:166e:927:98cd:d186]), але з більш широкою підтримкою протоколів / портів. Наразі існує один відомий мені, вручну модерований (через PR) список (github.com/YGGverse/mycelium-catalog). Нижче його локальна копія, якщо маєте чим поділитись - пишіть в коментарях, може згодом піднімемо якийсь аналог Web-directory (http://[21e:a51c:885b:7db0:166e:927:98cd:d186]), але з більш широкою підтримкою протоколів / портів.
## BitTorrent ## BitTorrent

View file

@ -1,12 +1,12 @@
# CDMA в Україні - всьо # CDMA в Україні - всьо
Згадалась мені альтернативна стільникова мережа CDMA (https://uk.wikipedia.org/wiki/Code_Division_Multiple_Access) - rолись користувався нею для оформлення міського номеру в мобільному форматі для тодішнього бізнес-проєкту. Згадалась мені альтернативна стільникова мережа CDMA (uk.wikipedia.org/wiki/Code_Division_Multiple_Access) - rолись користувався нею для оформлення міського номеру в мобільному форматі для тодішнього бізнес-проєкту.
Технологічно, CDMA відрізняється низьким рівнем випромінення, близьким або таким що не перевищує "фонове". Тобто гіпотетично, це була також менш шкідлива для здоров'я альтернатива GSM (https://uk.wikipedia.org/wiki/GSM), де під час роботи останнього є характерні звукові сигнали, якщо розмістити активний телефон поряд з динаміками. CDMA також був нішевим продуктом в сфері мобільного Інтернет. Технологічно, CDMA відрізняється низьким рівнем випромінення, близьким або таким що не перевищує "фонове". Тобто гіпотетично, це була також менш шкідлива для здоров'я альтернатива GSM (uk.wikipedia.org/wiki/GSM), де під час роботи останнього є характерні звукові сигнали, якщо розмістити активний телефон поряд з динаміками. CDMA також був нішевим продуктом в сфері мобільного Інтернет.
Через довжину хвилі робочого діапазону, якість зв'язку мала свої переваги - наприклад, зв'язок був доступний в пішохідних переходах (ще тоді без встановлених там локальних станцій ретрансляції) і недоліки - при низькому рівні сигналу, було чути специфічний шум під час голосового виклику. Вторинним недоліком, була й більш висока ціна, через більшу поширеність в Україні GSM, утім це було лише локальною проблемою. Вища ціна стосувалася не тільки тарифних планів, але й "заліза" адже сім-картки також мали технологічні відмінності і звичайні GSM пристрої (телефони, модеми) були не сумісними. Через довжину хвилі робочого діапазону, якість зв'язку мала свої переваги - наприклад, зв'язок був доступний в пішохідних переходах (ще тоді без встановлених там локальних станцій ретрансляції) і недоліки - при низькому рівні сигналу, було чути специфічний шум під час голосового виклику. Вторинним недоліком, була й більш висока ціна, через більшу поширеність в Україні GSM, утім це було лише локальною проблемою. Вища ціна стосувалася не тільки тарифних планів, але й "заліза" адже сім-картки також мали технологічні відмінності і звичайні GSM пристрої (телефони, модеми) були не сумісними.
Власне, останнє мабуть і стало причиною його остаточного витіснення: у січні 2025 року компанія «Інтертелеком» перейшла на надання послуг у стандарті GSM (https://www.intertelecom.ua/aboutcompany). Стосовно 2025 року я не впевнений, адже цікавився питанням декілька років тому, і вже тоді підтримки CDMA не було - можливо на сайті переплутані дати серверу, бо в копірайті зараз 2028 рік :) Власне, останнє мабуть і стало причиною його остаточного витіснення: у січні 2025 року компанія «Інтертелеком» перейшла на надання послуг у стандарті GSM (www.intertelecom.ua/aboutcompany). Стосовно 2025 року я не впевнений, адже цікавився питанням декілька років тому, і вже тоді підтримки CDMA не було - можливо на сайті переплутані дати серверу, бо в копірайті зараз 2028 рік :)
Була також інша організація - CDMA Україна (https://uk.wikipedia.org/wiki/CDMA_UKRAINE), але особисто послугами цього провайдера не користувався і сьогодні їх сайт вже взагалі не доступний, його можна відкрити тільки через веб-архів Була також інша організація - CDMA Україна (uk.wikipedia.org/wiki/CDMA_UKRAINE), але особисто послугами цього провайдера не користувався і сьогодні їх сайт вже взагалі не доступний, його можна відкрити тільки через веб-архів
=> https://web.archive.org/web/20120922025805/http://www.cdma.ua/ => https://web.archive.org/web/20120922025805/http://www.cdma.ua/

View file

@ -69,7 +69,7 @@ UPD. видача з гугла, сумісність поки не переві
=> https://www.gog.com/en/game/blood_refreshed_supply => https://www.gog.com/en/game/blood_refreshed_supply
=> https://store.epicgames.com/en-US/p/blood-refreshed-supply-f8bb7c => https://store.epicgames.com/en-US/p/blood-refreshed-supply-f8bb7c
В залежності від способу отримання, файли вказані в README (https://github.com/clipmove/NotBlood#installing) копіюються до теки з бінарником `notblood`: В залежності від способу отримання, файли вказані в README (github.com/clipmove/NotBlood#installing) копіюються до теки з бінарником `notblood`:
* BLOOD.INI * BLOOD.INI
* BLOOD.RFF * BLOOD.RFF

View file

@ -8,9 +8,9 @@
## Що таке Snac ## Що таке Snac
Snac (https://codeberg.org/grunfink/snac2) - це мінімалістична, JS-less, написана мовою C альтернатива серверу Mastodon, яка також не потребує інсталяції PostgreSQL, натомість зберігає усі дані профілю у файлах JSON. Нещодавно, до цього серверу було додано підтримку IPv6 (PR#256), а отже - він буде працювати й з діапазоном Yggdrasil `0200::/7` Snac (codeberg.org/grunfink/snac2) - це мінімалістична, JS-less, написана мовою C альтернатива серверу Mastodon, яка також не потребує інсталяції PostgreSQL, натомість зберігає усі дані профілю у файлах JSON. Нещодавно, до цього серверу було додано підтримку IPv6 (PR#256), а отже - він буде працювати й з діапазоном Yggdrasil `0200::/7`
Оскільки Yggdrasil дозволяє безкоштовно генерувати не обмежену кількість статичних IP (на базі приватного ключа Ed25519), тут немає звичної потреби в DNS. Хоча, можна опціонально прикрутити Alfis (https://github.com/Revertron/Alfis), але особисто я цим ділом не користуюсь (зокрема, й через досі не вирішену проблему #364, тому також не хочу нав'язувати його в рамках протоколу ActivityPub - буде просто формат `username@IPv6`, який мені не потрібно а ні оновлювати, а ні майнити потім. Оскільки Yggdrasil дозволяє безкоштовно генерувати не обмежену кількість статичних IP (на базі приватного ключа Ed25519), тут немає звичної потреби в DNS. Хоча, можна опціонально прикрутити Alfis (github.com/Revertron/Alfis), але особисто я цим ділом не користуюсь (зокрема, й через досі не вирішену проблему #364, тому також не хочу нав'язувати його в рамках протоколу ActivityPub - буде просто формат `username@IPv6`, який мені не потрібно а ні оновлювати, а ні майнити потім.
## Встановлення ## Встановлення
@ -234,7 +234,7 @@ location /theme.css {
### Специфіка клієнтських застосунків ### Специфіка клієнтських застосунків
Особисто, я встиг перевірити тільки Tuba (https://tuba.geopjr.dev/). Як виявилось, даний клієнт має захардкожену обробку схеми HTTPS, тому якщо користуєтесь цим застосунком, доведеться налаштувати окремий інтерфейс Nginx на порті `443` з використанням сертифікату, хоч у випадку з Yggdrasil - це зайва "капуста" і мабуть поки що лишусь на веб-інтерфейсі або зроблю і викладу потім патч. Особисто, я встиг перевірити тільки Tuba (tuba.geopjr.dev/). Як виявилось, даний клієнт має захардкожену обробку схеми HTTPS, тому якщо користуєтесь цим застосунком, доведеться налаштувати окремий інтерфейс Nginx на порті `443` з використанням сертифікату, хоч у випадку з Yggdrasil - це зайва "капуста" і мабуть поки що лишусь на веб-інтерфейсі або зроблю і викладу потім патч.
UPD 1. розробник виявився супер-оперативним і вже створив гілку з патчем: UPD 1. розробник виявився супер-оперативним і вже створив гілку з патчем:
@ -281,7 +281,7 @@ flatpak-builder --force-clean build\
### Моніторинг трафіку ### Моніторинг трафіку
Оскільки сервер Snac не передбачає користування JS інтерфейсом, а поточна конфігурація використовує Nginx, можу по ходу справи також порадити goaccess (https://goaccess.io/) - CLI утиліту для зручного моніторингу статистики користувацького трафіку, якщо такий буде: Оскільки сервер Snac не передбачає користування JS інтерфейсом, а поточна конфігурація використовує Nginx, можу по ходу справи також порадити goaccess (goaccess.io) - CLI утиліту для зручного моніторингу статистики користувацького трафіку, якщо такий буде:
``` bash ``` bash
goaccess /var/log/nginx/access.log goaccess /var/log/nginx/access.log
@ -289,7 +289,7 @@ goaccess /var/log/nginx/access.log
### Приватний режим ### Приватний режим
Yggdrasil дозволяє маскувати реальний IP, якщо ви користуєтесь власним вихідним вузлом (https://publicpeers.neilalexander.dev/). Звісно, таку можливість не варто розглядати в контексті анонімізації окремо без додаткових шарів, оскільки використання протоколу Yggdrasil без наприклад таких проксі, як Shadowsocks - легко виявляється. Yggdrasil дозволяє маскувати реальний IP, якщо ви користуєтесь власним вихідним вузлом (publicpeers.neilalexander.dev). Звісно, таку можливість не варто розглядати в контексті анонімізації окремо без додаткових шарів, оскільки використання протоколу Yggdrasil без наприклад таких проксі, як Shadowsocks - легко виявляється.
Ця тема виходить за рамки матеріалу, але зверну увагу на деякі аспекти, якщо ви плануєте користуватись збіркою Snac + Yggdrasil в режимі "інкогніто". Протокол ActivityPub передбачає "спілкування" між серверами для обміну івентами. Тобто потенційний фоловер може відправити запит підписки на на дозволений у фаєрвол інтерфейс `0200::/7`, але вказати в заголовках події ActivityPub - зворотній DNS на вузол в мережі Інтернет. Таким чином, ваша система здійснить транзакцію з білого IP через системний резольвер або без нього, використовуючи локальний Curl API від Snac. Ця тема виходить за рамки матеріалу, але зверну увагу на деякі аспекти, якщо ви плануєте користуватись збіркою Snac + Yggdrasil в режимі "інкогніто". Протокол ActivityPub передбачає "спілкування" між серверами для обміну івентами. Тобто потенційний фоловер може відправити запит підписки на на дозволений у фаєрвол інтерфейс `0200::/7`, але вказати в заголовках події ActivityPub - зворотній DNS на вузол в мережі Інтернет. Таким чином, ваша система здійснить транзакцію з білого IP через системний резольвер або без нього, використовуючи локальний Curl API від Snac.

View file

@ -4,7 +4,7 @@
## Pyseeder ## Pyseeder
pyseeder (https://github.com/PurpleI2P/pyseeder) - утиліта командного рядка, написана мовою Python. Вона використовується для різних задач, зокрема для генерації файлу i2pseeds.su3, необхідного для пошуку вузлів при першому запуску роутера I2P (в i2pd, він звичайно вказується в i2pd.conf). Це працює приблизно так, як DNS сід гаманців BitCoin. pyseeder (github.com/PurpleI2P/pyseeder) - утиліта командного рядка, написана мовою Python. Вона використовується для різних задач, зокрема для генерації файлу i2pseeds.su3, необхідного для пошуку вузлів при першому запуску роутера I2P (в i2pd, він звичайно вказується в i2pd.conf). Це працює приблизно так, як DNS сід гаманців BitCoin.
Інструкції з користування pyseeder описані в README.md проєкту: Інструкції з користування pyseeder описані в README.md проєкту:
=> https://github.com/PurpleI2P/pyseeder/blob/master/README.md => https://github.com/PurpleI2P/pyseeder/blob/master/README.md

View file

@ -252,7 +252,7 @@ Git - по своїй архітектурі, вже є децентралізо
Мені досі не дуже зрозумілий Web-UI Radicle. Вони перейменували Pull в Patch, це вже збиває з толку. Я безнадійно звик до GitHub. З іншого боку, активно експериментую з переходом на протокол Gemini, а з ним - зміною концепції взаємодії з контентом: для текстових сторінок - свій застосунок, для месенджера - інший, для медіа - третій. Тобто намагаюсь відучити себе від Веб-браузеру, в який перекочувало буквально все моє життя. Мені досі не дуже зрозумілий Web-UI Radicle. Вони перейменували Pull в Patch, це вже збиває з толку. Я безнадійно звик до GitHub. З іншого боку, активно експериментую з переходом на протокол Gemini, а з ним - зміною концепції взаємодії з контентом: для текстових сторінок - свій застосунок, для месенджера - інший, для медіа - третій. Тобто намагаюсь відучити себе від Веб-браузеру, в який перекочувало буквально все моє життя.
В соціальному плані, тут немає властивих Веб-прошаркам тікетів, пул-реквестів та смайликів: спілкування розробників відбувається в середовищі командного рядка і більше нагадує концепцію ngit (https://gitworkshop.dev/ngit). Технічно, я думаю, що це може бути реалізовано в перспективі, утім зараз тільки Git-like CLI. В соціальному плані, тут немає властивих Веб-прошаркам тікетів, пул-реквестів та смайликів: спілкування розробників відбувається в середовищі командного рядка і більше нагадує концепцію ngit (gitworkshop.dev/ngit). Технічно, я думаю, що це може бути реалізовано в перспективі, утім зараз тільки Git-like CLI.
Тому, суб'єктивно, Radicle - це інструмент в першу чергу для людей, які готові змінювати свідомість та власні звички, чий розум відкритий для нового досвіду і тестування на цьому ясному розумі нових концепцій, у даному випадку - на базі старих технологій. Цей проєкт однозначно вартий уваги через як мінімум свою інтенсивність розробки і я особисто за ним з цікавістю спостерігаю. Тому, суб'єктивно, Radicle - це інструмент в першу чергу для людей, які готові змінювати свідомість та власні звички, чий розум відкритий для нового досвіду і тестування на цьому ясному розумі нових концепцій, у даному випадку - на базі старих технологій. Цей проєкт однозначно вартий уваги через як мінімум свою інтенсивність розробки і я особисто за ним з цікавістю спостерігаю.

View file

@ -239,7 +239,8 @@ npm install
VITE_RUNTIME_CONFIG=true npm run build VITE_RUNTIME_CONFIG=true npm run build
tar -czvf radicle-explorer.tar.gz -C build . tar -czvf radicle-explorer.tar.gz -C build .
``` ```
* рекомендую збирати з підтримкою динамічного `config.json` (`VITE_RUNTIME_CONFIG=true`), інакше після кожної зміни конфігурації, доведеться заново перезбирати весь білд і перезаливати його на сервер; детальніше про це написано [тут](https://app.radicle.xyz/nodes/iris.radicle.xyz/rad%3Az4V1sjrXqjvFdnCUbxPFqd5p4DtH5/tree/README.md#run-time-configuration). * рекомендую збирати з підтримкою динамічного `config.json` (`VITE_RUNTIME_CONFIG=true`), інакше після кожної зміни конфігурації, доведеться заново перезбирати весь білд і перезаливати його на сервер; детальніше про це написано тут:
=> https://app.radicle.xyz/nodes/iris.radicle.xyz/rad%3Az4V1sjrXqjvFdnCUbxPFqd5p4DtH5/tree/README.md#run-time-configuration
### Встановлення ### Встановлення

View file

@ -1,14 +1,14 @@
# Reticulum / MeshChat з підключенням через Yggdrasil # Reticulum / MeshChat з підключенням через Yggdrasil
Reticulum (https://github.com/markqvist/Reticulum) - відносно новий протокол зв'язку, створений в першу чергу для радіо-мереж з метою захищеної, децентралізованої передачі даних в умовах високої затримки сигналу, але може працювати в оверлейному режимі (поверх інших мереж). На відміну від наявних реалізацій локальних мереж CJDNS, Yggdrasil, Mycelium та інших, в основі не використовує стек IP як такий, натомість реалізує передачу даних в етері через пірингові ретранслятори, вже знайомі користувачам I2P як "хопи". Reticulum (github.com/markqvist/Reticulum) - відносно новий протокол зв'язку, створений в першу чергу для радіо-мереж з метою захищеної, децентралізованої передачі даних в умовах високої затримки сигналу, але може працювати в оверлейному режимі (поверх інших мереж). На відміну від наявних реалізацій локальних мереж CJDNS, Yggdrasil, Mycelium та інших, в основі не використовує стек IP як такий, натомість реалізує передачу даних в етері через пірингові ретранслятори, вже знайомі користувачам I2P як "хопи".
Сфери застосування технології Reticulum можуть бути різними: в цивільному сегменті - розробляються такі протоколи обміну даними як LXMF (https://github.com/markqvist/lxmf) та вже функціонуюча його засобами соціальна платформа NomadNet (https://github.com/markqvist/NomadNet), що віддалено може нагадувати гібрид ZeroNet і Gemini Protocol поверх I2P, з функціональністю месенджера. Сфери застосування технології Reticulum можуть бути різними: в цивільному сегменті - розробляються такі протоколи обміну даними як LXMF (github.com/markqvist/lxmf) та вже функціонуюча його засобами соціальна платформа NomadNet (github.com/markqvist/NomadNet), що віддалено може нагадувати гібрид ZeroNet і Gemini Protocol поверх I2P, з функціональністю месенджера.
В технічну складову роботи мережі вдаватись не буду, оскільки сам в ній тільки розбираюсь. Натомість, пропоную ознайомитись з Reticulum на рівні користувача, встановивши клієнтське програмне забезпечення соціальної платформи та налаштувавши вузол ретрансляції для локальних користувачів мереж Yggdrasil та Mycelium. В технічну складову роботи мережі вдаватись не буду, оскільки сам в ній тільки розбираюсь. Натомість, пропоную ознайомитись з Reticulum на рівні користувача, встановивши клієнтське програмне забезпечення соціальної платформи та налаштувавши вузол ретрансляції для локальних користувачів мереж Yggdrasil та Mycelium.
## Клієнт ## Клієнт
Оригінальний клієнт NomadNet я пробував встановлювати багато разів, але інтерфейс TUI видавався не зручним; через вибраний мною не стабільний пір я також не міг підключитися до внутрішніх сайтів і зрозуміти як це працює. Невдовзі, перечитуючи документацію, вирішив спробувати MeshChat (https://github.com/liamcottle/reticulum-meshchat), який використовує ті само технології, але надає їх в сучасному та інтуїтивно зрозумілому форматі Web UI (засобами Vue / Node.js) Оригінальний клієнт NomadNet я пробував встановлювати багато разів, але інтерфейс TUI видавався не зручним; через вибраний мною не стабільний пір я також не міг підключитися до внутрішніх сайтів і зрозуміти як це працює. Невдовзі, перечитуючи документацію, вирішив спробувати MeshChat (github.com/liamcottle/reticulum-meshchat), який використовує ті само технології, але надає їх в сучасному та інтуїтивно зрозумілому форматі Web UI (засобами Vue / Node.js)
Окрім перегляду ресурсів NomadNet, текстового месенджера та голосових викликів, MeshChat надає деякі інструменти адміністрування і візуалізації мережі Reticulum. Окрім перегляду ресурсів NomadNet, текстового месенджера та голосових викликів, MeshChat надає деякі інструменти адміністрування і візуалізації мережі Reticulum.
@ -172,7 +172,7 @@ enable_transport = true
target_host = 505:6847:c778:61a1:5c6d:e802:d291:8191 target_host = 505:6847:c778:61a1:5c6d:e802:d291:8191
target_port = 4242 target_port = 4242
``` ```
* ви можете додати будь які інші піри (https://github.com/markqvist/Reticulum/wiki/Community-Node-List) та інтерфейси (https://reticulum.network/manual/interfaces.html) з поміж доступних, в тому числі UDP або навіть I2P (зробити це можна також через Веб-адмінку MeshChat) * ви можете додати будь які інші піри (github.com/markqvist/Reticulum/wiki/Community-Node-List) та інтерфейси (reticulum.network/manual/interfaces.html) з поміж доступних, в тому числі UDP або навіть I2P (зробити це можна також через Веб-адмінку MeshChat)
Для доступу до сервера, в залежності від його типу, потрібно також відкрити відповідні порти (у прикладі це 4242) Для доступу до сервера, в залежності від його типу, потрібно також відкрити відповідні порти (у прикладі це 4242)

View file

@ -115,7 +115,7 @@ StandardError=file:///home/rssto/error.log
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
``` ```
* значення "User" і "Group" та шляхів у мене вказані як користувач створеного мною сервера [Nexy](https://github.com/YGGverse/nexy), але якщо він у вас окремим обліковим записом, то створіть його командою `useradd -m rssto` * значення "User" і "Group" та шляхів у мене вказані як користувач створеного мною сервера Nexy (github.com/YGGverse/nexy), але якщо він у вас окремим обліковим записом, то створіть його командою `useradd -m rssto`
* `sudo systemctl enable rssto` - додати до авто-запуску при старті системи * `sudo systemctl enable rssto` - додати до авто-запуску при старті системи
* `sudo systemctl start rssto` - запуск * `sudo systemctl start rssto` - запуск
* `sudo systemctl status rssto` - перевірка статусу * `sudo systemctl status rssto` - перевірка статусу

View file

@ -317,11 +317,13 @@ crates.io-index > _↑ |
* `http://[202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148]:8180` | http://ygg.ua.srv:8180 * `http://[202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148]:8180` | http://ygg.ua.srv:8180
* `http://[505:6847:c778:61a1:5c6d:e802:d291:8191]:8180` | http://myc.ua.srv:8180 * `http://[505:6847:c778:61a1:5c6d:e802:d291:8191]:8180` | http://myc.ua.srv:8180
Не офіційне дзеркало Kellnr в [Radicle](https://devzone.org.ua/post/radicle-detsentralizovanyy-p2p-khostynh-gitdvcs), знімок репозиторію на момент написання матеріалу: Не офіційне дзеркало Kellnr в Radicle:
``` ```
rad:z4VnEyS5YXnFpEgY1iheHneRPeSX6 rad:z4VnEyS5YXnFpEgY1iheHneRPeSX6
``` ```
* знімок репозиторію на момент написання матеріалу
=> radicle-is-decentralized-p2p-git-dvcs.gmi Radicle: децентралізований P2P хостинг Git/DVCS
### Дивіться також ### Дивіться також

View file

@ -28,7 +28,7 @@ cross build --release --target armv7-unknown-linux-gnueabihf
У більшості випадків, все має працювати так само як з cargo, але деякі користувачі мають кастомні рецепти, які я збиратиму нижче. У більшості випадків, все має працювати так само як з cargo, але деякі користувачі мають кастомні рецепти, які я збиратиму нижче.
### [mycelium](https://github.com/threefoldtech/mycelium) ### mycelium (github.com/threefoldtech/mycelium)
> Если бы было всё так просто. У меня еще надо: > Если бы было всё так просто. У меня еще надо:
``` bash ``` bash

View file

@ -67,7 +67,7 @@ vsftpd_log_file=/var/log/vsftpd.log
Тепер важливо відкрити потрібні порти. Так як я не використовую режим SSL, мені потрібно дозволити тільки порти 20, 21 і 10000-10100 (pasv_min_port і pasv_max_port відповідно). Тепер важливо відкрити потрібні порти. Так як я не використовую режим SSL, мені потрібно дозволити тільки порти 20, 21 і 10000-10100 (pasv_min_port і pasv_max_port відповідно).
На Fedora, я досі не навчився користуватись новомодним firewalld через командний рядок, тому зробив це через GUI Firewall / firewall-config (https://firewalld.org). Тут важливо додати ці правила до групи Permanent щоб вони не злетіли після ребуту. На Fedora, я досі не навчився користуватись новомодним firewalld через командний рядок, тому зробив це через GUI Firewall / firewall-config (firewalld.org). Тут важливо додати ці правила до групи Permanent щоб вони не злетіли після ребуту.
В Debian, для перманентної зміни iptables, я користуюсь ufw: В Debian, для перманентної зміни iptables, я користуюсь ufw:

View file

@ -4,7 +4,7 @@ I2P - це альтернативна мережа, характерною ри
Утім, для підключення до I2P глобально, часто використовується Інтернет. Особливістю цього гайду є спосіб підключення до мережі I2P без прямих звернень Інтернет, через додатковий шар Yggdrasil. Може бути корисним у випадках, якщо ваш провайдер блокує піринговий трафік. Утім, для підключення до I2P глобально, часто використовується Інтернет. Особливістю цього гайду є спосіб підключення до мережі I2P без прямих звернень Інтернет, через додатковий шар Yggdrasil. Може бути корисним у випадках, якщо ваш провайдер блокує піринговий трафік.
* В інших випадках, такий спосіб може бути менш "анонімним" через можливість генерації необмеженої кількості адрес Yggdrasil з підміною ними "незалежних" вузлів (https://uk.wikipedia.org/wiki/Атака_Сивілли) - таким чином, для себе важливо правильно обирати пріоритети налаштувань і розуміти мету, з якою використовується I2P. Адже якщо метою є саме анонімізація а не наприклад ретрансляція певного сервісу для користувачів з обмеженим доступом - то для таких цілей, на мою думку, краще використовувати звичайний Інтернет піринг або приватний ботнет. * В інших випадках, такий спосіб може бути менш "анонімним" через можливість генерації необмеженої кількості адрес Yggdrasil з підміною ними "незалежних" вузлів (uk.wikipedia.org/wiki/Атака_Сивілли) - таким чином, для себе важливо правильно обирати пріоритети налаштувань і розуміти мету, з якою використовується I2P. Адже якщо метою є саме анонімізація а не наприклад ретрансляція певного сервісу для користувачів з обмеженим доступом - то для таких цілей, на мою думку, краще використовувати звичайний Інтернет піринг або приватний ботнет.
Метою цього матеріалу не є детальний опис принципу роботи мережі I2P і анонімізація зокрема. Матеріал створено лише у якості нотатки, з досвіду публікації Веб-сайту для української спільноти адміністраторів альтернативних мереж на прохання деяких користувачів, для чого й був потрібен локальний роутер. Якщо вам не потрібно публікувати сайт чи анонімно користуватися мережею I2P, можна просто скористатися наявними вихідними SOCKS/HTTP проксі, в т.ч. для Yggdrasil. Метою цього матеріалу не є детальний опис принципу роботи мережі I2P і анонімізація зокрема. Матеріал створено лише у якості нотатки, з досвіду публікації Веб-сайту для української спільноти адміністраторів альтернативних мереж на прохання деяких користувачів, для чого й був потрібен локальний роутер. Якщо вам не потрібно публікувати сайт чи анонімно користуватися мережею I2P, можна просто скористатися наявними вихідними SOCKS/HTTP проксі, в т.ч. для Yggdrasil.
@ -54,7 +54,10 @@ useradd -m i2pd
nano /etc/i2pd.conf nano /etc/i2pd.conf
``` ```
Оригінальний файл конфігурації [доступний в репозиторії](https://github.com/PurpleI2P/i2pd/blob/openssl/contrib/i2pd.conf), нижче я наведу тільки змінені його опції, але буде правильним звірити їх актуальність на момент встановлення: Оригінальний файл конфігурації доступний в репозиторії:
=> https://github.com/PurpleI2P/i2pd/blob/openssl/contrib/i2pd.conf
Нижче я наведу тільки змінені його опції, але буде правильним звірити їх актуальність на момент встановлення:
``` /etc/i2pd.conf ``` /etc/i2pd.conf
# рівень деталізації журналів, я змінив щоб не засмічувати пам'ять # рівень деталізації журналів, я змінив щоб не засмічувати пам'ять
@ -157,7 +160,7 @@ WantedBy=multi-user.target
### Ініціальний запуск роутера ### Ініціальний запуск роутера
При першому запуску, ініціалізація мережі в мене відбувалась не одразу: системний сервіс вилітав з помилками підключення до вузлів. Наскільки я розумію, це пов'язано з відсутністю або малою кількістю ресідів Yggdrasil в мережі I2P. Якщо у вас вже є аналогічний вузол, що працює на такому (локальному) конфігі, можна спробувати імпортувати профіль мережі з нього або підняти звідти ресід: це робиться утилітою [pyseeder](https://github.com/PurpleI2P/pyseeder). Якщо ви знаєте адресу Yggdrasil вузла онлайн, то можете просто спробувати додати його в конфігурацію `reseed.yggurls` і перезапустити i2pd. При першому запуску, ініціалізація мережі в мене відбувалась не одразу: системний сервіс вилітав з помилками підключення до вузлів. Наскільки я розумію, це пов'язано з відсутністю або малою кількістю ресідів Yggdrasil в мережі I2P. Якщо у вас вже є аналогічний вузол, що працює на такому (локальному) конфігі, можна спробувати імпортувати профіль мережі з нього або підняти звідти ресід: це робиться утилітою pyseeder (github.com/PurpleI2P/pyseeder). Якщо ви знаєте адресу Yggdrasil вузла онлайн, то можете просто спробувати додати його в конфігурацію `reseed.yggurls` і перезапустити i2pd.
Якщо конекту досі немає, і ваш роутер по якимось причинам вже пускався в режимі Інтернет, варто (після зупинки сервіса i2pd) спробувати видалити теку: Якщо конекту досі немає, і ваш роутер по якимось причинам вже пускався в режимі Інтернет, варто (після зупинки сервіса i2pd) спробувати видалити теку:

View file

@ -6,7 +6,7 @@
## Icecast ## Icecast
Icecast (https://icecast.org) - це класичний сервер, на базі якого створюється публічний сервіс для слухачів (клієнтів). Його можна порівняти з проксі сервером Nginx для Веб-сайтів, от тільки створений він спеціально для операцій з потоковими даними. Цей сервер ніяк не взаємодіє з медіа-колекціями напряму, він просто отримує на себе сирий потік аудіо (або інших) даних з бекенду (по API) та розподіляє його на активні підключення, виступаючи в ролі хабу, своєрідної "радіо-вежі". Icecast (icecast.org) - це класичний сервер, на базі якого створюється публічний сервіс для слухачів (клієнтів). Його можна порівняти з проксі сервером Nginx для Веб-сайтів, от тільки створений він спеціально для операцій з потоковими даними. Цей сервер ніяк не взаємодіє з медіа-колекціями напряму, він просто отримує на себе сирий потік аудіо (або інших) даних з бекенду (по API) та розподіляє його на активні підключення, виступаючи в ролі хабу, своєрідної "радіо-вежі".
### Встановлення ### Встановлення
@ -177,7 +177,7 @@ server {
Коли "станцію" Icecast налаштовано, нам потрібно надіслати їй дані для трансляції. Такі дані можуть бути голосовими / потоковими або зберігатись у бінарних файлах. Оскільки мені потрібен останній варіант, з ним є одна не очевидна на перший погляд проблема: усі вони мають різні формати (`ogg`, `flac`, `mp3`, тощо) а також різні бітрейти та інші характеристики (в яких не торопаю). Оскільки вихідний стрім для слухача завжди має один формат, нам потрібно якимось чином відформатувати нашу колекцію до уніфікованого потоку: для цієї задачі й потрібен такий софт як Ezstream. Коли "станцію" Icecast налаштовано, нам потрібно надіслати їй дані для трансляції. Такі дані можуть бути голосовими / потоковими або зберігатись у бінарних файлах. Оскільки мені потрібен останній варіант, з ним є одна не очевидна на перший погляд проблема: усі вони мають різні формати (`ogg`, `flac`, `mp3`, тощо) а також різні бітрейти та інші характеристики (в яких не торопаю). Оскільки вихідний стрім для слухача завжди має один формат, нам потрібно якимось чином відформатувати нашу колекцію до уніфікованого потоку: для цієї задачі й потрібен такий софт як Ezstream.
На відміну від популярної комбінації Icecast2 + Ices2 (https://icecast.org/ices/), Ezstream (https://icecast.org/ezstream/) відрізняється тим, що підтримує більше медіа-форматів з коробки та є простішим в налаштуванні (для поточних завдань) На відміну від популярної комбінації Icecast2 + Ices2 (icecast.org/ices), Ezstream (icecast.org/ezstream) відрізняється тим, що підтримує більше медіа-форматів з коробки та є простішим в налаштуванні (для поточних завдань)
### Встановлення ### Встановлення

View file

@ -1,6 +1,6 @@
# Колізії SHA1 в BitTorrent v1 можуть використовуватися з метою відстеження # Колізії SHA1 в BitTorrent v1 можуть використовуватися з метою відстеження
Випадково натрапив на цікавий матеріал 2017 року, хоча він і не новий - технологія BitTorrent v1 є поширеною і можна сказати основою по цей день. Зокрема, такі "новітні" проєкти як rqbit (https://github.com/ikatson/rqbit/issues/70) і досі не мають підтримки v2 / sha256. Не зважаючи на наявність такої опції в libtrorrent / qBittorrent, сучасні торент-трекери вимагають створення роздач саме в v1 для "кращої сумісності". Випадково натрапив на цікавий матеріал 2017 року, хоча він і не новий - технологія BitTorrent v1 є поширеною і можна сказати основою по цей день. Зокрема, такі "новітні" проєкти як rqbit (github.com/ikatson/rqbit/issues/70) і досі не мають підтримки v2 / sha256. Не зважаючи на наявність такої опції в libtrorrent / qBittorrent, сучасні торент-трекери вимагають створення роздач саме в v1 для "кращої сумісності".
## Джерело ## Джерело

View file

@ -1,10 +1,10 @@
# twister - децентралізована платформа мікроблогів # twister - децентралізована платформа мікроблогів
twister (твістер, пишеться саме в нижньому регістрі) - це альтернативна пірингова платформа мікроблогів, створена на базі технологій BitTorrent і Bitcoin у 2013 році @miguelfreitas (https://github.com/miguelfreitas) як альтернатива колишньому централізованому сервісу twitter.com twister (твістер, пишеться саме в нижньому регістрі) - це альтернативна пірингова платформа мікроблогів, створена на базі технологій BitTorrent і Bitcoin у 2013 році @miguelfreitas (github.com/miguelfreitas) як альтернатива колишньому централізованому сервісу twitter.com
У 2020 році, розробник платформи припинив (http://twister.net.co/archives/617) її супровід, але оскільки мережа є децентралізованою, вона все ще продовжує функціонувати у своєму первинному стані, хоча кількість користувачів значно знизилась і наразі мережа близька до колапсу. У 2020 році, розробник платформи припинив (http://twister.net.co/archives/617) її супровід, але оскільки мережа є децентралізованою, вона все ще продовжує функціонувати у своєму первинному стані, хоча кількість користувачів значно знизилась і наразі мережа близька до колапсу.
Дана стаття носить історично-інформаційний характер, і створена більше для зацікавлених у децентралізованих мережах користувачів з базовим досвідом програмування мовою C++ та адміністрування Linux, а ніж рядових споживачів сучасного контенту. Також нижче я не описуватиму весь досвід, оскільки наразі працюю над книгою (https://twisterarmy.github.io/book/) у форматі документації mdBook (англійською мовою), яку планую також в релізі перекласти українською. Дана стаття носить історично-інформаційний характер, і створена більше для зацікавлених у децентралізованих мережах користувачів з базовим досвідом програмування мовою C++ та адміністрування Linux, а ніж рядових споживачів сучасного контенту. Також нижче я не описуватиму весь досвід, оскільки наразі працюю над книгою (twisterarmy.github.io/book/) у форматі документації mdBook (англійською мовою), яку планую також в релізі перекласти українською.
## Принцип роботи ## Принцип роботи
@ -32,7 +32,7 @@ twister (твістер, пишеться саме в нижньому регі
Для тих, хто хоче нативно зібрати повністю робоче ядро під свою систему, напишу коротеньку інструкцію для Linux (на базі матеріалу з книги), оскільки мережа все ще жива і можливо буде комусь цікавою у якості постійної іграшки. Для тих, хто хоче нативно зібрати повністю робоче ядро під свою систему, напишу коротеньку інструкцію для Linux (на базі матеріалу з книги), оскільки мережа все ще жива і можливо буде комусь цікавою у якості постійної іграшки.
Наразі є дві опції встановлення: офіційний twister-core (https://github.com/miguelfreitas/twister-core) та twister-core від спільноти (https://github.com/twisterarmy/twister-core). Різниця полягає лише в тому, що останній має додаткові DNS вузли для ініціалізації та підтримку IPv6, тобто є більш конективним. Замініть адресу репозиторію у прикладі нижче - вашим вибором! Наразі є дві опції встановлення: офіційний twister-core (github.com/miguelfreitas/twister-core) та twister-core від спільноти (github.com/twisterarmy/twister-core). Різниця полягає лише в тому, що останній має додаткові DNS вузли для ініціалізації та підтримку IPv6, тобто є більш конективним. Замініть адресу репозиторію у прикладі нижче - вашим вибором!
### Системні залежності ### Системні залежності

View file

@ -11,7 +11,7 @@
Отже, скачав я цей образ Debian і втупу додав його в свій призначений для мешів клієнт qBittorrent (бо бачив на βtracker були роздачі). Ну і що: а то що пішов конект на Інтернет IPv4 і я хз чи це дійсно Веб сід чи реально підсосався якийсь пір. Отже, скачав я цей образ Debian і втупу додав його в свій призначений для мешів клієнт qBittorrent (бо бачив на βtracker були роздачі). Ну і що: а то що пішов конект на Інтернет IPv4 і я хз чи це дійсно Веб сід чи реально підсосався якийсь пір.
Таке, депресія з приборканням норовливої BitTorrent. Я було думав писати свій клієнт на Rust, але ліба кандидат librqbit взагалі не заточена на параноїків і не вміє (https://github.com/ikatson/rqbit/issues/469) вимикати PEX. Я обходжу ситуацію через костиль блек-ліст: Таке, депресія з приборканням норовливої BitTorrent. Я було думав писати свій клієнт на Rust, але ліба кандидат librqbit взагалі не заточена на параноїків і не вміє (github.com/ikatson/rqbit/issues/469) вимикати PEX. Я обходжу ситуацію через костиль блек-ліст:
=> bittorrent-blocklist-examples-for-ipv6-range.gmi Блокування вихідних з'єднань BitTorrent по діапазону IPv6 => bittorrent-blocklist-examples-for-ipv6-range.gmi Блокування вихідних з'єднань BitTorrent по діапазону IPv6
## Посилання ## Посилання

View file

@ -48,7 +48,7 @@ yggmail -help
Запуск відбувається однойменною командою, утім декілька слів про режими підключень: Запуск відбувається однойменною командою, утім декілька слів про режими підключень:
* Мультикаст * Мультикаст
* Підключення через певний публічний пір (https://publicpeers.neilalexander.dev) * Підключення через певний публічний пір (publicpeers.neilalexander.dev)
* Обидва варіанти * Обидва варіанти
Відповідно: Відповідно:

View file

@ -195,7 +195,7 @@ http 127.0.0.1 8118
### Halloy ### Halloy
> Halloy (https://halloy.chat) - відносно сучасний клієнт IRC, написаний мовою Rust. Наразі користуюсь саме ним, через особисту цікавість до фреймворку Iced, хоча назвати його супер-зручним та функціональним теж не можу: на момент написання матеріалу він не підтримує проксування на окремі сервери а також має трохи загальмований інтерфейс без контекстних меню та інших підручних наворотів. > Halloy (halloy.chat) - відносно сучасний клієнт IRC, написаний мовою Rust. Наразі користуюсь саме ним, через особисту цікавість до фреймворку Iced, хоча назвати його супер-зручним та функціональним теж не можу: на момент написання матеріалу він не підтримує проксування на окремі сервери а також має трохи загальмований інтерфейс без контекстних меню та інших підручних наворотів.
Приклад підключення Halloy до ZNC наведено в офіційній документації: Приклад підключення Halloy до ZNC наведено в офіційній документації: