Стендап Сьогодні

Що я зробив, що я хочу зробити, і що це все значить.
Повсякденні здобутки в форматі стендапу.
Детальніше в статті

Підписатись на RSS
📢 Канал в Telegram @stendap_sogodni
🦣 @stendap_sogodni@shevtsov.me в Федиверсі

25.03.2025

Підтримка relref для Mastodon

Приблизно два роки в мене в ПЗ для каналу є спосіб вказати посилання так, щоб на сайті воно вело на сайт, а в каналі Telegram - на пост в каналі. Сьогодні доробив цей функціонал й для публікації в Mastodon.

До речі. Mastodon досі не вміє публікувати Markdown. Тому технічно, наразі я підтримую не Mastodon, а GoToSocial, та, здається, ще Akkoma. Але — я використовую API Mastodon, звідси й назва.

Тут цікавого те, що вихідний текст поста в мене в Markdown. Та на виході теж отримую Markdown. Тому, певно, можна було б підставити посилання магією регулярних виразів, але навіщо, коли в мене є готове рішення для синтаксичного дерева Markdown? Залишилось тільки з нього побудувати назад Markdown - для того в Goldmark є спеціальний рендерер — та справа зроблена.

Мені такий підхід згодиться й в майбутньому, бо він допоможе позбавитись від тих конструкцій, які підтримуються неповноцінно.


24.03.2025

Чому спамери краще вміють в SMTP?

Я тут багато писав про особливості SMTP (бо саме з ним пощастило працювати останніми роками на Mailtrap.) Натрапив тут на пост, де згадувалося, що спамери краще виконують (так, виконують, а не обходять) механізми захисту SMTP, ніж легітимні відправники. Хотілося прокоментувати.

Проблема тих механізмів (DKIM, SPF, DMARC) в тому, що вони складні чисто технічно. А подолати технічні складності набагато легше, коли це твоя головна робота. Фактично, кожний новий механізм тільки покращує позиції спамерів та погіршує — пересічних відправників.

Всі поточні механізми захисту привʼязані до домену відправника. Та оскільки спамери вільні реєструвати безліч нових доменів, немає ефективного способу позначити когось як спамера. В цілому, також немає способу позначити себе як “не спамера” (бо таким способом відразу ж скористались би спамери.)

Отже, можна сказати, що SMTP приречений на спам. Причому це значно більша проблема для відправників. Бо через підозри на спам можуть не дійти абсолютно непорочні листи — як-от відновлення пароля. Бо в ньому була картинка велика, а ще було посилання на домен підтримки, який схожий на ваш, але не зовсім (прямо як з фішингом). Тож спамфільтр вирішив, що лист підозрілий — та до побачення.


23.03.2025

Редагування статусів у Mastodon та інше

Інкрементальні покращення для OmniWope:

Вчора помітив несподівану та неприємну особливість: якщо додати вихід (як я Mastodon), коли інший вже був живий (як в мене Telegram), то редагування старих постів викидують їх у новий вихід. Впровадив можливість вказати start_date для виходу, щоб цього обминути. Допоможе це й тим, в кого вже був блог та публікація вестиметься не з першого поста.

Тут треба розповісти, як я відстежую, що публікувати. Я зберігаю для кожного поста контрольну суму його вхідного змісту. Коли вона змінюється, пост надходить на публікацію до кожного виходу. Вихід будує вихідний зміст та обчислює другу контрольну суму, яка теж зберігається, для кожного виходу окремо. Та якщо вже вона зміниться, то тоді вже пост йде на зовнішній сервіс.

Пощастило, що поки я збирався публікувати в Федиверс, в GoToSocial - мого сервера — зʼявилася можливість редагування. Тож сьогодні додав потрібний виклик та все запрацювало. Цікаво, що в ActivityPub редагування статусів є федерованою операцією, тобто не можна бути впевненим, що воно доїде до кожного отримувача.

