Bite the Byte
2.94K subscribers
24 photos
2 videos
266 links
Соловйов здорової людини!

🌐solovyov.net

Архів каналу: solovyov.net/channel

Без реклами
Download Telegram
Люди антикрихкі

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

Якщо задуматися, це дуже логічно: треба навантажувати м‘язи, щоб вони не атрофувалися, треба навантажувати мізки, і треба навантажувати силу волі.

Що дивно — м‘язи це загальновідома історія, мізки так собі, десь на рівні «після 60 хоча б треба кросворди розгадувати», а все інше взагалі вважається іншим.

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

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

А з енергією є цікаве підтвердження у думці, що «найкращий відпочинок — зміна заняття». Бо тупити в екран і нічого не робити не призводить до бажання щось різко почати робити через тиждень. І навпаки, коли напружено працюєш, то через кілька днів відпочинку в отпуску вилазить бажання кудись бігти.
💯37🔥11😁2🤯2
Програмісти — дуже поверхневі. Як і всі нші люди, але то окрема проблема. 😁 Підтвердження тому — те, що ми працюємо в індустрії моди, та кількість коментарів про дужки під кожною згадкою Кложі. Здавалося б, у Кложі є дійсно важкуваті для пересічного сторони, але ні, нумо нити за те, що одразу впадає в око. :)

Системне рішення наразі бачиться тільки одне — фізичне насилля. 🤣 Тобто якимось чином широкому загалу пояснити різницю між «просто» та «легко» (див. Річа Хікі про Simple Made Easy).

Але доки всі цього не усвідомили — а нові програмісти з‘являються швидше, ніж старі розвиваються — треба з цим працювати. 😁 Це значить, що форма — дуже важлива (дивись ліспові дужки знов).

Ця думка не була мені очевидною років 15-20 тому, «бо важливіше сенс», і взагалі я сприймав прислів‘я «зустрічають по одягу» як критику суспільства. Але це не критика, це констатація факту, що на твою складну і глибоку натуру звернуть увагу тільки тоді, коли ти будеш нормально виглядати.

Тому оформлення коду — абсолютно критичне.

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

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

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

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

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

Тому не соромтеся прибиратися.
💯35🔥6🤯3
Стежите за історією із SVB (Silicon Valley Bank)? Це найбільший банк у Кремнієвій Долині, який обслуговує більшість стартапів. Тримати гроші в JP Morgan чи ще десь вважалося западлом, модні стартапи такою лажою не займалися. Деякі інвестфонди деякі вимагали в тебе мати рахунок в цьому банку, щоби дати грошей.

При тому він обслуговував і стартапи, і їх фаундерів — візьми іпотеку під оцінку свого стартапу, таке все: ну повний цикл всього. Ну і в співробітників, очевидно, дуже часто рахунок в ньому.

А вчора (в п’ятницю) туди ввели тимчасову адміністрацію і заборонили всі виплати. Доволі раптово і неочікувано, судячи по реакції всіх. :)

Історія така: за 20 і 21 рік депозити банку виросли з 62 до 190 млрд, і в банка виникла дуже неочевидна (для мене) проблема: як заробляти на такій сумі. Тобто їх стандартні методи залучення боржників не встигали за ростом депозитів, і вони лишалися з купою кешу, який не заробляв грошей — а відсотки по депозитам платити треба ж (ну і взагалі заробляти теж треба).

Це, як то кажуть, хороша проблема, щоб її мати — і банк вирішив то покупкою іпотечних контрактів. Якщо я наколупав правди, то середня доходність цих контрактів — 1.56%. Але ж FRS у 22 році підняв базовку ставку (і продовжив піднімати у 23) аж до 4.5%!

Тобто тепер можна було купити державні облігації США з доходністю вище майже в 3 рази! Авжеж, ціна на іпотечні контракти поїхала вниз, бо кому вони тепер треба. 😁 Це б не було проблемою, якби ніхто не забирав депозити — все одно іпотеки заплатили більше б грошей, ніж коштували, і все б зійшлося.

Але десь щось пішло не так, і в четвер банк оголосив, що продав своїх активів на 21 млрд $ із втратою 1.8 млрд, й о залученні додаткових 2.25 млрд боргів. Плюс пишуть, що ще 91 млрд по факту зараз коштує 79 млрд. Тобто дірка у 14-16 млрд? Схоже, ця новина і підштовхнула регулятора ввести тимчасову адміністрацію.

