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

🌐solovyov.net
🐦twitter.com/asolovyov
🔴youtube.com/asolovyov

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

Без реклами
Download Telegram
nginx (компанія і власне продукт) в 2019 році продалися F5 (це контора яка робить лоад балансери, головний гравець ринку).

Але в 22 році ф5 каже Максиму Дуніну, основному розробнику (на рівні шо останні 10 років він більше половини коду написав) - Максимчик, ваша гнусна країна розпочала війну, ми валимо з рашки. Він вирішив залишитися у москві і працювати над жинксом далі безоплатно (зі сторони ф5, так-то напевно якісь консультації його годують).

На разі 24 рік і Максим пише листа у розсилку жинкса - ф5 поставили на проєкт якогось нетехнічного чувака, який вважає, що знає краще, я так більше жити не можу і форкаю жинкс у freenginx.org. Free, тому що, очевидно, він вільно у москві сидить, а не загниває десь на заході.

А проблема там в тому, що чуваки знайшли якийсь баг чи два в експериментальній фічі нжинкса, і хотіли присвоїти їм CVE, а він був проти. Чувак, відповідальний за CVE, таки їх зробив, на що Максим образився. Тобто це навіть не продуктова проблема, не напрямок, нічо. Просто его велике. А “нетехнічний” менеджер раптом виявився відносно відомим чуваком, який в інтернеті технічними речами займається з 89 року.

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

То давайте хильнемо за те, щоби збивати А-50 переросло у звичку? 😁 Або краще давайте задонатимо на човники, чи шо :)
Please open Telegram to view this post
VIEW IN TELEGRAM
Будемо вважати, що не хотів вам псувати робочу п’ятницю, але якщо ви ще не дивилися — то вийшов новий випуск 1-2-3 Techno, з Олесем Петрівим, кофаундером і СТО Reface. Ну ви знаєте ріфейс, так? 😁 В будь-якому разі, вийшло цікаво — а ще всередині є прикольний експеримент з Віксом, пишіть, як воно вам. :)
Please open Telegram to view this post
VIEW IN TELEGRAM
Щось я пару днів тому в темній кімнаті відкрив ноут і вирішив що час покласти край власному лудитизму і включити автоперемикання на темний режим, а то очі мої мало не витікли. 😆 Ну й на фоні цього зрозумів що моєму власному сайту дуже потрібен темний режим. Не те щоб я його багато оновлюю чи ще щось, але ну перед самим собою соромно вже.

І що в таких випадках робить адекватна людина? Правильно, йде в консольку Клавдія і каже: а витягни мене з цього цсса всі кольори, які треба змінити для темного режиму, як змінні, а потім створи для них темний режим.

Спрацювало. Наче й тупе місцями, але ж іноді яке корисне! 😁
Слак тепер показує діалог підтвердження відкриття лінки, на яку я сам натиснув — і навіть бачив її прев’ю (та й урл теж, в принципі).

Напевно шось на кшталт “As a user, I want to see confirmation dialog so I can confirm my life choices”.

Загалом геніальний ход, імхо: тепер можна проаналізувати як багато людей поставило галочку “не показуй мені це більше” і зрозуміти наскільки аудиторія готова до подальшого погіршення продукту.
В метабейза є здоровезний yaml-файл з міграціями. Він вже був за 15к рядків, його розділили на два, і тепер той, куди додаються нові міграції — всього 6 тисяч рядків. 🤦‍♂️ Це конфігурація liquibase, і поки ми обговорюємо рішення — бо воно всіх харить, хоч і працює — цього монстра треба якось редагувати.

А воно змушує мій Emacs тормозити. Ну прям так що я друкую символи і воно нешвидко, а іноді який ентер як натиснеш і воно з півсекуди чехлить. Я вже спробував його редагувати у Саблаймі (неправильно робить відступи і приходиться руками дотикувать, що з ямлом прям стрьомно), в Зеді (те саме), перейти на tree-sitter щоби не тормозила підсвітка, відключати підсвітку…