Також зробив свій перший PR до GoToSocial, який, звісно, міняє два рядки в документації, але досить важливих. Бо я спочатку сам не міг зрозуміти, як воно працює. Втім, переміг здоровий глузд та експериментація.


22.03.2025

Стендап Сьогодні — тепер і в Федиверсі

Нарешті я на це наважився та публікую цей пост на @stendap_sogodni@shevtsov.me. Перфекціонізм мене тут зупиняв вже надто довго, треба з чогось почати. Запрошую підписатися!

Також із сьогодні OmniWOPE хоч трохи виправдовує префікс “омні” та вміє публікувати в Мастодон. Нагадаю, що публікація ведеться паралельно у всі налаштовані канали.

До речі, вирішив, що федиверсізація блогу (додавання ActivityPub прямо для його сторінок) - це проєкт, хоч безумовно цікавий, але завеликий, а також надто спеціалізований. Та я опинюся з тією ж проблемою невірного відображення HTML різними клієнтами. Тому все ж вважаю доцільною ретрансляцію змісту в Федиверс через проміжний сервер.

З проблемами HTML я поки нічого не робив, оскільки… треба з чогось почати. Поки зрозумів, що процес такий: мій сервер робить з Markdown HTML, а потім цей HTML вже обрізається клієнтами. Тож мені доведеться підбирати такий Markdown, який буде перетворений у прийнятний HTML. Тобто це ще окрема непроста задача.


21.03.2025

Музика для роботи

🎧 Давайте таку пʼятничну тему: що слухати під час роботи? В тиші сидіти гарно, коли настрій закопатися у роботу. Але для не таких гіперцікавих справ доводиться щось увімкнути.

Я для себе чітко розумію, що це повинна бути музика. Багато часу працював із відео чи серіалами на фоні, та вони створюють гірший, розсіяний стан. Можливо, через те, що на відео завжди можна відвернутися, навіть коли воно не дуже цікаве. А музика створює глибші стани.

Також мені не можна ставити музику, якою можна зацікавитись, бо невдовзі полізу роздивлятися альбоми, а далі вже Вікіпедію читати. Краще якесь радіо або довгий плейлист з фоновою музикою.

♥️ jungletrain.net - це мій поточний фаворит. Музика 24/7 без передач та реклами. Джангл для мене як раз ідеальний баланс між фоновим та цікавим, та — що важливо — стабільний правильний BPM.

@ThePrimeThanatos на YouTube - тут 24/7 синтвейв. Я взагалі люблю синт-всяке, але це трохи не мій робочий темп.