Вихлоп з того дуже неприємний: купа компаній із грошима в банку не може платити зарплати, бо всі виплати заморожені. Обіцяють до 250к розблокувати в понеділок, але це ж копійки для роздутих штатів долини. 😟

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

А ще компанія, яка забезпечує стейблкойн USDC (Circle) частину своїх грошей зберігала також там (3.3 з 40 млрд), і це сприяє конверсії usdc в анстейблкойн. 😁 Ми живемо у екстра-цікавий час, нажаль, але з приємного — може доведеться понаблюдати, як крешиться крипта. :)

Але як це буде розвиватися — важко вгадати. Здається схожим на повторення 2007-8 року? Масові скорочення наступного тижня? Хз. Здається, що вільних грошей на ринку стане ще менше.
🤯35🔥177😁5💯1
Більшу частину вчорашнього дня втратив на те, щоб виловити баг у своєму коді на фронті — в інтернеті купа обговорень схожих кейсів і всі рішають якимись дуже складними конструкціями. Врешті мені в діскорді відповів один з авторів бібліотеки — виявилося, що в мене екстратупий баг на бекенді.

Сенс в тому, що я скопіював приклад на Sqlite, який робив щось типу let row = db.get(q), і переробив на постгрес, отримавши let row = db.query(q). Чуєте, звідки вітер дує? db.query повертає не row, а якийсь результат, де треба брати result.rows[0]. Ну авжеж JS не пікнув, а TS я там не сетапив, бо і ліньки, і не хочеться, і шо я, ніколи жсу не писав, чи шо? 😁

Які з цього можна зробити висновки, окрім того, що фронт не завжди винен? 🤣

1️⃣ Проблема дуже схожа на те, що було б, якби нагенерити багато коду за допомогою GPT — я скопіював відносно багато (близько 100 рядків) коду з прикладів на беці та на фронті, і тупив в них. Коли GPT десь набреше як я, то трабла буде така. І здається, що в цьому місці типізація дуже не завадила б, правда? Динамічно типізовані мови зробили для того, щоб люди могли швидше писати — а нащо це нам, коли код пише кремнієве створіння?

2️⃣ При таких розкладах здається, що було б кльово мати нову мову, яка орієнтована максимально на простоту читання і дебаг (інтроспецію і все таке). Які претензії до хороших чи модних зараз мов зі статичною типізацією?

Zig — орієнтована на простоту написання людиною, здається що за мемліками у великій кількості кода стежити очима не дуже зручно.

Rust — borrow-checker достатньо складний для того, щоб коли ти тільки читаєш код, забагато розумової енергії на нього треба буде, і нюанси будуть вислизати. А ще я наблюдав якось на стрімі, як професійний програміст на Расті (у сенсі що він на роботі на ньому пише) запинує borrow-checker експериментами, а не роздумами.

Haskell — мене тут лінивість напрягає сильно, не зважаючи вже на те, що це ще більший екстрим зі складнощами абстрацій, ніж в Rust'a.

Ocaml може? Хз навіть, придумайте до чого приколупатися?

Авжеж отак здалеку хочеться і лаконічності (щоб не треба було продиратися через FactoryBuilder factoryBuilder = new FactoryBuilder()), і хорошої типізації, і, може, відсутності GC? Чи це я вже гоню?

Короч, запускайте фантазію, якою вам ввижається ідеальна lingua franca для перетину люди/LLM/CPU?
🤯13🔥5
Пам'ятаєте, я два місяці тому написав новий фреймворк для тестів?

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

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

P.S. Чекаю коментів, чому треба було взяти мочу, чи шо там. :-)
🔥15🤯51😁1
Останнім роки у моїй бульбашці дуже пишно квітне любов до SQLite — до того, що люди декларують, що на цьому можна продакшен будувати, а як додаси litestream, то все, ховайся, яке життя добре буде.

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

