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

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

Підписатись на RSS · 📢 Канал в Telegram @stendap_sogodni

10.03.2025

"На гачку" - посібник свідомого розробника

На роботі спитали — яка книга зробила вплив на моє уявлення про свою професію? Мені відразу згадалася книга “На гачку” Ніра Еяля. Хоч вона й не про програмування, але знаєте… програмування не є самоціллю, воно завжди виконує якусь потребу.

Книжка вже не нова — вийшла у 2013, до Тіктоку та перетворення соціальних мереж на політичну зброю. Але тому уроки з неї стали тільки актуальнішими.

В чому суть: люди схильні до залежностей. Коли щось має на нас вплив та “натискає на вірні кнопки”, ми хочемо більше, попри ризики та недоліки. Це може бути алкоголь, азартні ігри, шоколад, любов… Але тепер зʼявилася нова залежність: програмні продукти.

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

“На гачку” окреслює механізм формування звички: зачіпка, дія, нагорода, внесок. Вона досліджує реальні приклади: соціальні мережі, ігри та звичайні продукти.

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

“На гачку” навіть є в перекладі українською. Звісно, вже вийшла з друку, але на OLX можна знайти.


09.03.2025

Miniflux та його API

Я вже писав про Miniflux. Це чудовий агрегатор та читач RSS, та ще й написаний на Go, та ще й з перекладом українською!

Проте я ще не згадував про те, що в Miniflux є купа різних API - а значить, можливість автоматизувати рутинні задачі. Та оскільки це твій власний сервер. ніяких обмежень на використання цього APi немає.

Вчора довелося про це згадати, коли я імпортував OPML з оригінального скрипту та побачив оті стрічки з YouTube без назв. Одна справа — згенерувати кращий OPML, але інша — що робити з невдалими стрічками? Видаляти вручну сотні стрічок мені не хотілося, звісно. На це в нас є API.

Мені понад усе подобається офіційний клієнт на Go. Якось з ним все… по-домашньому. Хоча отут згадують й клієнта для Python, й навіть маніпулювання через консоль браузера. Одним словом, ось мій скрипт для видалення всіх стрічок в категорії.

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


08.03.2025

Підписки з YouTube - до RSS

📺 Я якщо що великий прихильник не тільки RSS, а ще й читати їх раз на тиждень, щоб не витрачати час на вхідні потоки. От як раз нещодавно я повернувся на цей графік, бо він має схильність зʼїжджати: спочатку наздоганяєш щось що не встиг, а далі не встигнеш озирнутись, як заглядаєш в читач кожні 15 хвилин.

В цій схемі з RSS була одна діра: YouTube. Ніколи не міг знайти зручного способу передивлятися підписки. (Зручний — це коли я знаю, які нові відео зʼявилися, та можу їх відмітити як прочитані, щоб більше не бачити.)

В YouTube є RSS для кожного каналу, на щастя. Але немає RSS для всіх моїх підписок. Щоб не переносити вручну, знайшов оце скрипт, який генерує зі сторінки каналів файл OPML. Все б гарно, але в тому OPML є тільки адреси RSS, а назв не було.

Почав доробляти… та роздивився, що скрипт генерує з даних JSON, а потім парсить його регулярними виразами. Такого я ще не бачив! При тому, що дані для сторінки сидять в глобальній змінній (теж велика вдача.) Єдине, що там в змінній наче дані вже підготовані для компонент, тому знайти в структурі потрібні дані дійсно непросто, а скрипт з жорстко заданими шляхами буде надто крихким.

Отже, переробив скрипт. Мій варіант ходить по структурі даних та шукає обʼєкти, схожі на канали. Це працює, а головне — з обʼєкта каналу вже нескладно дістати його імʼя та адресу. А генерацію OPML залишив так саме як і було — через додавання рядків.

Ще мені в цьому скрипті сподобалося автоматичне направлення файлу на завантаження. В моїх попередніх рішеннях я просто виводив зміст в консоль для копіювання вручну, а тут значно зручніше.

Осьо мій скрипт. До речі, раніше я викладав схожі скрипти на GitHub Gist, але цього разу думаю — а чому не можу просто до себе на сайт? Тільки голий .js на сайті не дуже зручно, а от як стаття разом зі стислою документацією — чудово.


07.03.2025