Ще багато плейлистів в Apple Music є хороших. Jazz Soul Cafe та [Piano Bar](http s://music.apple.com/ua/playlist/piano-bar/pl.fc0d9d21c13c46149110dfd8dd844896) часто вмикаю.

🎶 А ви що слухаєте за роботою?


20.03.2025

Федиверс та децентралізовані соціальні мережі

А давайте ще далі відсунемося та подивимось на весь обрій децентралізації. Звісно, хто був в інтернеті до середини 2000-х, знає, що колись ніякої централізації не було — головним місцем спілкування були форуми, яких було безліч. На кожному форумі користувачі були свої, тобто мої обліковки на студентському форумі, форумі улюбленої групи, та форумі по розробці ігор були ніяк не повʼязані. Та наче це було навіть фічею, а не багом, та переважна більшість учасників не оголошувала свою особу.

Втім, коли зʼявилися соціальні мережі, то всі дуже швидко втекли туди. Для мене це досі незрозуміле явище. Раптом всім стало цікаво мати свою сторінку, список своїх друзів (а за разом колег, а пізніше — ще й батьків), та все інше спілкування робити в цьому контексті. Можу тільки зробити висновок, що такий режим спілкування переміг, а значить, для змагання з олігополією сучасного інтернету всякий соціальний сервіс повинен бути частиною єдиного великого Федиверсу. Федиверс — це мережа маленьких спільнот, які вільні спілкуватися між собою.

Головним недоліком Федиверсу є його неоднорідність. Серверів та клієнтських застосунків багато, а сумісність визначена на дуже базовому рівні. Тут майже за означенням не може бути такого цілісного досвіду, як у звичайній соціальній мережі. Я впевнений, що це відштовхне всякого не досвідченого технічно користувача. Але в цьому точно є деякий шарм, бо Федиверс залишається “старим” інтернетом, інтернетом для ентузіастів.

Головною перевагою Федиверсу є воля. Тут немає “алгоритмів”. Хоча може на якомусь сервісі є, але ми самі повинні його обрати. Так само модерація є локальним явищем. “Алгоритми” та модерація корисні речі, але не тоді, коли ними керує велетенська безконтрольна корпорація. Тому, я гадаю, Федиверс, з локальними спільнотами, звичаями та законами, ближче до “мрії Інтернету”, ніж то темне місце, в якому ми зараз опинились.

Чи є майбутнє, де Федиверс стане вибором більшості інтернету? Я можу собі це уявити; адже всі ми їздимо на автомобілях різних марок по дорогах різних країн та дістаємось куди треба. Але спочатку щось повинно статись з централізованими мережами.


19.03.2025

ActivityPub

Сьогодні роздивлявся більш уважно протокол ActivityPub, бо є така гадка, що публікувати пости у Mastodon це взагалі зайвий крок. Наприклад, осьо непоганий посібник, як додати ActivityPub навіть до статичного сайту. Але спочатку, що це взагалі значить?

ActivityPub пропонується як “протокол для децентралізованої соціальної мережі”. Якщо HTTP є суто “реактивним” протоколом, ActivityPub формалізує довгострокову підписку на ресурс — тобто він буде проактивно надсилати свої оновлення.

Власне, ActivityPub має більше спільного з SMTP, ніж з RSS. Хоча й побудований на HTTP, а також на JSON-LD (JSON, доповнений схемою). Але доставлення подій тут відбувається за методом Push, а не Pull. Тобто коли ресурс (“актор” на мові ActivityPub) публікує новий пост, то він розсилається всім підписникам — так само як і поштова розсилка. Різниця хіба в тому, що ActivityPub працює симетрично — в кожного актора є вхідна та вихідна скриня.

(Друге, що треба знати, це одиницею інформації в ActivityPub є подія. За природою це Event-Sourced протокол: поточний стан формується як накопичення змін-подій. Створення поста — подія, редагування та видалення — теж, як і поширення та вподобайка.)

Отже, якщо реалізувати на сайті вхідну та вихідну скриню, а також зберігати список підписників, то можна цілком стати частиною мережі ActivityPub, тобто Федиверсу. Набирати підписників, розсилати пости, отримувати коментарі — все це через дві скрині.

Втім головною перепоною для мене є неоднорідність клієнтів. Як показує вчорашній пост, тут все значно гірше, ніж у поштових клієнтах чи читачах RSS. Можна розраховувати тільки на самий базовий HTML. Або… публікувати тільки посилання на сайт. Щось таке. 🤔


18.03.2025

OmniWOPE + Mastodon

Спочатку гарні новини: OmniWOPE вже опублікований! Якщо вам раптом потрібно публікувати блог у канал Telegram, то це вже можна зробити. А далі будемо працювати.

Як тільки я розвʼязав проблеми з телеграмом та перейшов на використання OmniWOPE для цього каналу, наступним чином захотів додати публікацію в Mastodon, про яку так давно думав. Власне, сама публікація — справа нескладна, бо вже є каркас, в який можна додавати більше виходів. (Чого і вам пропоную спробувати, якщо є охота.)

Але ж проблеми зʼявляються із відображенням постів. Якщо брати сам Mastodon, то там все дуже просто, бо він підтримує тільки текстовий зміст. Просто, бо багато не зробиш. Але той сервер що в мене — GoToSocial — хоч і сумісний з Mastodon, але дозволяє публікувати й у Markdown. Та якщо подивитися (зверху) на пост в самому GoToSocial, то наче все більш-менш правильно виглядає.

Проте головна відмінність федиверсу від того ж Telegram - це нескінченне різноманіття клієнтів. Та ще й серверів. Але як я розумію, задача відображення статусу перекладається саме на клієнта — сервер тільки поширює зміст.

Та якщо подивитися на популярні клієнти, то там той самий пост виглядає від недооформленого до повністю понівеченого. Тобто “просто публікувати Markdown” не вийде. Доведеться конвертувати його в такий обрізаний вигляд, який приймуть клієнти. Тобто приблизно так само, як було й з Telegram, але ще й із ретельною перевіркою у різних клієнтах.


17.03.2025

OmniWope - перший пост!

🤞 Нарешті розвʼязав розбіжності в рендерингу постів, про які писав минулого разу. Тож цей пост буду публікувати через OmniWope, а якщо все буде гарно — то наступного дня й сам проєкт OmniWope теж. (Нагадаю, що OmniWope - то мій проєкт для публікації змісту блогу на всілякі платформи.)

Минулого разу також писав про труднощі в оцінюванні часу. Знаєте, тут помилятися можна в обидва боки. Того разу — недооцінив, зате потім переоцінив оті розбіжності та місяць з гаком відкладав. Коли нарешті взяв себе в руки, виправив за 20 хвилин.

Для того потрібно було: зробити так, щоб старий та новий скрипти писали у файли зміст всіх постів. Та порівняти в редакторі ті пости, де є розбіжності. Все! Виявилося, що Hugo автоматично робить першу літеру тегу великою, а значить, в новому скрипті деякі теги змінилися — бо він не вичитує файли самотужки, а бере експорт з Hugo.

Далі знайшов обговорення цього на GitHub, поміняв як там написано та — все! Розбіжності зникли.

Сподіваюся, з публікацією буде все гарно, а там вже й за Mastodon можна взятись (невже майже цілий рік минув?)


16.03.2025

Avowed - гра про білди та дослідження

Avowed - нова фентезійна РПГ від першої особи від Obsidian Entertainment. В таке мені точно хотілося грати. Виявилося трохи зовсім не те що уявляв, але сподобалося.

Avowed - це екшн-РПГ. Головним чином складається з двох занять: дослідження світу та боїв. Тут немає ніякої симуляції світу, це не Skyrim, не KCD та навіть не Cyberpunk 2077. Просто гра не про це.

Система боїв дуже круто зроблена, навіть не знаю, де краще. Багато різновидів зброї, багато навичок, багато ефектів. Ухиляння та парирування. Посилені та критичні удари. Між всім цим гарна взаємозамінність. Наприклад, можна мати “магічну” навичку “підсилення ефекту холоду”, а холод наносити мечем чи рушницю, та ще й доганяти закляттям.

Моя улюблена особливість — що тут завжди можна скинути призначення навичок та атрибутів, за мізерну ціну. Бо навіть на максимальному рівні одночасно можна відкрити хіба що третину всіх навичок. Тобто можна експериментувати вдосталь, та й зовсім змінювати свій стиль гри.

Бої всі групові, хаотичні, та тактично глибокі. В супротивника є стрілки десь нагорі, воїни з щитами спереду, жерці, що лікують, маги, що призивають… Це набагато ближче до Doom Eternal, ніж до Skyrim. Екшн-РПГ, розумієте?

Та друге приємне заняття — дослідження світу. Гра складається з декількох великих та відкритих (та красивих!) зон. Маркери на мапі ставляться тільки на головні завдання. Решту доведеться шукати вручну. Причому на карті є чимало вертикальної навігації — скелі всякі, печери. Та ще й головоломки. А там — секрети, сценки, персонажі, квести… Avowed на рідкість не переймається тим, що ти не побачиш всього цього.