• Екстрабідна модель даних — на рівні JSON'у. Зберігай дати рядками, порівнюй як рядки, ура, фантастика. Привіт таймзонам, з якими кожен програміст дуже обережно працює. Йуху.
• Типізація дуже слабка. SQLite він трошки як жс чи там перл, він трошки пофігіст. Обережним треба бути тобі.
• Індекси по такій моделі даних, очевидно, теж не дуже багаті.
• Якщо в тебе не один процес, типу якоїсь жирної JVM, а стандартні пачки джанг/рельсів — капець конкурентний запис поламає життя. З JVM можна писати з одного треда і воно буде жити.
• Альтери не можуть зробити того, що може зробити create table. Наприклад, add column <name> default ... зробити неможливо. Тобі це не треба. 🤪

Насправді думаю, що вам це все очевидно. Але щось склайта забагато в інфопросторі, аж здається, що всі почали забувати: воно для того випадку, коли є 1 апка з 1 користувачем. А мінімальний двіж, як у вебі — і SQLite стане препоною.

А дані — це найголовніше, що у вас є. Змінити мову програмування простіше, аніж базу та модель даних. Вибирайте розсудливо: вибирайте постгрес. 😁
🔥4315
Знаєте думку, що кожен програміст повинен написати свій власний блог-двіжок? В мене, як у сертифікованого CNO (Chief NIH Officer), це спрацювало просто perfect 5/7.

Byteflow

Років 15 тому, коли я почав у вільний від роботи та універу час колупати Джангу, я раптово усвідомив, що треба терміново замінити свій вордпрес із його гнусним пхп на щось із божественним пайтоном всередині! Виявилося, що рушіїв на пайтоні, а ще на джанзі — яка тоді була прям екстра-свіжа, ще року з моменту релізу не виповнилося — особливо й нема.

Ну там же ж нічо складного нема, тому я швиденько сів, придумав рушію назву Byteflow, і швиденько сів його писати. Воно спочатку ледве живе було, а потім я влаштувався працювати джанго-програмістом і байтфлоу дуже добре слугував як місце для експериментів та навчання, які потім можна було в робочий проєкт переносити. :) Навколо нього навіть зібралася невеличка тусовка (у джаббер-конфі), і це напевно було перше, що дало мені якусь впізнаваність у пайтон-ком’юніті. Було дуже приємно кілька разів на конфах почути, що люди розбиралися у джанзі, читаючи код Byteflow. 😊

Сорси не зберіг, нажаль. :(

Cyrax

За пару років воно мені набридло, а особливо — набирати пости в адмінці джанги. 😁 Плюс я надивився на Jekyll пана Моджомбо, і вирішив, що писати пости у редакторі, а потім їх один раз відрендерити — це супер, але у джекіла все якось цвяхами жоско прибито і це не тру взагалі. Тому я написав убер-екстенсібл генератор на пайтоні під назвою Cyrax (бо це мій улюблений персонаж у морталі, всіх поб’є, авжеж) — 2009 рік на дворі, щоби перспективу навести — і користувався ним кілька років.

І він до недавнього моменту був двіжком для Open Source Game Clones, доки мені не захотілося там зовсім хитро все розвернути і я просто написав кастомний скрипт на пайтоні.

Gostatic

Але у сайракса була трабла — це ж пайтон, а на дворі ще диски крутяться. Тобто в ноуті мене крутяться, авжеж, але все одно — ноут із SSD я собі ще не купив на цей момент. Тобто ця пайтон запускається стільки, скільки у мене нема терпіння — а ще потім там якась логіка, об’єкти бігають (все ж серйозно), час витрачають. Тож за 3 роки по тому я всівся писати двіжок на Go, щоби воно швидко все робило. Я прям серйозно до питання швидкодії, навчив його ре-рендерити тільки ті файли, які змінилися, плюс залежні від них.

Вочевидь розширяємості прямо кодом, як із пайтоном, зробити неможливо, але й прибивати цвяхами “оце блог-пости, а оце — окремі файли” (як джекіл та більшість інших) мені теж не хотілося. Тому я придумав make-подібний синтаксис: матчиш файли, кажеш від чого вони залежать, і правилами описуєш, що з тими файлами може відбуватися. Вийшло норм, а зі стеженням за файлами і гарячою перезагрузкою відчуття взагалі майже як live preview. :-)

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

А ще по результатам пари рефакторингів я написав пост про свою любов до Go. З однієї сторони — трошки дивно, що я досі сапорчу апку, написану на мові, яка мені не дуже подобається. З іншого - вона добре для мене працює і вже написана, і тому якось мотивації знайти часу для переписування щось не виходить. Worse is better, класіка. :)