А потім мені прийшла світла ідея в голову. Ну не може ж так бути, щоби софт можна було самому в собі розробляти і не було профайлеру, правда? Таки є, і прям дуже простий у використанні. M-x profiler-start, шось поробив, M-x profiler-stop, і можна дивитися в M-x profiler-report результати.

Ну й результати ось вони, на скріншоті — все очевидно. flycheck занадто часто намагається перевірити синтаксис і в нього занадто багато часу це займає. Ну ок, відключив його для yaml-файлів на idle, і все, тормозити перестало. Не знаю, чому раніше не навчився цієї діагностики. 😁
Програмісти неефективні

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

Я роблю в метабейзі інвалідацію кеша — і для спрощення не буду вам всі подробиці тут вигружать, але я вигадав many-to-many табличку для маркування кеша, перефігачив протокол спілкування з кешом, загалом, короч, 4 дні роботи і натрапив на edge case… розмовляю з продактом — він не програміст, але в минулому Head of data у великій компанії, тобто технічно непогано роздупляється — показав йому як все працює, і кажу: оцей юзкейс діч, реально ще тупо 2 дні на нього треба.

А він мені каже — а чого ти не додаси якесь поле типу cache_invalidated_at прям на картку запиту у таблицю?..

Ну так, трохи low-tech рішення, якщо є картка з таким самим запитом, то для неї кеш не скинеться — але таке і не часто буває, і не дуже важливе… Дуже кльове рішення. Реалізується буквально за 2 години зі всіма тестами (зранку ж і перевірив естімейт), змін в 3 рази менше, складність в 10 разів менша.

(Насмішніше те, що мені моя ідея з m2m табличкою не подобалася, я написав месагу в чат і там панове програмісти наобговорювали шо нормально я все придумав і не тре зайвих рефлексій, роби давай)

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

Не розумію, як це виправляти. Робити програміста міні-продактом свого напрямку? Ну то наче в метабейзі намагаються, пишеш proposal’и різні, такий весь в темі, але ось мене не спасає. Короч, рецептів не знаю, але спостереження тримайте. Можете постежити за собою, або за своїми програмістами. 😁
Не знаю, наскільки ви знаєте базу, на якій побудован увесь веб, але ASCII — це досі основа з основ. На щастя епоха кембрійського вибуху кодувань із latin1, koi8-u, cp1251 та всього іншого хламу вже пройшла і майже всі текстові дані (наприклад, веб-сторінки) сьогодні літають закодовані в UTF-8. UTF-8 дуже цікаве кодування, яке на відображення 1 символу може використовувати різну кількість байт — практично для нас це значить, що чим пізніше символ доданий, тим більше байт він займає. Тож на самому початку UTF-8 — це 1-в-1 американський стандарт кодування латинської абетки, цифр та символів ASCII.

Це все працює дуже просто, кожен символ закодований якимось числом (вибачте, що пояснюю такі основи, але це важливо для подальшої думки). Наприклад, символ пробілу закодований числом 32, а перевод рядку — числом 10. Так от, історично склалося так, що великі латинські літери йдуть перед маленькими, тому літера A - це 65, а літера a - це 97. Це дуже легко перевіряється все в тому ж пайтоні, запустіть в його шелі ord('A') і побачите самі.

Так от, зазвичай зараз сторінки віддаються з html-тегами, написаними маленькими літерами. А у 90-ті було навпаки, чому так? Ну бо тоді з модемами на 14400 бод (якщо пощастило) економили кожну краплю, тому менші числа авжеж були дуже в нагоді, а потім всі розлінилися і перестали економити. 😅

