Bite the Byte
2.66K subscribers
24 photos
1 video
237 links
Download Telegram
Вважайте, що я даю їм настоятися перед публікацією, але у п’ятницю вийшов новий подкаст RTFJ, з Олександром Чумаком з Уклону. З найбільш цікавого (для мене, хехе) там розповідь про те, як вони використовували MS Orleans — це такий фреймворк на базі моделі акторів для будування розподілених систем, а-ля Ерланг. Вікіпедія каже, що на ньому побудований бекенд для Halo.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Я певен що ви й до цього моменту не здогадалися, що увесь пост — це просто підводка до того, що Юра завів собі телеграм-канал українською. 😁 Каже, що це вперше за більше ніж 20 років він пише за технології не англійською мовою. :)
Пару місяців тому мені прийшла в голову думка, що з наявним прогресом в 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. :) Поки що через форму і емейл, закрита бета, всі діла. 😁 Не стільки для створення ажіотажу, скільки для поступового розгрібання багів. :)
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 сценаріях).
У 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’)! 🤦‍♂️

Дуже кльово, що браузер, коли парсить ХТМЛ, може розібратися, а коли ти викликаєш його апі — не може. Консистентно і зручно. Радий, що тепер у мене в голові з’явилася нова крупиночка знання. 😒
Я не очікував, що моя “любов” до 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 😁
Коли робиш хоткеї у джаваскриптових аппках, є вибір з трьох варіантів, як можна зрозуміти, яка натиснута кнопка. Перший, як робили традиційно більшість бібліотек — написаних американцями, авжеж — це дивитися на 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, який видаляє до кінця рядка, перестає працювати в українській розкладці. Не певен, що це питання до мене, правда. :-)
Роки 2-3 тому потроху стало більше чутно людей, які не таки вже й раді засиллю SPA на фронті. Авжеж, якась кількість незадоволених була завжди, але був якийсь пік, де навіть незадоволені мовчали, а тепер потроху корабель (можливо) розвертається.

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

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

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

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

Коли я перший раз імплементував OAuth (звичайний, ніяк не пов’язаний із JWT, а то подумаєте ще) — а це була авторизація через Twitter — я втратив на те майже тиждень. Це було у 2009 році, і я тут подивився у Вікіпедію, що його навіть ще не стандартизували тоді. 🤪

Другий раз, авжеж, йшло сильно простіше, але все одно, заплутатися в ногах (до чого тут ноги?!), різних урлах, різних іменах цих урлів, хто кого куди посилає, хто, нарешті, кому лікар?! — дуже легко. Взагалі розклад виглядав так: береш якийсь django-oauth (чи шо там ще, різне бувало), читаєш 3 рази доку, з твітером працює, з фейсбуком спочатку натупив, потім працює, гугл щось знов змінив… Ладно, запинав це все, а через рік хочеться когось додати, і виявляється, що ніхто не знає, що робить.

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

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

Аж тут якось я натрапив на oauth.two — малесеньку лібу на кложі, фактично без залежностей, але головне: з фантастичним дизайном. Вона не робить HTTP-запити, не взаємодіє з базою, і взагалі має менше 50 рядків коду. Здавалося б, 50 рядків! Що вона там може?

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

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

І коли обговорювали, як же круто, що наші розробники такі швидкі, панове розробники сказали: ну це Саня просто кльово систему авторизації зробив. Приємно, авжеж, але це не я! Це все маленька фантастична бібліотечка. Всього 50 рядків коду, а різкість наводить ой-вей. 😁

Оце — вершина дизайну. Simplicity is the ultimate sophistication.
Design in Practice

Рич Хікі (автор Clojure і багатьох дуже кльових доповідей про філософію програмування) минулого тижня на Clojure/Conj зробив дуже кльову доповідь. Нарешті!

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

Цікаво, що раніше його доповіді мене чіпляли капітально, не міг відірватися — а ця якась трохи нудна вийшла. Але може саме тому, що це не розповідь була, а інструкція. :) Шкода, що він не зібрав то все до купи і не роздуплив мене років на 6-7 раніше, дуже б стало в нагоді в Касті. :)
Наче й очевидно, що журналістика трошечки вмерла, але все одно іноді смішно. Олег Гороховський вчора написав “ми зайняли перше місце в рейтингу форбс.уа”, і я чомусь сподівався там побачити щось цікаве.