Якщо вам стало цікаво: github.com/piranha/gostatic.
🔥335😁3
Там Кадді спражні інновації чинить, не те, що загниваючі альтернативи. 😁 Півроку тому (я теж не дуже уважно стежу, ггг) там вийшов реліз 2.6.0. В ньому купа просто приємностей, типу швидшого віддавання статики, готового до продакшену HTTP/3, HTTP 103 Early Hints, але є прямо life-changing штука.

Вони переробили свій код читання файлів з диску — раніше там було конкретно читання з диску, а зараз воно працює на абстрації, яка дозволяє мати віртуальні файлові системи (VFS). Вже є модуль для вбудовування сайту прямо у бінарнік Кадді, є зачатки конектору до S3, і взагалі можливостей дофіга і більше.

Приємно бачити, як проєкт розвивається.
🔥317
Зайшов на OLX глянути як там поживають мої оголошення (нікому оптика для фуджика не потрібна, доречі?). А в них величезний банер “акція на рекламу”.

Нормальний наче банер, так? АЄОА: в ньому нічого не натискається. Іди шукай “Центр підтримки”, клацай там “Про нас”. 🤣

Взагалі, авжеж, OLX — ідеальний приклад мережевого ефекту маркетплейсів. Він тормозить, в нього не дуже добре працює пошук, він постійно вилогінює, мобільна апка не переживає відправлення в бекграунд (схоже стіки пам’яті жере, що айос її вилогінює при першій можливості) і не запам’ятовує місця…

Тобто хорошого наче особливо не налічиш — окрім того, що в ОЛХа величезна аудиторія. Фотік і три з п’яти об’єктивів продалися за день після публікації. І, здавалося б, візьми та зроби краще? Багато хто намагався, в тому числі й Evo із izi.ua, Фоззі з besplatka.ua — але вибити лідера з позицій фактично нереально. Не розумію взагалі, як це зробити, окрім якихось тектонічних зсувів або заходів із сусідніх позицій (скажімо, чому izi.ua, а не розвиток prom.ua?).

Це в принципі взагалі характерно для онлайну, бо в реальному світі завжди можна відкрити магазинчик ближче до дому чи в зручнішому місці, а в онлайні всі відстані однакові.
🔥19💯1
Магія

Здається, ми на свої очі наблюдаємо становлення абсолютної магії. ChatGPT і зараз іноді вражає результатами, а коли воно виросте і буде інтегроване з кожною кавоваркою, то в нас буде абсолютно фентезійний світ.

Побутово у всіх є доступ до магії, і дзеркальце вже не тільки каже, хто на світі всіх миліше, але й покращить тебе (власне для світу). Але є хобіти (чи лудіти?), зо копирсаються у грядочках, а є ельфи, які трохи краще розуміють світ і можуть досягнути більшого (prompt engineer).

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

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

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

А чи є якісь рпг, де апокаліпсіс відбувся розумовий, а не атомний? 😁
😁3612🤯5
Вважайте, що я даю їм настоятися перед публікацією, але у п’ятницю вийшов новий подкаст RTFJ, з Олександром Чумаком з Уклону. З найбільш цікавого (для мене, хехе) там розповідь про те, як вони використовували MS Orleans — це такий фреймворк на базі моделі акторів для будування розподілених систем, а-ля Ерланг. Вікіпедія каже, що на ньому побудований бекенд для Halo.

Але це не все, про що я не розповів вчасно. 🤣 Кілька тижнів тому вийшов ще один випуск, про C++ з Олексієм Кучуком із Luxoft. В нас очевидно доволі різні погляди на питання (про плюси), але розмова вийшла ніжною. :) В коментарях жаліються, що нема конкретних рекомендацій про те, коли брати С++ — моя думка в тому, що це треба робити тоді, коли інші інструменти очевидно не підходять.

Enjoy!
🔥394🤯1
systemd у свій час підняв неймовірний шквал емоцій у linux-ком’юніті — немалим чином через вбудовування всього, разом із керуванням кавоваркою. Мені здається, що достатньо людей і досі не відпустили цю історію.

Так от, вбудовували-вбудовували, да недовбудували — rolling restart зробити їм не-ручним способом неможливо. Шаблони є, керування контейнерами (хоч і не в основному пакеті) є, купа якихось фіч є — а адекватні юзкейси закривати так і не закриває. Все одно треба доставляти якісь керувалки процесами додаткові.