Тож якщо вам хочеться трошки зменшити розмір своїх сторінок, можна перевести всі теги у верхній регістр. Наскільки воно допоможе — залежить, авжеж, від вашої сторінки. Пишіть, що у вас виходить! А заодно поширюйте пост, бо нинішні тенденції не звертати увагу на перформанс самі себе не переборять. 👍
Please open Telegram to view this post
VIEW IN TELEGRAM
Ви питали — ми писали. 😁 Чи не питали, але як би там не було, в нас новий випуск 1-2-3 Techno, на цей раз із Всеволодом Соловйовим (не співпадіння). Початок вийшов технічний, а продовження зовсім ні, тому цікаво повинно бути кожному.

Ладно, ви й так знаєте, що я не по вступам, а по суті, тому просто йдіть та дивіться. :-)
А давайте поговоримо за те, як Фейсбук продукує опенсорсні моделі, доки всілякі Опен-Ой-Веї беруть за них гроші? Є фантастична стаття Commoditize Your Complement, в якій з наочними прикладами добре пояснюється феномен комерційних компаній, які підтримують опенсорс. Це не альтруїзм в жодному разі, це спроба захистити себе від (майбутньої) конкуренції.

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

Додатковий плюс! Ти маєш змогу тримати в себе розробників, дослідників і науковців, які б в іншому випадку пішли покращувати OpenAI et al, або б взагалі заснували ще одну цікаву компанію.

І для фейсбука це фактично копійки — в них 135 млрд ревеню (і 88 млрд витрат) в минулому році версус 1.6 млрд (або 2, шось складне репортять) в OpenAI. Вони на прибуток можуть два десятки OpenAI’їв фінансувати і ще гроші залишаться.

Тож це не дурня, а стратегія!
Новий інтерфейс Монобанку

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

Але! Всі ті дії, які я робив часто, стало робити гірше, іноді значно:

• Відкриваєш глянуть виписку — натисни ще додатково на кнопку після відкриття
• Або потяни праворуч, але там мікс з кількох аккаунтів — і це працює тільки у верхній частині екрану!
• Хочеш докинуть грошей з ФОПа? Тягнися пальцем в самий верх екрану, туди, біля суми; так, треба перехопити пальцем
• Тупиш в екран чекаєш поки побачиш результати і хоч оновити? Вгадав, схопитися і потягнути можна тільки за наявну транзакцію. І тільки на верхньому екрані, бо якщо зайти в транзакції — цей рух просто закриє їх.
• Хоч подивитися, де скільки грошей (вибачте шо я такий мажор, що в мене більше 1 картки)? Скроль крізь кожну картку, більше нема екрана огляду всіх рахунків.
• Ще краще, ти хочеш дізнатися, що там з грошима на валютній картці ФОПу? Ооо, пацан, давай: натисни у верхньому лівому куточку, потім вибери “ФОП” в самому низу екрану, а потім ще поскроль (тільки у верхній частині екрану) до необхідної валютної картки (тут я реально радію, що в мене немає єврової ще додатково хехе).

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

Що мені цікаво — чому вони не збирають фідбек у користувачів? Якщо перемкнутися в старий інтерфейс, нема питань “що сподобалося/що ні”, тільки висить здоровезний задовбуючий напис “перемкнися в новий інтерфейс!” Це хуцпа чи підсвідомий страх, що фідбек не буде загально-позитивним?

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

Дуже надіюся, що Монобанк зможе прожувати цю революцію і виправити хоч частинку цих юзкейсів, бо зараз відчуття від інтерфейсу, що його зробили не для користувачів, а для самої компанії.
Please open Telegram to view this post
VIEW IN TELEGRAM
Apple PCC

Я тут розгриз блог-пост про епловський Private Cloud Compute, і, чесно кажучи, підхід до проблеми вражає. Якщо ви не в темі — Епл робить сервіс для свого Apple Intelligence (отут я ржу капець), і щоб все було дуже приватно і сек'юрно. Але ж якщо просто зробити сек’юрний та приватний сервіс, як це довести? Є кілька проблем з доведенням цього факту:

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

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

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

2. Кожен сервер перед закриванням фоткається з високою роздільністю.