А там оцінюють апки (не будемо придиратися до використання слова “додаток”, так?) по дуже-дуже важливим кожен день критеріям! Чи можна відкрити валютний депозит прямо в апці? Чи можна оскаржити операцію без звертання в кол-центр? Чи можна відновити доступ через Дію (доречі, ніде не можна, і звідки взялося взагалі питання — не дуже зрозуміло мені)?

Ну такі, щоденні речі. 😏 Прям глянув таблички і одразу зрозумів, яким з них користуватися зручно, а яким ні. 🤣

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

Чи легко знайти щось в історії витрати? Чи вона завантажується хвилину і пошуку там взагалі немає? Чи важко розшарити підтвердження оплати в інстаграм? Чи важко взагалі ту оплату зробити (hint: за оплату IBAN’ом у всіх двійка)? Що там взагалі зі швидкодією?

Та короче, можна було б просто сісти і на контрасті між різними апками сформулювати питання. Але пан директор платіжної асоціації порівняв цікаві йому параметри, а форбс опублікував як “рейтинг додатків” (як же ж мене тригерить це слово 😵‍💫) — і Sense, яким неможливо користуватися, бо хрін там здає де шо знаходиться, на другому місці. Робочий стіл my ass, от шо.
Минулого тижня Anthropic — це такий конкурент OpenAI — оголосив, що тепер в їх моделі Claude тепер можна запхати контексту на 100 тисяч токенів. Якщо ви не стежите за всією двіжухою, то в GPT4 звичайне обмеження — це 8 тисяч токенів, але є спеціальна варіація на 32 тисячі (вона ще й в два рази більше коштує).

Токен — це така одиниця споживання в ML-моделях, приблизно як склад слова. OpenAI каже, що це десь ¾ англійського слова, для української мови скорше десь ½. Тобто, обмеження в 100 тисяч токенів — це десь 75 тисяч англійських слів.

Це фантастика і об’єктивно прорив — їх багато за останній час, але це напевно найбільша новина з анонсування ChatGPT, імхо.

Вони там приводять в приклад, що замінили один рядочок в книжці “Великий Гетсбі”, і попросили знайти, що вибивається з тексту. І воно спожило 72 тисячі слів і видало відповідь за 22 секунди! 🤯 Ціна зараз на модель з таким контекстом така сама, як на звичайну, тому в instant-версії (швидша і тупіша, як gpt-3.5 типу) такий експеримент коштував би всього порядка 30 центів!

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

Я оце мрію, що хтось працює мож над якоюсь заморозкою стану, щоб можна було засунути книжечку і потім додатково їй питання задавати. Власне всі чати зараз stateless, для генерації нової відповіді в модельку відправляються всі питання і відповіді — сама вона нічого не запам’ятовує. А шкода, дуже хотілося б не парсити Гетсбі для кожного питання наново. :-)
Не секрет, що написати пост про виступ заздалегідь для мене важче, ніж власне підготувати виступ. :) Тому може ви нічого і не чули, але сьогодні ввечері буде онлайн-мітап DEV Challenge, і я там трохи порозмовляю на тему того, як взагалі взаємодіяти зі змінами і з бізнесом, який їх хоче.

Я так розумію, що посилання на трансляцію буде, якщо зареєструватися. Мій виступ заплановано на 18:35.

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

P.S. Тема виступу - “Embrace the Change”, а не те, що здається по картинці. 😁

P.P.S Мітап — англійською.
Consulting

Як пишуть панове американці, I’m excited to announce, що я відкритий для консультування. :)

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

Очевидно, цей пост не зовсім для аудиторії цього каналу (бо є якась така смутна думка, що це більшою частиною програмісти), але якщо ви його розшарите тим, кому це може бути цікаво (здається, що кудись в сторону CEO/CTO/CMO) — буду вам дуже вдячний. Якщо у вас раптом є ідеї, куди б можна було піти в сторону потрібної аудиторії — теж капець вдячний буду (можна і в приватні повідомлення, якщо публічно не хочеться). Я б може не проти піти кудись на інтерв’ю…

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

P.S. Консалтити компанії з російським походженням не готовий абсолютно.
На HN обговорюють, як прискорили завантаження Вікіпедії на 300 мс. Якщо вам ліньки читати, то коротка версія така: там код на жсі пробігався по купі елементів, щоби навісити хендлери — і цей цикл виходив дуже довгим. В одному випадку вдалося просто видалити код, в іншому замінити на делегацію подій.

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

З однієї сторони, хочеться, щоб всі були залогінені. З іншої — воно ж додаткового навантаження генерує немало. Неприємно, так?

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