Що робити людині, яка не хоче будувати контейнери, але хоче деплой без переривання обслуговування?.. Давайте вигадаємо якийсь мінімальний солюшен. 😁
11🤯2😁1
Sideloading

Минулого листопаду вже вступив у дію закон, який змушує таких чувачків, як Епл, відкрити свої платформи для встановлення апок повз апстор (для sideloading’у тобто). Мені здається, що це фантастика. Епл не пускає дуже багато цікавих апок, в тому числі браузери (бо те шо є — це все обгортки для сафарі), торенти, і такий інший стаф. По-друге, для деяких апок відсутність 30% податку на кожну транзакцію може бути взагалі причиною для існування.

Тож у iOS 17 нас чекають кастомні апстори. :) Епік той самий, наприклад, може ще Стім якийсь, і, хочеться вірити, Setapp (панове з MacPaw, чекаємо ваших натяків в коментах :)). Це ж взагалі фантастика, і конкуренція може змусити Епл як комісію знизити, так і якість їх рев’ю підняти.

Ну і взагалі, конкуренція. Як тільки Епл зрозуміли, що сайдлоадінгу не уникнути, вони почали наймати у команду Сафарі — яка історично просто критично недоукомплектована порівняно з Хромом, ФФ та іншими. Почали трошки більше року тому, і весь рік Сафарі мав все кращі і кращі релізи, наразі з кульмінацією у 16.4 з більшим релізом, ніж за попередні років 10 (здається). Конкуренція — це дуже добре для нас. :)

Епл, авжеж, розповідає за сек’юріті. Чи є шанси на якісь проблеми? Та є, але здається, що не сильно більше, ніж наявне — сайдлоадінг ≠ руту телефону, і обмеження різних апі залишаються на місці. Маки куди більш “діряві” (якщо можна так сказати), і епідемій та руйнувань ми очевидно не наблюдаємо.

I’m excited, короч. :-) Хоч і є великі шанси, що прийдеться купляти європейські айфони (по дурним європейським цінам), щоби все працювало. Якщо США не приймуть аналогічний закон, авжеж.
🔥324😁2💯1
Пан Ярослав Ажнюк почав хрестовий похід проти Телеграму. Причина проста: вочевидь російські корні. Чи може ФСБ зробити select author from messages where text ilike ‘%смерть путіну%’ — очевидних доказів я поки що не бачив, але можемо припустити, що в них є можливості надавити на власника або співробітників. Уявімо, що ми занепокоєні і щось хочемо змінити.

Є одразу кілька але.

1. Як влучно підмітив інший пан, Дмитро, зручність їсть секьюріті на сніданок. Скільки хочеш рекламуй людям довгострокові наслідки, вони обирають зручність тут і зараз. А інтерфейс Телеграму набагато зручніший і функціональніший, ніж в будь-кого з конкурентів — і я не дуже розумію, чому жоден з них не займається копіюванням. :)

2. Е2е шифрування багато фіч телеграму робить або складнючими, або неможливими. Пошук по історії то таке, текст не стільки місця займає, можна навіть у веб-клієнт затащити (індекс для пошуку, маю на увазі). А от синхронизація клієнтів або ламає всю ідею е2е (що там, один сертифікат на всіх?), або буде отой гемор, що у воцапі. Це вже не кажучи про групи, воцап стрибає сам собі через голову, щоб вони якось працювали.

3. Сек’юріті і e2e шифрування — це близькі речі, але це не все. Дуже такі шифровані воцап та сигнал у чатах показують телефони учасників. Виходить, навіть не треба з платформами розмовляти, достатньо потрапити у чат і можна ідентифікувати всіх людей, хто там є — і якось так пофіг, що все спілкування шифроване… Воцап взагалі молодець, телефони показує, а ніки — ні. 🤦‍♂️

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

Але скоріш ми — не вона. Тоді є два варіанта — змиритися, або подумати, чи можна створити нову платформу, яка збере критичну кількість людей. Щоби це зробити без неймовірних вливань грошей — а, як показує приклад Київстару (точніше VEON’у), навіть з цим це важко, якщо в тебе немає чогось привабливого для людей.

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