3. Коли сервер прибуває в датацентр, “we perform extensive revalidation” перед встановленням.

4. Для завантаження використовується Secure Boot, який завантажує тільки підписаний софт.

5. Інсталяція софта залишає записи десь? Це я так зрозумів фразу “approved for that specific PCC node”.

6. Що цікавіше, використовується Secure Enclave — так само як в айфонах. Забезпечує сек’юрність і незмінність розділу, де зберігається ОС та моделі. Стежить, щоби завантажений код неможливо було змінити чи підмінити під час виконання. Забороняє JIT, щоб новий код не виникав сам по собі.

7. Операційна система — це власне обрізана iOS/macOS, зі значно зменшеною поверхнею для атаки: наприклад, там немає ні ssh, ні будь-яких інших засобів віддаленого керування.

8. Увесь (новий) код написан на Swift’і, щоби не було питань із безпекою доступу до пам’яті.

9. Під час кожного завантаження Secure Enclave генерує новий випадковий ключ для шифрування диску (на який попадають користувацькі дані) і не зберігає цей ключ нікуди. Таким чином можна бути певним, що після перезавантаження дані на диску прочитати буде неможливо.

10. Окрім цього, кожен процес виконується у sandbox’і, з увімкненим Pointer Authentication Codes — це система, яка заважає підмінювати адреси функцій і адреси повернення (тобто крек для фотошопу в такому середовищі не спрацює 😁).

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

12. Очевидно, e2e шифрування зробити неможливо — бо сервісу потрібно мати доступ до власне даних. Але кожен запис шифрується публічними (верифікованими під час виконання айфоном) ключами ноди PCC — таким чином жодна прокся/балансувальник їх прочитати не можуть. [Це вони https описали чи шо? Трохи не вистачає порівнянь із загально прийнятими практиками]

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

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

15. Нагадаю, немає ssh чи ще чогось типу RDP — підписування коду і Secure Enclave теж завадили би запуску зайвого коду, але інтерактивний шел давав би значно більшу поверхню для атак на систему.

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

17. Кожен реліз софта для PCC публічний! Бінарна збірка мається на увазі, не джерельний код.

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

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

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

Найгірше те, що для спасіння кожен комп’ютер треба перегрузити руками у safe mode, і видалити .sys-файл. Фізичний доступ потрібен, короче, компанії з контракторами з Індії трошки в паніці. 😁

Ну й тут є два цікавих вектори: перший очевидний, про технології — в тебе така величезна відповідальність, а оновлення розкатуються одразу по всіх? Клауд Метабейза, малюсенької компанії в не-business-critical індустрії, і той обережніше оновлюють (протягом 3 днів). Тестування нікуди не годиться теж, як провтик такого левела (це ж не 1% користувачів постраждав) взагалі міг релізнутися? Дуже свіжа атака була, да? Добре, а чому взагалі код читання має таку дитячу помилку? Ниття про п’ятницю, доречі, нерелевантне, бо проблема почалася у четвер навіть по часу Каліфорнії.

Короче технічно це лажа на такій кількості рівнів, що боляче дивитися. Cybersecurity my ass, тупо якийсь гербалайф.

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

Так от, в нас є монополія, від гербалайфу — компанії, яка не дуже може довести свою корисність (тобто отримати користувачів від нерегульованих індустрій). CEO цієї компанії відомий тим, що в час його бутності CTO McAfee вони випустили апдейт, який одномоментно вбив більше компів з Windows XP, ніж будь-який вірус. 🤣 Апдейт вилітає централізовано, абсолютно без будь-яких перевірок, і вбиває бізнес-активність величезної частки економіки більше аніж на день (моєму колезі відмінили суботній рейс через краудстрайк)…

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

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

Бо на сам CrowdStrike надії мало. Він за участь у рішенні проблеми своїм співробітникам і партнерам видав ваучери на $10 на UberEats. 🤣