На Касті таким чином підгружаються хедер і вподобайки на товарах, і ніхто того взагалі не палить. :) #cache #performance
Мене тут вчора Simple Joys of Scaling Up спонукала порахувати, як дорого на AWS EC2 буде коштувати нормальна залізяка, щоби власне був simple joy, а не total despair. Сенс статті у тому, що з часів винаходу Dremel’а (який ми знаємо під назвою BigQuery) у 2008-му році багато чого змінилося у залізі, і тепер ефективніше не вигадувати розкидування даних на купі залізяк, а просто взяти один величезний комп і там все порахувати.

Тож я глянув на амазон, і для порівняння на хецнер. Чомусь отак лоб в лоб ціни на схожі залізяки я не порівнював, і виявилося що це прям eye-opening досвід. Авжеж, прямо порівняти важко, але візьмемо приблизно той конфіг, на який я знаю ціну на залізяки. У хецнера Epyc на 32 ядра, 512 гб пам’яті і 2 nvme по терабайту виходить в 330€/місяць. В амазоні точно такий накастовати важко, бо схожий і найдешевший з NVMe на борту r6gd.metal — це гравітон, виходить 2700$/місяць (1700$, якщо брати reserved), а i3.metal — 3600/2500$ (щось схоже в хецнері — 385€).

Тобто різниця в ціні — у 5-6 разів (будемо щедрими, коли на амазон спускаєш грошей, він дає трохи знижок). Якщо перекладати на справжні залізяки, ми колись приблизно таке купили за 10к доларів. Глянув що зараз - наче приблизно 8 тисяч виходить. Тобто порівняно з хецнером залізяка окупається за 24 місяці, а з амазоном - за 5! Менше ніж за півроку!

Ain’t that absurd? AWS просто друкує гроші! Ладно, жартую, він не друкує, він як поламаний Робін Гуд — відбирає у всіх (вас) і віддає шерифу, хехе.

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

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

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

У твітері вже були відповіді за те, шо платити в 5-10 разів більше за авс не западло, бо там же ж є CloudFormation і SQS! Теж по неадекватним цінам, і теж не без власних цікавих моментів — але ж кожен хоче бути експертом по AWS, тому це ще й плюс. 😐 А ще згадали за те, що готелі теж значно дорожчі за зйомні квартири, бо всі бізнеси такі волатильні, що ти постійно то береш, то віддаєш i3.metal. Можна непогано зекономити, якщо його юзати не більше 4 годин в день. Жартую, мав на увазі можна вийти в приблизно ті самі витрати.

Може за SLA ще треба згадати? Даунтайм у Касти через те що залізо здохло за всі роки був один раз. А даунтайм через те шо щось неправильно в коді, неправильно в конфігу, навантаження виросло не там де очікували, щось вдало оновили (постгрес кхм)… Ну власне всі інші даунтайми. :) Тому я очікую, що результат по аптайму буде приблизно однаковий. 😁

В хецнера, авжеж, є свої мінуси. Але оце коли порахуєш конкретні цифри, кейс Бейзкемпа стає зрозумілішим.
Rewrite/Restart

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

Ну, так це виглядало мені. :) Я його взагалі ніколи не любив, реддит був моєю тусовкою в ті часи, і наприкінці 10 та в 11 році аудиторія в реддита росла неймовірно швидко — за рахунок еміграції з digg’a. Наприклад, /r/programming перетворився на помийку саме тоді. 😁

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

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

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

Реддит, схоже, готується до IPO, чи ще якісь цікаві зміни у них відбуваються, і вони анонсували всім альтернативним клієнтам, що за доступ до API треба буде платити. “Ні-ні, ми в жодному разі не вразилися ідеєю твіттера чаржити 42 тисячі на місяць” казали вони на дзвінках. :)

Але раптово виявилося що збрехали і запропонували платити по 12 тисяч доларів за 50 млн запитів. 🤣 Це левел цін на GPT-моделі, processing-heavy штуки всілякі. Автор Apollo порахував, що це приблизно виходить 2.5$ за користувача на місяць (або 20$ млн в місяць за всіх, що явно трохи задофіга для безкоштовної апки).

Зрозуміло, що це неадекватна ціна, але наскільки неадекватна? Той самий Кристіан (автор аполло) порахував, що реддит по найвищим оцінкам заробляє 12 центів на користувачі на місяць, тобто це як мінімум на порядок неадекватна ціна. Я думаю, що він оптиміст, і там насправді 2-3 центи.

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

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