Тож треба нішеву фічу і потім загальну привабливість для того, щоб спочатку захопити якийсь майндсет, а потім розповсюджуватися навколо. Або зайти взагалі з іншої якоїсь сторони, а потім вбудувати месенджер — як міг би зробити Твіттер (але їм завадило те, що вони нічого не можуть зробити, ггг). Діскорд, скажімо, відносно цікавий, але користуватися їм як персональним менеджером — не дуже зручно…
24💯13🤯2
Колись в незапам’ятні докризисні роки, коли президентом був Віктор Андрійович, а я ще активно вболівав за Меркуріал, Ваня Пиріг організовував пайтонівські конференції під брендом Exception. А коли воно трохи розігналося, він зробив велику таку конфу (коменти там просто жир, коли знаєш ніки), не тільки про Python, а загалом про динамічно типізовані мови.

Це дуже сильно змінило тусовку після конфи. До того це був доволі стабільний двіж одних і тих самих людей, а тут купа нового народу намалювалася, і з зовсім інших бульбашок. І так сталося, що за пивом після конфи я попав у компанію Юри Рашковського і Олега Андрєєва — двох рубістів, які, очевидно, любили гіт, а не меркуріал. І продавали вони мені його дуже активно, хаха — не вмовили, але зацікавили. :-)

А після того обидва емігрували куди подалі і контакт +- загубився, а тут ось нещодавно Юра написав у Твіттері, що працює над новим проєктом під назвою omnigres. Якщо ви дивилися RTFJ, я там пару разів задавався питанням — чому бази даних не пішли у розбудовування як App Server’и? Я досі не знаю відповіді на питання — можливо, на той час один сервер це було замало ресурсів, можливо вітер дув не у ту сторону, хз. От Юра і вийшов на тропу війни перевірити життєздатність такого механізму.

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

Я певен що ви й до цього моменту не здогадалися, що увесь пост — це просто підводка до того, що Юра завів собі телеграм-канал українською. 😁 Каже, що це вперше за більше ніж 20 років він пише за технології не англійською мовою. :)
🔥18💯4😁1🤯1
Пару місяців тому мені прийшла в голову думка, що з наявним прогресом в ML вже треба мати редактор з інтеграцією з ними. А його нема і це значить що це ж я сам можу то зробити! We do this not because it is easy, but because we thought it's going to be easy, йуху!

Я буквально за три дні зібрав proof-of-concept на ProseMirror — ну ще трошки за тиждень відполірувати і можна випускати. Але ж не дарма пост почитається зі слів “пару місяців”, правда? :) За той тиждень якісь чуваки випустили AI-powered редактор на Product Hunt’і, а потім ще один, і ще — ідея на поверхні лежить і вони явно почали задовго до мене. :)

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

Тож за ці пару місяців я трошки відновив скіли фронтенда і верстки, і зробив по факту купу всього:

• інтеграцію з телеграмом — останні кілька постів написані вже в новому редакторі, а не старим методом
• з гітхабом — де архів мого каналу
• планування постів
• із словниками — щоби шукати синоніми (тут поки українська і англійська тільки)
• з ChatGPT — але зробити нормальний prompt, щоб він був радий дописувати пости, поки шо не вийшло (я загалом планую зробити можливість власні prompt’и додавати/використовувати)
• ну картиночки/форматування/єтц — очевидно
• колаборація, і наче навіть нормально все працює
• і коментарі, авжеж — і навіть придумав окремий флоу для “дати посилання тільки для читання і коментування” без реєстрацій, менеджменту пермішенов тощо

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

Тож зустрічайте: Nounry. :) Поки що через форму і емейл, закрита бета, всі діла. 😁 Не стільки для створення ажіотажу, скільки для поступового розгрібання багів. :)
🔥828
JWT: скільки вже можна?

Ще перший раз, як я зустрів згадку JWT, мене трохи дивував пафос, з яким давно відомому підходу — підписанним кукам — вигадали нову назву. Стандартизували так кльово, наплодили дір по всьому інтернету — особливо кльово було, коли бездумно юзали джавну лібу, а в неї по дефолту користувач міг сам сказати alg=none і хобана, нічого не треба підписувати, просто скажи мені свій user_id! Phantastic!

Так от, знаєте, чим JWT відрізняється від підписанної куки? Нічим! Це просто загальноприйнятий формат підписанної куки. Чим це погано, окрім загальних для всіх вразливостей?

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