Ризики кореневих сертифікатів

Що найгірше може статися, якщо хтось підсуне вам власний кореневий сертифікат? Все залежить від того, хто саме.

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

Але, власне, уособлювати цікаво тільки важливі сайти (наприклад, банк чи пошту). А для того мало сертифікату — потрібно ще й направити користувача на свій сервер. Цього можна досягнути двома шляхами: або якщо підмінити DNS, або за наявності проксі-сервера чи VPN. Ну, є ще й третій шлях: бути частиною інтернет-інфраструктури. Тому головне, щоб сертифікати не встановлював провайдер.

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

Це поширена практика для внутрішніх ресурсів, не доступних для публіки, бо для них технічно неможливо отримати підписаний сертифікат, але мати TLS все ж хочеться.


06.03.2025

Як це мене вкусить в майбутньому?

Саме це питання я задаю собі найчастіше під час планування рішень, написання та перегляду коду. Красота, стиль, структура — це все гарно. Але… яким боком воно вилізе потім?

Чи вносимо ми зміни в дані, які потім буде важко відкотити чи доведеться підтримувати вічно? Чи додаємо побічний ефект там, де його не передбачували? Чи використовуємо сумнівні обходи? Або просто незрозуміле імʼя? Чи не вистачає коментарів?

99% написання коду — це його дописування. Тому що б не писав, доведеться мати з ним справу пізніше. В таких обставинах мушу ставитись до коду як до ризику.

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

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


05.03.2025

Столи для роботи стоячи

🦩 Хто що знає про столи, доступні в Україні? Бо що я головне зрозумів про ті столи, так це те, що треба бути впевненому в механізмі, а це можна або після випробування власноруч, або з надійної рекомендації. Поки з того, що я IKEA IDÅSEN - не ідеальний вибір, але такий, що рекомендують. Та відносно доступний.

Також те, що деякі зі столів хитаються, інші — повільно підіймаються, треті — не мають зупинки в разі перешкоди. Ну й також те, що більшість моделей, про які говорять, продають в США, а про європейські мало що бачу. (Радий буду, якщо ви мене виправите.)

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

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

До речі, в мене під столом висить ще й док-станція, і подовжувач на багато розеток, й декілька блоків живлення. На все це хазяйство треба багато місця, зате не на столі. А ще гачки для навушників та для рюкзака. А ще хотілося б й ноутбук вішати, бо я працюю з монітором. Ото якщо замовляти стільницю, можна було б зробити отвір саме під розмір ноутбука, буде красиво.


04.03.2025

GTD як засіб від тривоги

Сьогодні шукав відповіді на те, коли ж все ж таки робити ті наступні дії, які назбиралися по GTD. Бо якщо не придивлятися, весь день без того чимсь зайнятий. Знайшов на реддіті відповідь, яка змусила замислитись.

Метою GTD є розум, спокійний, як вода: такий, що робить саме те, що потрібно, та не марнує зусилля на аби що. (Якщо замислитись, це дуже буддистська філософія.) Так от ця відповідь давала пораду від зворотного: там, де розум тривожний, і потрібно прикладати GTD.

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

От в мене є таке, що коли раптово та терміново просять щось зробити, то стає тривожно… не від того, що я вже зайнятий, а від того, що я не знаю, чи буду зайнятий. Оце для мене саме та тривога, з якою можна боротися за допомогою GTD.


03.03.2025

Звідки беруться кореневі сертифікати TLS?

🔐 Я в цьому каналі багато писав про безпеку, та конкретно в цьому пості — про ланцюг довіри. Але за що той ланцюг закріплений? Це фундаментальне питання безпеки. Якорем ланцюга є корінь авторитету — набір сертифікатів, якому ми довіряємо як аксіомі.

З одного боку, вкрай необхідно, щоб в наш корінь авторитету не потрапили зловмисні сертифікати. Причому на них не буде написано, що вони зловмисницькі! За означенням в нас немає можливості перевірити, чи є кореневий сертифікат “чесним” - тому вони повинні братися з надійного джерела.

З іншого, у світі кілька десятків агенцій, яким довірено видавати сертифікати, а також їхні кореневі сертифікати час від часу оновлюються. Отже, важливо, щоб корінь авторитету був повним та свіжим, інакше ми не будемо довіряти новим сертифікатам — це дуже реальна проблема старих систем.