І, авжеж, ти знайшов, кого зламали, але не можеш його розлогінити! Ну окей, зламали тітку Валентину, щось натворили, ти їй скинув пароль (бо був qwerty тощо). Що ти будеш робити, щоби викинути ті сесії? Допилювати умови “всім сесіям користувача 90210 старше за 12 грудня — відмовляти”? Glorious future!

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

Хвате вже цю хрінь юзати. Є ж звичайні токени. Записав в базу сесію з інформацією про неї (ip, user-agent, шо там ще можна вигадати), віддав у кукі її айдішник, і все, будь щасливий. І не просто щасливий, а ще й забезпечений можливостями апгрейдити сек’юріті у майбутньому без вилогінювання всіх користувачів — за яке вони тебе зненавидять і видалять твою апку.

P.S. Як я хочу видалити апку OLX, але не можу, бо їх сайт ще гірше. 🤣

P.P.S. Читайте коментарі, там є опис цікавого юзкейсу про використання JWT всередині інфраструктури (не у user-facing сценаріях).
💯43😁161🤯1
У Nounry власне редактор побудований з ProseMirror’а (та tiptap, але це не важливо для розповіді). І підхід проузміррора нагадує React трошки: в тебе є в пам’яті модель твого тексту (параграфів та такого іншого), а в HTML він її рендерить. Презентація в HTML ніякого впливу на власне текст документу не має взагалі, і коли ти до DOM-нод додаєш якийсь клас, чи шось редагуєш, він миттєво те все прибиває і HTML виходить чистенький.

Тобто хочеш ти якісь штуки навколо текста показати, декорації якісь? Треба використовувати спеціальний апі для декорацій, авжеж. Робиш плагін (бо в проузміррорі все шо є — плагіни, навіть параграф), в якому шось вирішуєш і повертаєш декорації.

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

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

Ну що там всередині? <a href>url <svg></a>, вірно? Але цікавий нюанс в тому, що віджету (це термінологія проузміррора) треба передати не рядок, а готову DOM-ноду. І для створення ноди я юзаю crelt:

  return crel('span', {class: 'sticky-widget'},
crel('a', {class: 'sticky-widget-inner badge bg-secondary',
target: '_blank',
rel: 'noopener noreferer',
href: attrs.href},
title + ' ',
core.svgiconel('box-arrow-up-right')));


Ну й svgiconel всередині теж використовує такий самий crel. Краса, здавалося б. Один нюанс: іконки нема. В будь-якому іншому місці додаєш її, і вона рендериться, а всередині ProseMirror’a — нема!

Я обшукався, чому PM не рендерить svg, питав у жпт (і клавдії), не знаю, ну реально вбив годину-другу життя (за кілька днів), і випадково попав на обговорення document.createElement десь на Stack Overflow, де чувак жалівся, що свг з серверу показуються, а зроблені на клієнті — ні!

Дивне відчуття, бо я прям пам’ятаю, як я на це попадав колись давно, коли хотів Реактом свг рендерити. Для свг треба не document.createElement(‘svg’), а document.createElementNS('http://www.w3.org/2000/svg', ‘svg’)! 🤦‍♂️

Дуже кльово, що браузер, коли парсить ХТМЛ, може розібратися, а коли ти викликаєш його апі — не може. Консистентно і зручно. Радий, що тепер у мене в голові з’явилася нова крупиночка знання. 😒
🤯15😁7💯1
Я не очікував, що моя “любов” до JWT викличе таку реакцію. :-) Для мене здається аксіомою те, що не треба брати гнучке і загальне, але складне рішення, коли вистачить простого спеціалізованного без практичних недоліків.

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

Ейвері щойно написав довжелезний пост про інженерію, магію та AI, звідки можна запозичити цитату:

> Do as little work as you can … graduate with a passable grade … That's engineering.

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

Так от. Якщо ваша мета — не спростити все до максимума (який ще можна допустити), а зробити максимально гнучку і загальну, на всі випадки життя, систему — то це не Software Engineering, це Computer Science. Це не про заробляння грошей, а про дослідження.

Тим не менш, я не вважаю, що low-tech підхід “ми зараз все накалякаємо на php3” — це воно. Лоу-тек призводить до рішення проблем брутфорсом, багато коду ускладнює розуміння, внесення змін та адаптацію до нових умов — це все dead-end. Так, треба шукати нові підходи, нові абстрації, нові технології — в жодному разі я не думаю, що все що старе краще ніж нове.

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