Але не таких вже й старих! От я дізнався, що в стабільному Debian Bookworm корінь, який міститься в пакеті ca-certificates, від березня 2023!

В мене відразу зʼявилося питання — як же ж з ним люди в інтернет ходять? Виявилося, що як Chrome, так і Firefox використовують власні корені авторитету, а не системні. Тому проблеми через системні сертифікати відразу меншають — а для простих користувачів, певно, взагалі зникають.

Якщо копнути далі, то існує проєкт CCADB, в якому головні інтернет-оператори тримають каталог кореневих сертифікатів відповідно до суворих (та головне, задокументованих) вимог. Сертифікати цього проєкту можна завантажити та використати замість застарілих. Звісно, стає питання довіри, але якщо ще копнути, то той же ж пакет ca-certificates бере дані саме з бази Mozilla, так що на чомусь ця глобальна порука повинна замикатися.


02.03.2025

Затримка оновлення в OpenSearch

В OpenSearch/ElasticSearch є така цікава особливість, що між внесенням змін та їхнім ефектом минає кілька секунд. Тобто буквально доведеться почекати, щоб побачити, що щось змінилось.

Причиною є те, що OpenSearch видає результати тільки через словники (“індекси” мовою інших баз), а оновлення словника відбувається періодично — як мінімум, щосекундно. Бо оновлення є дорогою операцією та краще, коли воно працює з цілою пачкою змін.

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

З досвідом традиційних СУБД це є повною нісенітницею. Проте типові використання OpenSearch - наприклад, аналіз журналів — не потребують моментального застосування змін. Будь-яка архітектура з OpenSearch всередині повинна розділяти запис та читання та передбачати ці затримки. Тому на роль головної бази - OLTP - вона фізично не підходить.


01.03.2025

Зволожувачі

Щоб закінчити вчорашню тему, дозвольте звільнити голову від знань про зволожувачі. На жаль, ідеального зволожувача немає, одні компроміси.

🔉 Ультразвукові зволожувачі розпилюють воду вібраціями. Перевагою тут є велика різноманітність форм. Недоліком цього методу є те, що вібрації розпилюють не тільки воду, а й все, що в ній знаходиться. А у воді, якщо вона не дистильована, містяться розчинені солі — тобто фактично пил. Тому ультразвуковий зволожувач підвищує PM2.5, як я сам бачив, та може навіть залишати наліт на меблях. Теоретично можна заправляти його тільки дистильованою водою, але це суттєво ускладнює використання (та тому я навіть не перевіряв такого варіанту.) До речі, ультразвуковий зволожувач взагалі не зволожує повітря, а створює водяні краплі, які швидко випаровуються. Частина цих крапель може осідати поруч — особливо, коли вологість вже висока.

🫖 Зволожувач гарячою парою це, буквально, кипʼятильник у зручному корпусі. Єдина форма зволожувача, яка не потребує змінних елементів — тільки очищення від накипу. (Накип — це ті самі солі.) Але є пара суттєвих недоліків. По-перше, він споживатиме багато енергії: 200-300 Вт. І це пристрій, увімкнений постійно. По-друге, кипʼятильник буде випаровувати навіть при підвищеній вологості, що ризиковано — надмірна вологість ще гірша для оселі, ніж сухість.

💨 Зволожувач холодною парою складається з вентилятора та величезного паперового фільтра, а точніша — гніта. Гніт одним боком стоїть в посудині з водою та капілярним ефектом тягне її вгору. Вентилятор сприяє випаровуванню, тобто “сушить” гніт та зволожує повітря. Тут і енергії витрачається менше (10 Вт), і випаровування фізично уповільнюється, коли повітря вже вологе. Солі залишаються на папері. Недолік — мокрий папір згодом плодить бактерії та грибки, тож фільтр доведеться міняти. Ба більше, такий зволожувач не можна залишати мокрим та вмикати час від часу — стояча вода зацвіте ще швидше.

🪢 Кліматичні станції це така нова модна категорія, де зволожувач холодною парою поєднаний з очищувачем (тобто фільтром повітря) - логічно, оскільки обидва прилади є накрученими вентиляторами. Мені тільки не зрозуміло, що робити з такою станцією, коли зволоження не потрібне.

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

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