KISS XOXO 😁
💯617🔥1🤯1
Коли робиш хоткеї у джаваскриптових аппках, є вибір з трьох варіантів, як можна зрозуміти, яка натиснута кнопка. Перший, як робили традиційно більшість бібліотек — написаних американцями, авжеж — це дивитися на event.key. Дуже все легко і зрозуміло, робиш if (event.key == ‘s’ and event.ctrlKey) і знаєш, що натиснули ctrl-s. Ну дуже легко.

З мінусів — перемикання на іншу розкладку, скажімо, українську, — і прилітає і. Ну і все, всі хоткеї не працюють. Але є вихід! Коли я писав keymage — я використав event.keyCode. MDN каже numerical code identifying the unmodified value of the pressed key. Ну тобто тиснеш ту кнопку, де s чи i, і прилітає 83 — ASCII-код літери S. Зроби собі один раз мапінг всіх кнопок — і шорткати починають працювати нормально в різних розкладках. Так працює система шорткатів у ProseMirror, він всередині використовує пакет w3c-keyname, який власне мапить keyCode на ім’я (приблизно те саме, що й по посиланню).

АЄОА! Кнопочка біля правого шифта, яка слеш, в англійській розкладці генерує 191, а в українській 190 — точку! Я це якось взагалі не пам’ятав з тих днів, коли писав keymage — можливо не помітив — але в Nounry команд-бар висить саме на cmd-/, і в українській розкладці не працює! 😠

Гарна новина, що з тих часів пройшло вже 10 років (чи гарна це новина, правда?..) і всі браузери поробили собі event.code, який represents a physical key on the keyboard. Йуху! Там прилітає щось на кшталт KeyS чи AltRight чи Slash — і тому можна без проблем робити шорткати, які реагують на натискання однієї і тієї самої фізичної кнопки на клаві!

Тож я взяв до рук patch-package і переробив prosemirror-keymap так, щоби в мене був кльовий модерновий спосіб хендлити шорткати. 😁 Єдине, що цікаво — чи люди, які використовують Dvorak чи там Colemak, що очікують, коли написано cmd-/? Але вони звикші до страждань, тож якось розберуться. :-)

Єдине, з чим залишилося якось розібратися — макосний хоткей на ctrl-k, який видаляє до кінця рядка, перестає працювати в українській розкладці. Не певен, що це питання до мене, правда. :-)
🔥2411😁3🤯2
Роки 2-3 тому потроху стало більше чутно людей, які не таки вже й раді засиллю SPA на фронті. Авжеж, якась кількість незадоволених була завжди, але був якийсь пік, де навіть незадоволені мовчали, а тепер потроху корабель (можливо) розвертається.

Я це насправді до двіжухи в Basecamp’і, який з’їжджає з клауда — DHH вчора описав результати переїзда Basecamp Classic на власне залізо. Цікаві цифри: вони його перевезли на свої сервери, які коштували по 20 тисяч кожен. Девід каже, що можна було б запустити увесь сервіс, включаючи бази, на одному сервері — і тоді виходить з розрахунку на 5 років по 333$ на місяць.

Так мало того, що це значно дешевше клауда, воно ще й швидше почало працювати. Ну що логічно, AWS не найновіші проци дає зазвичай… Енівей, про значно дешевше: він у одному з попередніх постів каже, що на клауд (виключаючи S3) в них йде $2.3m на рік. А все залізо, що вони купляють для переїзда — $600k.

А розрахунок на 5 років +- дуже адекватний, навіть якщо воно росте — приблизно такі цифри виходили і в Касті з купівлею нових залізяк під БД. :) Тобто це по 120 тисяч на рік замість 2300 тисяч на рік. Напевно на зекономлені пару мільйонів можна буде найняти пару адмінів, якщо наявних недостатньо, як вважаєте? 🤣

Цікаво, чи буде це початком якогось тренду (бо пости DHH розходяться широко), щоби мож клауди трохи попустилися з прайсінгом? 😁 На HN до його поста коментарів майже нема, тобто широкий загал це поки не чіпляє. З іншого боку, наврядчи в клауд вже йдуть за економією грошей — можливо за гнучкістю, за витривалістю, але очевидно не за економією. Чи не очевидно? :)
🔥42💯4😁1