solovyov.net

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

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

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

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

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

Тож це не дурня, а стратегія!

(@ tg)

Певен що ви чекали цього з нетерпінням, навіть якщо не знали. 😁 Новий випуск 1-2-3 Techno - з Максом Іщенко! Дивіться, поки гаряче! 😁

(@ tg)

Ви питали — ми писали. 😁 Чи не питали, але як би там не було, в нас новий випуск 1-2-3 Techno, на цей раз із Всеволодом Соловйовим (не співпадіння). Початок вийшов технічний, а продовження зовсім ні, тому цікаво повинно бути кожному.

Ладно, ви й так знаєте, що я не по вступам, а по суті, тому просто йдіть та дивіться. :-)

(@ tg)

Амазон у 2016 році відкрив свій перший магазин Amazon Go, де можна на вході відсканувати свій QR-код в апці Амазону, набрати, чого ти хочеш, а на виході з тебе зніме грошей автоматично. Нічого не треба сканувати, перекладати туди-сюди, короче, кайф.

Можна було, тому що вони закривають “Just Walk Out” — власне оцю технологію. І це супер-смішна історія, тому що я добре пам’ятаю, з якими фанфарами все це відкривалося, розпізнавання відео, AI, ML, терміни летіли у всі боки, у них навіть є (поки ще працюючий) сайт з описом, justwalkout.com — де вони нічого не кажуть прямо, але “наші технології перевернуть життя ваших покупців”, і все таке.

Але от стаття про закриття нам каже:

Though it seemed completely automated, Just Walk Out relied on more than 1,000 people in India watching and labeling videos to ensure accurate checkouts.

Шось я волаю як сич вночі. Десь пан Безос недодивився і на Амазон напали традиційні інновації аутсорсінга на дешевих працівників. 🤣 А як ми вражалися цій історії, коли вона тільки відкрилася, “майбутнє поруч”, капееець. Шулери, блін. 🤣

(@ tg)

Не знаю, наскільки ви знаєте базу, на якій побудован увесь веб, але 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 бод (якщо пощастило) економили кожну краплю, тому менші числа авжеж були дуже в нагоді, а потім всі розлінилися і перестали економити. 😅

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

(@ tg)

Програмісти неефективні

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

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

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

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

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

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

Не розумію, як це виправляти. Робити програміста міні-продактом свого напрямку? Ну то наче в метабейзі намагаються, пишеш proposal’и різні, такий весь в темі, але ось мене не спасає. Короч, рецептів не знаю, але спостереження тримайте. Можете постежити за собою, або за своїми програмістами. 😁

(@ tg)

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

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

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

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

(@ tg)

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

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

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

(@ tg)

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

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

Спрацювало. Наче й тупе місцями, але ж іноді яке корисне! 😁

(@ tg)

На ДОУ вийшло інтерв’ю із розробником Острова, і він там влучно формулює:

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

I like his vibe. 👍

(@ tg)

Будемо вважати, що не хотів вам псувати робочу п’ятницю, але якщо ви ще не дивилися — то вийшов новий випуск 1-2-3 Techno, з Олесем Петрівим, кофаундером і СТО Reface. Ну ви знаєте ріфейс, так? 😁 В будь-якому разі, вийшло цікаво — а ще всередині є прикольний експеримент з Віксом, пишіть, як воно вам. :)

(@ tg)

Вчора Розетка оголосила про те, що доставка у їх власні магазини буде за гроші, і рОзПоЧаВсЯ сРаЧ (шкода що телеграм не дозволяє кольорові літери, хех).

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

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

Уявімо, що маржа в Розетки на покупку буде 30% (насправді я хз яка вона, і від категорії залежить, і від балансу тих категорій, але яка різниця, візьмемо по середньо-верхній планці). Тобто із 700 грн це в середньому (поділимо тупо навпіл, в мене нема їх даних) виходить 700×0.3/2 =~ 100 грн. Питання — чи віддавати третину доходу (а фактично маржа - це дохід, все інше — то гроші постачальника) це норм? Може здатися на перший погляд, що так, але тільки для тих, хто не вміє рахувати гроші.

А гроші у всіх випадках рахуються просто. Ось у нас є 100 грн з однієї сторони, а ось наші розходи, розділені на кожне замовлення — з іншої. Витрати на маркетинг, на офісних співробітників (бо робітники логістики сидять в отіх 35 грн доставки), на AWS, на шо взагалі ви можете придумати. І питання таке: чи ми виходимо хоча б в нуль?

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

Тому вони зробили обмеження від 200 грн взагалі — дешевше тепер не замовиш, бо це банально дорого з їх костами. Ну і тому доставка до 700 грн за гроші — намагаються хоча б вийти в 0 на цих замовленнях. 🤷‍♂️

Я вам зара ще цікавішу історію розповім, якщо піти подивитися ціни на доставку в Касті, там є такий момент:

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

  • УкрПошта - 10 грн + 2% від суми переказу;

  • Відділення Нова Пошта - 20 грн. + 2% від суми переказу;

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

Підняти всім — це найпростіше, але здається нечесним: люди, які платять карткою і так ведуть себе краще (більший відсоток замовлень забирають), а тут ще й спонсорують free-loader’ів, хаха. Підняти тільки на доставку з післяплатою — здається виглядає незрозумілим. А віддати комісію прозоро — не тільки працює так само, як у випадку C2C відправок, а ще й перекладає відповідальність за неї на службу доставки. Типу ось, дивіться, це все вони, ми тут ні до чого. 😙

For the record: я був у лагері “вивалимо комісію на клієнта”. Рік у Нідерландах не пройшов задарма. 🤣

А шо Алі? Яким чином Алі доставляє хлам по баксу на шару? Є два пояснення, капіталістичне та раціональне. Капіталістичне: вони ближче до виробництва і тому собівартість хламу по баксу взагалі 1 цент, в них дешевше упаковка, в них більше скейл, вони можуть собі дозволити защімити службу доставки, і в результаті мають кращу юніт-економіку і можуть собі дозволити. Раціональне: уряд Китаю розглядає економічну експансію як важливий елемент впливу на світ і тому втупу дотує доставку. 😁

P.S. Маржу Розетки я вигадав з голови, але порядок вірний, і уточнення сильно ситуацію не змінить.

(@ tg)

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

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

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

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

P.S. Якщо у вас є Твіттер, то можна лайкнути/рт англійську версію цієї історії. 😁

(@ tg)

Tesla

Подивився два огляди Cybertruckʼа: від Джейсона Каміси та від Тротл Хауза. Другий кращий як огляд машини, перший кращий як огляд технічної складової. Ситуація в принципі як і з попередніми теслами: це інженерна перемога і така собі машина.

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

Чому перемога: після другої світової вся індустрія активно переходила на те, що зветься цільним корпусом — тепер вся машина стала рамою для встановлення обладнання. Це проти рами під кузовом — коли рама зварена окремо, а на неї зверху сідає корпус. Це, доречі, причина, чому машини з 30-х років такі різноманітні — машина і корпус були окремими речами і це давало змогу жити цілій індустрії компаній типу Ghia, Touring та Zagato.

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

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

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

Інша історія про те, що автовиробники вже 30 років відносно активно намагаються перевести внутрішню систему автомобіля на 48 вольт, тому що 12-вольтова — неадекватна сучасним вимогам, кабелі стають занадто товстими (і дурка, що під капот поліз, не бʼє достатньо сильно, ггг). Останні роки то один, то інший повідомляє про перемогу, що частина мережі переведена, але надійно це зробити не вдається нікому. Тому що система чинить спротив: всі підрядники все роблять під 12 вольт і не хочуть витрачати дурні гроші щоби потім заробляти стільки ж.

То Тесла очевидно когось змусила, на когось забила (схоже що все більше і більше вертикально інтегруються?), і зробила повноцінну 48-вольтову підсистему. І це жир, бо останній перехід (з 6 на 12 вольт) був у 50-ті.

І кермо by wire. Літаки так літають з 80-х, а всі машини досі залізні рейки крутять і всі модні речі просто хитрожопими рейками робляться. А коли ти робиш гостру у керованості машину, вона виходить нервова на трасі.

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

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

Трошки шкода що місцями підхід «from first principles» заважає їм зробити хорошу машину. :)

(@ tg)

Як там у вас, продуктивна п’ятниця? Давайте це виправимо новим випуском 1-2-3 Techno! Мені важко рекламувати кожен випуск, бо ж не можеш сказати “от раніше було так собі, а тепер ого-го”, раніше теж все добре було, але… ну ви кароч зрозуміли, я прям чекав публікації цього випуску з нетерпінням. :)

(@ tg)

Оууу, Apple анонсували зміни для апстора у ЄС і це жесть. Рівно так само, як у рішенні суда з Epic, поводять себе рівно як заповідав Макіавеллі у книжечці: ми вам відкриваємо можливість використовувати інші платежні сервіси, але будь ласка комісію заплатіть все одно. Ну, 3% ми скинемо за банківські збори (які ви іншому платіжному сервісу заплатите).

Я не дуже розумію, чому це прокатило із судом США (чи прокатило взагалі? Там якісь трабли з апеляцією від Епіків наче?), але з комісією ЄС, мені здається, не вийде. Це однозначно проти сенсу Digital Markets Act.

Цікаво скільки часу пройде до офіційної реакції ЄС. 😁

(@ tg)

Тут пан Гергелі порахував гроші Ілона і каже що все пропало: Твіттер заробляв 5 млрд, а зараз заробляє 2.5 млрд, а економії виходить 1.5 млрд ($230k медіана * 6000 звільнених). Але в коментах наколупали, що судячи з останнього публічного звіту, економія скоріш десь біля 3 млрд.

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

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

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

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

Weird. 😵‍💫

(@ tg)

У моєму дитинстві ми постійно їздили на море на турбазу Укрчерметавтоматики на Утлюцький лиман. Це той, що за Бірючим островом, з максимальною глибиною в 3 метра, напевно. Схема була така: щоби покупатися, ти береш і йдеш півкілометра в море, тоді буде з півтора метра глибини, там і покупаєшся. 😁

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

Баржу потім на метал порізали, і фоток в нас не лишилося (жах!), такий пам’ятник загубився… Але що гріє душу — тепер для когось А-50 буде такою баржею. 😁

(@ tg)

A/B тести

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

Але відноситися до них як до святих тек^Hстів — це здається шляхом в продукт для нікого. Або ні для кого, як вам більше подобається?

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

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

Врешті-решти, тестована зміна чи ні — рішення про її випуск на совісті конкретної людини. Просто з ростом компаній в якийсь момент її менеджмент починає боятися, що розуміння напрямку розвитку у працівників може бути в дуже різному стані, наказує всі зміни пропускати через A/B тести, це потроху стає релігією… І в якийсь момент ми наблюдаємо сторінку товара в Амазона, яку хотілося б якось освіжити, але не можна — святий аб-тест забороняє.

Мораль: A/B тест — не панацея, хоч і хороший інструмент.

(@ tg)

Кому ютуб ще в п’ятницю не показав, вийшов новий випуск 1-2-3 Techno, більшою частиною про діджиталізацію у нашій державі. В мене було 0 знань, що там у нас відбувається, і тим цікавіше було послухати, тож велкам! :)

(@ tg)

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

Було дивно закриватися, маючи product-market fit. Проблема була в тому, що перевізники не хотіли або ж не могли працювати 100% в білу.

Імхо, це результат зіткнення “програмістського” (for the lack of better word) світогляду з реальним світом. Ну типу цей бізнес побудований на такій кількості перетинів різних проблем, що працювати вбілу не тільки дорого, це ще й аналог італійської забастовки.

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

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

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

Такоє.

(@ tg)

Знаєте, як відчути, як в людини, яку ти поважаєш і цінуєш, яка очевидно добилася успіху в своїй області, є власні переживання, сумніви та insecurities?

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

Так от, Майк зіграв свою партію, а потім слухає оригінал — який значно простіший — і каже: this is why they are rich and famous and I'm just a fucking prog guy.

Кожен — це просто людина. Ну, окрім тої гніди з оркостану, авжеж.

(@ tg)

Якщо ви раптом сидите нудьгуєте ранком суботи, то вчора вийшов новий випуск 1-2-3 Techno, із Євгеном Ковалевським! Ми більшу частину часу проговорили про його досвід організації eSport івентів, вийшло дуже драйвово, тоже велкам :)

(@ tg)

zip та gzip обидва використовують алгоритм Deflate для стиснення файлів. Уявіть моє здивування, коли я сьогодні отримав .tgz на 165 кілобайт і .zip на 1.5 мегабайта. Подумав над причинами, знайшов що у поставці Мака є zipinfo, і зацініть що мені каже zipinfo -v dump.zip:

The central directory is 376417 (000000000005BE61h) bytes long

Точно! Чим .tar менш зручний, аніж .zip - в нього немає центрального списку файлів, і тому для пошуку одного файлу треба перебирати архів повністю. Але коли в твоєму архіві 3 тисячі файлів — це грає на руку, немає оцих окремих 376 кб списку файлів. Ну добре, а куди ще мегабайт подівся?

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

> ls -l --no-user --no-time --no-permissions dump.*
 89k dump.tar.bz2
100k dump.tar.xz
165k dump.tar.zip
165k dump.tgz
1.5M dump.zip

Мораль: підстава приходить звідки не чекаєш.

(@ tg)

1-2-3 Techno: Віктор Турський

А в нас новий випуск! Якщо ви не знаєте пана Віктора: він один із співзасновників WebbyLab, але після десятиріччя вирішив покинути операційну діяльність і пішов інженером до Google. Це, авжеж, оминає всі нюанси, із яких складається людина, то я не буду старатися - йдіть просто подивіться випуск, на цей раз ми ще й бізнес-проблеми зачепили. :)

(@ tg)

А я ж казав

За останній час якось додалося підписників (за 2 тищі вже, нічого собі), і наврядчи ви всі скроллили по старим постам, то давайте я вам нагадаю про найвдаліші*, щоби було що почитати (не все ж тіктоки на робочому місці дивитися, га? 😁):

А далі розпочалося вторгнення… Вистачить, короч, вижимки до 22 року. :)

* найвдаліші з моєї точки зору, авжеж, не якісь об’єктивні показники. :)

(@ tg)

Драма з OpenAI продовжується!

Я прокинувся сьогодні під новину про те, що Сатья Наделла (CEO Microsoft) затвітив “Сем і Грег будуть працювать у макрософті!”

Потім лізли всілякі новини за минулий американський день, а десь о третій (за Києвом) Ілля Суцкевер (який, нібито, але дуже ймовірно, власне ініціював звільнення Сема) написав твіт “ой переживаю за свою участь, в мене ніколи не було наміру зашкодити OpenAI”, типу це не моя відповідальність і взагалі я тут збоку стояв. Явно не з Каліфорнії чувак, тому головні новини ще чекаємо. 😁

Але справжня драма вилізла буквально півгодини тому — 505 із 700 співробітників OpenAI вимагають від ради директорів звільнитися і привести Сема назад, або вони всі разом йдуть працювати до Сема в Майкрософт. А номер 12 підписавшийся — це Ілля!

Йуху, 11-А клас! Хоча жартую, всі наші драми і близько не стояли. 🤣

P.S. Світ точно змовився не дати спокійно попрацювати. 👿

EDIT: Поки що найкраще пояснення: https://x.com/williamlegate/status/1726715671487156554

(@ tg)

Ви бачили як Сема Альтмана вигнали з OpenAI?! З формулюванням “не завжди був щирим в спілкуванні із радою директорів”, ніфіга собі! При тому голову ради директорів, Грега Брокмана, навіть не покликали на зустріч — типу проголосовали звільнити його з ради перед звільненням Сема:

Mr. Altman was asked to join a video meeting with the board at noon on Friday and was immediately fired, according to Mr. Brockman. Mr. Brockman said that even though he was the chairman of the board, he was not part of this board meeting.

Ну це жесть як є. З цікавого - Рід Хофман пішов з ради у березні, бо заснував свій власний AI-стартап, тому в борді зараз всього 4 людини (там в пості є).

Весь мій твіттер переживає за те шо VC козли і не треба брати в них гроші (з іншого боку, ніякого OpenAI без диких грошей і не було б). Мені здається, що причина, коли ми її дізнаємось, буде ну дуже facepalm-inducing. 🤣

Здавалося б, OpenAI почав відриватися від конкуренції з такою швидкістю, що вже догнати було нереально. Хто б міг їх перемогти, окрім них самих? Прийшлося діяти! 🤪 Подивимось, авжеж, як воно буде далі, але як же ж цікаво. 😁

(@ tg)

Епл у новій макосі зробила абсолютно гнуснючий малесенький індикатор перемикання розкладок, який показувався у курсора кожен раз, як ти перемикаєш розкладку — такий, як на картинці. А я це роблю прям ну дуже часто (бо це всього одна кнопка) — і індикатор бісить неймовірно. Але тепер є фікс, ура! Отакий:

sudo mkdir -p /Library/Preferences/FeatureFlags/Domain
sudo /usr/libexec/PlistBuddy -c "Add 'redesigned_text_cursor:Enabled' bool false" /Library/Preferences/FeatureFlags/Domain/UIKit.plist

І перезавантажитися. І все, нічого нема на екрані. Кааайф. Дякую, пане Євгене, за лінку. :)

Зображення

(@ tg)

Збираюся зробити вам боляче, на кшталт того, що язик відпочиває на піднебінні, тільки значно гірше. Read on, коли готові. 😁

Сакади (від французького saccade; «ривок», «поштовх») — швидкі, суворо узгоджені рухи очей, що відбуваються одночасно і в одному напрямку.

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

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

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

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

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

Так от, виходить, що мало того, що пам’яті довіряти не можна, бо вона іноді схильна додумувать, так і очам теж не можна, бо вони, буває, бачать неіснуючє.

(@ tg)

Новини! Тепер в мене є подкаст на ютубі ДОУ, зветься 1-2-3 Techno. Вийшло, здається, прикольно: обговорюємо історії з життя (технічні історії, авжеж), дуже живо і не нудно. Перший випуск — із Вірою Ткаченко, CTO MacPaw. Дивіться і діліться враженнями. :)

P.S. Хто вгадав, звідки назва, той дід. А хто ні — в того молоко на губах не обсохло. 🤣

(@ tg)

Щось я трошки волаю з того що в Go 1.22 буде рядкова тупізація (sic):

mux.HandleFunc("GET /path/", func(w http.ResponseWriter, r *http.Request) {
  fmt.Fprint(w, "got path\n")
})

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

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

(@ tg)

Зимова гума

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

Є повір’я про зміну резини 15 жовтня, або там 1 листопада, чи ще колись по календарю. Це астрологія, насправді, бо який ще сенс у конкретних датах?

Інший варіант — це про “температура впала нижче +10”, або (що значно краще) “середньоденна впала нижче +7”, це вже трохи про фізику. АЄОА: літня резина значно краще справляється із дощем, аніж зимова (мова, авжеж, про типові варіанти, якщо у вас на літо Pirelli PZero Nero, то нашо ви це читаєте), особливо перегріта зимова. І тому дощик при +8 на зимовій гумі — це не найбезпечніше, чим можна займатися в Києві. 😁

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

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

Для того є я! 🤣 У 2012 році я записався на любительське ралі на своєму Cooper S (бачте S? це ж Sпорт! 😁), а прям перед ним бахнув мороз, і я швиденько в ніч перед змаганням змінив гуму на зимову. Листопад, сонечко, на вулиці -2, в мене нова зимова гума (і не гамно якесь, не на ланос же ж купляв, забув, правда, яка саме).

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

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

(@ tg)

Хочу вам розповісти за “ДрукАрмію”. Це дуже крута ініціатива з 3д-друку різних невеличких конструкцій, які потім використовуються в армії і навколо. У них є лендінг з прикладами і розрахунками економії. В мене ще є розповіді про приблизно такі самі гроші, але про дрони — проте не вистачає даних, щоб тут описати.

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

Тож якщо ви про це не чули, або не задумувалися, то може це саме час. 😁 Бо кількість запитів на друк росте куди швидше кількості друкарів.

(@ tg)

Це ж кайф, коли компанії релізять щось неординарне? Лаова наприклад зарелізила макро-об’єктив для того щоб знімати від 10x до 50x. В даному випадку цифра означає відношення реального розміру об’єкта до його проєкції на матриці.

Тобто звичайні макро-об’єктиви роблять 0.5x-1x, іноді 2x, а тут можна до 50x зняти. Це фактично мікроскоп — для таких зйомок часто і купляють мікроскопні об’єктиви, тільки вони ізі коштують 3-5 тищ доларів за одну штуку, а тут набір (бо це не об’єктив, а фактично конструктор об’єктивів) з 4 штук коштує півтори тисячі і підходить будь-якій системі. Кайф просто. Ось огляд, якщо цікаво.

(@ tg)

Продовжуючи тему Телеграма, на еПравді вийшло розслідування того, як Телеграм заробляє (спойлер: втрачає, а не заробляє). Добре покопали, коли все зведено до купи і з графічками (дякую комісії по цінним паперам США за hard data 😁), і дійсно здається, що без плодотворної співпраці з найгнуснішими людьми світу (керівництвом москалів) воно б не працювало…

Дотичним, але дуже показовим доказом є вихлоп голови комітету безпеки рф, який каже “ого, у воцапа з’явилися канали, треба його заборонити!”

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

(@ tg)

Телеграм релізнув сторі для каналів, і зробили вони це, мені здається, максимально underwhelming. Замість того, щоб зробити з їх допомогою кращий діскавері (не знаю, показувати їх контактам підписників, чи може ще якийсь сірий паттерн, ггг), вони просто додають до кожного каналу ще один канал. Нууу м’яко кажучи не дуже зрозуміло, навіщо воно треба.

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

(@ tg)

Макс в останньому подкасті скаржиться на якість кода Джинні (спойлер: трабла в занизькому рівні абстракцій місцями, нічого складного), “занадто мало за ним стежив”, і таке інше (послухайте сам подкаст для подробиць, там недовго).

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

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

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

Питання: що робити, коли наняв людину для задач, яких ти сам не вмієш? Умовно кажучи, як я прийшов в Касту — Андрій (CEO Касти) не вмів програмувати, не вмів керувати розробкою, і не знав, як виправити проблеми свої, що робити в такому випадку? Імхо, щотижневі 1-1 із зануренням у проблеми, методи їх рішення, і просто навчати. Навчання потребує від того, хто навчає, більшої усвідомленності дій, і дозволить з однієї сторони виправити напрямок, якщо треба, а з іншої — відкриє слабкі моменти/балаболок/тощо.

Ми з Андрієм такого не робили, йому зі мною просто пощастило. 😁 Але ж не кожен така цукерочка. 🤣

(@ tg)

Там 21 Джава вийшла, якщо ви не бачили, і в ній величезна зміна — віртуальні треди тепер глобально доступні. Це прям фантастична новина, на мій погляд, тому що можна ввід/вивід та різного рода конкаренсі ефективно використовувати без асинхронного сміття типу колбеків етц. Це значить нормальні стектрейси (а не як після Netty), і ефективніше, ніж зі звичайними тредами, планування роботи, бо вони N-to-M — тобто N віртуальних тредів виконуються на M реальних, це значить в нас є і параллелізм, і рівночасність (concurrency).

Це кайф взагалі, і дуже сподіваюся, що ком’юніті і Джави, і Кложі займеться цією двіжухою і набудує різних покращень життя навколо. В принципі це можливість побудувати core.async без всієї магії всередині. Гм. 😁

Рон Преслер, лід розробки віртуальних тредів, дуже давно почав цим займатися, ще років 10 тому зробив quasar/pulsar — це власне імплементація грін-тредів як бібліотеки.

Кароч дуже зацікавлений у юз-кейсах, які ця двіжуха відкриває. 🔥

P.S. Тим часом у коментарях на HN срач за те, що для інтерполяції рядків буде синтаксис "\{var}", а не "${var}", як в інших мовах. Поверхневість колег по цеху мене іноді просто вбиває.

(@ tg)

У fwdays тепер є новий подкаст, зветься A&B Show (це архітектура та бекенд), і в першому випуску Єгор (ведучий подкасту власне) вирішив спростити собі вибір людини для інтерв’ю — тобто записав його зі мною. 😁

Він не дуже уважно стежив за моїми виступами (shame on you, Єгор! 🤣), і тому прийшлося розповідати більш грунтовно, ніж я очікував. Тож якщо вам цікаво, велкам подивитися першу частину (друга буде через кілька днів/тижнів/побачимо): https://www.youtube.com/watch?v=Xs6ED_v9TzY

(@ tg)

Я позавчора спав на невдалій подушці і потянув собі шию і шось там в лопатці (talk about privilege 🤦‍♂️). Спочатку було неприємно просто, а сьогодні о 5 ранку прокинувся, бо вже капець боляче було. І шо, коли ти о 5 прокидаєшся, то вільного часу багато, я вже і рілзи до кінця додивився, і твіттер двічі прочитав, тож чимось занятися треба — і я пішов шукать вправи, як полікувати той біль.

Ютуб повний всіляких “візьмить рушничок і отут тягніть по діагоналі” і схожих речей, які я чесно виконував і нічого не добився. Аж після обіду зайшов дещо корисне переглянути (доповідь про Electric Clojure), а мені ютуб запропонував відос, де на тамбнейлі була лопатка, а не шия.

І кароч я попав на канал, де чувак пояснює, що відбувається, з відсилками на наукові статті (відео минулорічне і статті теж минулорічні!), кайф. Але самий кайф в тому, що запропоновані вправи прям критично добре вплинули на мій стан. Настільки, що хочеться кудись про це кричати, тож ось кричу вам. 😁

(@ tg)

Чи можна вчорашні події розглядати як символ суттєвості кроків, які Україна зробила для здобуття перемоги? 🤣 Здається, що чим більше тиску буде на полі бою, тим цікавіше будуть розгортатися події на росії. Вони вже почали святкувати 24.08 в себе закриттям офісних центрів, червоної площі тощо. 😁

Тому дуже хочу подякувати всім, хто захищає нашу країну! І вітаю всіх із Днем Незалежності!

(@ tg)

…продовження поста про заміну 1C.

Процеси

Оце цікаве місце. Очевидно, що якісь зміни повинні вміти тригернути інші зміни, або якусь інтеграцію, абощо. Можливо, тут є сенс подумати над інтерфейсом а-ля Yahoo Pipes, або Zapier/n8n/Huginn/шо там ще є на ринку. Тобто готові шматочки, які можна комбінувати. Це те, що робить Corezoid, як я розумію, а ще в мене є знайомі в Нідерландах, які будують Stekz, і я думаю, що таких речей по світу багато.

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

Модулі

Найскладніше. Я, нажаль, не дуже розуміюся на тому, як в 1С (наприклад) інтегруються різні рішення від різних контор (підозрюю що як і всюди, за допомогою програмістів і з купою нервів).

Але от я глянув поверхнево на Odoo, опенсорсний ERP, який регулярно проскакує у статтях як заміна 1C. І чомусь мені здалося, що ядро в нього мало не просто веб-фреймворк, на якому будується купа модулів, які інтегруються чисто за рахунок того, що їх пише одна компанія. Там всередині моделі (тобто, ORM, всі діла), конкретні для цього модуля, все в кращих традиціях ООП: дуже конкретно і по ділу. Не зрозумів поки що, чи є там якісь кльові додаткові абстракції, щоби модулі під конкретно Odoo взаємодіяли краще, ніж кастомно написаний софт, але здалося, що ні. І стандартне страждання в обговореннях Odoo — в нього немає української бухгалтерії, а всі існуючі модулі зав’язані на використання стандартної.

Як це обійти — дуже цікаве питання. Можливо, дуже високорівневі абстракції спасуть ситуацію: типу оцей модуль потребує колекції документів в такому форматі, і ти йому в’юшкою і джойнами організуєш і віддаєш (тобто відривання інтерфейсу роботи з данним від власне зберігання даних). Тут в мене настрій коливається від “модулі нічого не повинні знати про зберігання” версус “модулі повинні абстрагувати зберігання, а назовні виставляти інтерфейс, який потім виглядає як таблички”. Оце друге здається складнішим для імплементації, але перспективним з точки зору збереження зворотньої сумісності. І перетинається дуже з API доступа до даних, куди цікавіше було б вміти тикатися в інтерфейси, а не прямо в сирі дані — тоді є шанси апгрейдити зберігання, не ламаючи зовнішні інтеграції.

The End

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

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

(@ tg)

Я вже якось торкався теми заміни 1С’у, а тут мене нещодавно тригернули, і в мене чухається знов за це поговорити. Те відео в двох словах: 1С це платформа для автоматизації бізнесу, яка маскується під систему бухгалтерського обліку. Так само, як SAP маскується під ERP, а Salesforce маскується під CRM. Вони всі заходять з різних сторін, результати виходять трохи різними, але тим не менш їх мета одна: стати хребтом бізнесу, щоби не бути заміненими ніколи.

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

Сховище даних

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

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

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

І, авжеж, API для забирання/додавання даних треба прям повноцінний і адекватний.

Базовий інтерфейс

Загалом, більшість підприємств починають автоматизацію бізнесу з Excel/Google Spreadsheets, тому ця абстракція здається дуже корисною. З іншого боку, здається що інтегроване щось на кшталт Metabase було б екстремально корисним, бо будувати дешборди в Ікселі можливо, але воно трошки занадто громіздке виходить.

То от здається, що якась абстракція, коли на канві можна розташувати графічки, таблички чи там інпути — корисне. В Decipad от щось таке роблять, заодно звертає на себе увагу, що в таблички замість A1/J66 є нормальні назви в колонок.

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

Інтерфейс для користувачів

При тому дати таблиці всім — не звучить як дуже безпечний і зручний механізм. Якщо ти просто продаєш каву, заповнювати табличку здається не дуже адекватним. 😁 Мені дуже подобається, що будує Retool, такий собі no/low-code генератор інтерфейсів. Чесно кажучи, мені не дуже ясно, наскільки далеко можна зайти з no-code і наскільки воно потрібно, заходити далеко — але в ідеалі якісь не дуже складні, але тим не менш функціональні інтерфейси повинні бути доступні для нормального користувача. Нормального у сенсі що Іксельні абстракції цій людині доступні. :-)

P.S. Продовження нижче.

(@ tg)

Прочитав тут історію про те, як Макс Левчин розважався, коли був СТО PayPal’у. Історія цікава, чувак очевидно був капітальним задротом і в якийсь момент не стримався і зробив крутий солюшен, щоби нерви собі полоскотати. :)

Мене, правда, більше зацікавила не основна сюжетна лінія, де він захоплюється криптографією, і робить круті штуки (хоча й змушує трохи синдром самозванця підняти голову, мене в такому віці більше цікавила Diablo 2 😁), а оточуюче середовище. А конкретно прохідна ремарка про “automated deployment script copied shard files to their destination”. Події, нагадаю, відбуваються більше 20 років тому, а в чуваків сетап краще, ніж часто зустрічається зараз.

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

(@ tg)

Знаєте історію, як при презентації дропбокса на HN хтось написав комент “це ж тривіально зробити з FTP + curlftpfs + SVN”? Очевидно, що людині важкувато помітити проблему, коли вона в деталях на ній розуміється.

Це я, literally. Коли мій одногрупник якось показав Дропбокс на 6 курсі, я такий — Сергію, ну і нафіга це? Я ж он фактично те саме маю, осьо диви, лінка — а файл у мене на SliceHost’і лежить (хто знає той знає ггг).

Згадується ще Emacs — а за IDEA платять, мій сетап проксі — а за ngrok платять, і напевно можна багато чого ще вигадати. :)

Це я сам собі пост пишу, напевно: коли щось — тривіальне, але окрім тебе ніхто його не сетапить, то це натяк на потенційні гроші. 😁

(@ tg)

Ого, TwinSpark.js в топі на Hacker News! А підіть апвотніть пліз, якщо вам не шкода, нехай ще трошки повисить. 😁

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

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

(@ tg)

Знаєте, чому Emacs — крутий? Не тому, що йому 30 років, і не тому, що він навіть кавоварками може керувати, і взагалі не тому що оті всі жарти які придумуються. Його головна якість не дуже очевидна, якщо не занурюватися в тему глибоко.

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

Імакс працює зовсім не так! Скажімо, є функція find-file, яка відкриває файл. Хочеш розширити її функціонал? Заміни її своєю! Тобто манкіпатчинг, або, як то кажуть, molding — створи свій імакс для себе, заміни все що хочеш тощо. Більше того, вона ж на ліспі написана, можна піти подивитися сорси, та замінити будь-яку з тих функцій, що використовуються всередині. Endless possibilities.

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

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

Тим не менш, це саме те, що дозволяє Emacs’у бути чим завгодно. Якщо хочте, Emacs — це 1С текстових редакторів. 🤣

P.S. Платформа vs фреймворк vs конструктор. Фреймворк — це коли ти заповнюєш певні місця своєю логікою, конструктор — коли збираєш з модулів, платформа — це коли є працююча програма, від якої ти можеш відштовхнутися. В принципі, можна сказати, що Emacs — це ОС, тільки спеціалізована і трошки вище рівнем абстракції.

(@ tg)

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

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

А Іспанія? От вже колиска машинобудування! 😁 Всі інші напевно більше цікаві, ніж вражаючі, раціоналізувати відносно зрозуміло як. Словаччина багато працює над тим, щоб бізнес йшов, Чехія традиційно багата на машинобудування, тому навіть комуністи це до кінця не вбили, з азійськими країнами взагалі жодного сюпризу нема — окрім може Сингапуру, місця наче й нема, а все одно одного порядку із Францією. :)

(@ tg)

Менеджмент і лоу-перформери

Спочатку мав розмову, яка підштовхнула до цього посту, а на наступний день слухав третій випуск Hackers Incorporated — і там DHH озвучив ту саму думку, тільки в профіль.

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

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

Цікавий факт, що не зважаючи на твої переживання, що 1 людина це може чверть команди (наприклад), швидкість команди завжди росте, коли ти прощаєшся з low performer’ом. Бо і не відволікає, і наскільки ж приємніше працювати в команді крутих спеціалістів. :)

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

(@ tg)

Бачили анонс телеграма про сторіз? Там після нього ще є відео, авжеж, але мене зацікавила одна конкретна фраза:

Speaking of channels, they will benefit from more exposure and subscribers: once we launch the ability to repost messages from channels to stories, going viral on Telegram will become a lot easier.

Телеграм намагається вирішити свою основну траблу — абсолютно мертве розповсюдження. В середньому телеграмівський пост отримує на порядок (чесний, десятичний :) більше енгейджмента, аніж твіттерний, — і зі зростанням аудиторії воно не особливо падає. Але при тому більше-менш вдалий твіттерний пост роз’їжджається з дикою швидкістю і більшість інтеракшена в твіттері з не-підписниками.

В телеграмі при тому хоч якось роз’їжджаються тільки пости, які ну прям критично чіпляють почуття людей (тобто те, що JWT відстій — допомогло кільком з вас знайти мій канал 😁), і то потроху. Не знаю, як саме буде репост із канала в сторіз виглядати, але дуже цікаво, що вийде. Телеграм давно вже інструмент для створення приватних соцмереж, якщо вони знайдуть спосіб крос-запилення цих ком’юніті — це буде дуже потужний інструмент.

(@ tg)

У Реддіта повстання ком’юніті у повний зріст. 🤣 Спочатку багато великих сабредитів позакривалися (перейшли в приватний режим), і spez (Стів Хофман, засновник та наразі CEO) почав розповідати у інтерв’ю, що “модератори тримають у заручниках всю ком’юніті”.

Тож великі саби на кшталт r/pics зробили голосування, і в них тепер нові правила — можна постити тільки фотки Джона Олівера. Шкода, але я так і не зрозумів, чому саме його — але r/pics повністю з фотожаб з ним останні дні і це капець, сміюся кожен раз як відкриваю глянути, шо там. 🤣

P.S. Джон Олівер підтримує протест — і в своєму твіттері купу фотожаб напостив. 😁

(@ tg)

Я вчора трохи здивувався тої кількості порад “та просто візьми лібу” для рішення абсолютно простої проблеми. Не тільки здивувався, а посеред стріму навіть розізлився на чувака, який скіпнув все обговорення того на початку і прийшов принести свою мудрість. :)

Я порефлексував на це все і прийшов до двох думок.

Перша, конкретно про ситуацію: уявляєте, як я роблю стрім “дивіться як писати сортування”, і всі радять викликати .sort()? Не здається смішним? :)

Друга цікавіша! Не можна абстракцією собі назавжди закривати розуміння. Мої пости про орми та про фреймворки пам’ятаєте? Це саме воно, хоча я й не зміг цю думку тоді сформулювати.

Власне: не вмієш нічого? Авжеж, візьми фреймворк, зроби щось, а потім почни його розбирати на запчастини. Чому форми працюють саме так? Чи можна краще? Як працює HTTP? Та сама історія з ORM: це гарна стартова точка, але якщо ти на тому старті так і залишишся, то це буде трошки сумно. Авжеж, можливо ти пішов розвиватися у іншому напрямку, і ORM для тебе тільки інструмент для досягнення мети — але тут я напевно про кардинально інші напрямки, а не про “я розвиваюся у зарплаті, а не в технологіях”. :)

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

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

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

Широта світогляду розвиває людину, а запиратися у мушлі — моветон. :)

(@ tg)

Я сприйняв 50 вогників на попередньому пості як сигнал, що таки цікаво, тому давайте, сьогодні на 18:00 за Києвом стрім про написання рекурсивного спуску на JavaScript’і, будемо парсити якусь нескладну мову. Я поки не вирішив яку, то можна в коментарях пропонувати, але вагаюся між шелом (cmd arg1 arg2; cmd “arg 3”), спрощеною версією ікселевських формул (=if(true, 1+2, “ha ha”)), чи там синтаксису для пошуку (типу what and why or when). Хз, пропонуйте в коментарях.
Чистий жс, ніяких генераторів, взагалі все по хардкору. Приходьте допомагати теж, бо я не прям експерт, я просто раз на три роки пишу якийсь простий парсер і втомився кожен раз згадувати, як це робити, тож хочу закріпити трохи в голові. :)

Не забудьте розшарити другу, бо як він інакше дізнається про стрім? :)

(@ tg)

На тижні прийшлося написати невеличкий парсер, для розбору пошукового запиту (ну, знаєте, “шось OR (шось AND шось)”, трошки більш заморочено). І, мушу визнати, це було боляче. :) У мене в житті ніколи не було періоду, коли б я займався парсерами довго, і тому кожен раз я розбираюся, пишу, роблю паузу в кілька років — і приходиться розбиратися мало не з нульовими знаннями, забувається все дуже сильно.

Це дуже бісить! Написання простого рекурсивного спуску (recursive descent) — дуже проста річ, яка повинна бути в арсеналі кожного програміста. Бо відсутність розуміння, що ти це можеш зробити сам — приводить до того, що в потрібний момент ти не побачиш короткого шляху.

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

Але ж його більше ніхто і не прочитає, про парсинг і так тищі раз написано, то може зробити стрім? З написанням простого парсеру на джаваскрипті, без пріоритетів операторів (EDIT: капець, я не знав, чи забув, що в AND та OR є пріоритети - але робити їх не хочу все одно), щось невеличке. Цікаво б таке було взагалі? Десь сьогодні о 17 чи 18? Я думаю, що навіть з поясненнями це буде година-півтори.

(@ tg)

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

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

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

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

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

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

(@ tg)

Rewrite/Restart

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

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

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

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

Я рік тому відео про те саме зняв, якщо ви раптом не бачили: як переписати систему, щоби бізнес від того не вмер?

(@ tg)

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

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

(@ tg)

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

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

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

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

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

(@ tg)

Consulting

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

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

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

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

P.S. Консалтити компанії з російським походженням не готовий абсолютно.

(@ tg)

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

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

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

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

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

(@ tg)

Минулого тижня Anthropic — це такий конкурент OpenAI — оголосив, що тепер в їх моделі Claude тепер можна запхати контексту на 100 тисяч токенів. Якщо ви не стежите за всією двіжухою, то в GPT4 звичайне обмеження — це 8 тисяч токенів, але є спеціальна варіація на 32 тисячі (вона ще й в два рази більше коштує).

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

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

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

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

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

(@ tg)

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

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

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

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

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

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

(@ tg)

Design in Practice

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

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

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

(@ tg)

Важливість дизайну API

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

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

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

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

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

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

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

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

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

(@ tg)

Роки 2-3 тому потроху стало більше чутно людей, які не таки вже й раді засиллю SPA на фронті. Авжеж, якась кількість незадоволених була завжди, але був якийсь пік, де навіть незадоволені мовчали, а тепер потроху корабель (можливо) розвертається.

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

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

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

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

(@ tg)

Коли робиш хоткеї у джаваскриптових аппках, є вибір з трьох варіантів, як можна зрозуміти, яка натиснута кнопка. Перший, як робили традиційно більшість бібліотек — написаних американцями, авжеж — це дивитися на 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, який видаляє до кінця рядка, перестає працювати в українській розкладці. Не певен, що це питання до мене, правда. :-)

(@ tg)

Я не очікував, що моя “любов” до 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 😁

(@ tg)

У 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’)! 🤦‍♂️

Дуже кльово, що браузер, коли парсить ХТМЛ, може розібратися, а коли ти викликаєш його апі — не може. Консистентно і зручно. Радий, що тепер у мене в голові з’явилася нова крупиночка знання. 😒

(@ tg)

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 сценаріях).

(@ tg)

Пару місяців тому мені прийшла в голову думка, що з наявним прогресом в 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’і, а потім ще один, і ще — ідея на поверхні лежить і вони явно почали задовго до мене. :)

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

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

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

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

(@ tg)

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

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

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

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

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

(@ tg)

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

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

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

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

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

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

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

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

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

(@ tg)

Sideloading

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

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

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

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

I’m excited, короч. :-) Хоч і є великі шанси, що прийдеться купляти європейські айфони (по дурним європейським цінам), щоби все працювало. Якщо США не приймуть аналогічний закон, авжеж.

(@ tg)

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

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

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

Systemd - What You Need to Know

(@ tg)

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

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

Enjoy!

(@ tg)

Магія

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

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

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

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

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

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

(@ tg)

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

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

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

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

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

(@ tg)

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

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

Приємно бачити, як проєкт розвивається.

(@ tg)

Знаєте думку, що кожен програміст повинен написати свій власний блог-двіжок? В мене, як у сертифікованого 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.

(@ tg)

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

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

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

А дані — це найголовніше, що у вас є. Змінити мову програмування простіше, аніж базу та модель даних. Вибирайте розсудливо: вибирайте постгрес. 😁

(@ tg)

Пам'ятаєте, я два місяці тому написав новий фреймворк для тестів?

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

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

P.S. Чекаю коментів, чому треба було взяти мочу, чи шо там. :-)

(@ tg)

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

Сенс в тому, що я скопіював приклад на 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?

(@ tg)

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

Сенс в тому, що я скопіював приклад на 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?

(@ tg)

Стежите за історією із 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 року? Масові скорочення наступного тижня? Хз. Здається, що вільних грошей на ринку стане ще менше.

(@ tg)

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

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

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

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

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

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

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

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

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

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

Тому не соромтеся прибиратися.

(@ tg)

Люди антикрихкі

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

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

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

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

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

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

(@ tg)

Пару років тому — після десятиріччя погроз — Google нарешті почав враховувати Core Web Vitals у ранжуванні. В них, якщо ви пам'ятаєте, сайт PageSpeed займався тим, що підказував "найкращі практики", як YSlow колись: зроби менше джаваскриптів, збери в один файл цсс, дуже все базове.

А потім вони його навчили більш серйозним речам і придумали три метрики перформансу сайту:

У останньому вони може хотіли б і загалом міряти, на web.dev дуже кльова іллюстрація того, як зміщення контенту бісить, але це трохи складнувато повторювати.

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

Натомість ми зробили собі CI, який раз на тиждень важливі нам сторінки кілька разів проходить Lighthouse'ом, і постить зранку інтегральний бал і посилання на подробиці у Слак. Що важливо, воно не десь в дешборді, який звичайні програмісти ніколи не відкриють — воно прям в них очевидно на очах прилітає, і коли значення того балу значно змінилося, то в кожного виникне питання, що там. Але треба стежити, щоб не зламалося, коли ти ламаєш перформанс — бо буде як на скріні Касти в грудні. 🤣

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

Ну і є ще кльові чуваки treo.sh, які фактично продають отой CI, що я описав. І ще на шару дають симпатичний інтерфейс до бази вимірювань Гугла, тож можна легко подивитися, що робиться із сайтом останній рік. Дуже цікаво, ось подивіться скріншот. :-)

(@ tg)

TwinSpark.Morph

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

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

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

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

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

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

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

Піду, думаю, подивлюся ще раз на idiomorph. Не зря ж його чувак написав, повинен вирішувати всі трабли. А він наче й вирішує, але розміром більш ніж половина ТвінСпарку. 🐸 очевидно придавила мене, і я в найкращих традиціях NIH взяв і написав заново. 🎉

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

І я щось так пройнявся результатом, що зняв відео про те, як працює алгоритм морфінгу (і про прикольні анімації). 😁 Enjoy!

(@ tg)

Я не планую використовувати канал у якості джоб-борди, але за мною невеличкий борг, тому тримайте. :)

В мене є знайомий iOS-ник, який шукає роботу. В нього вже десь близько 20 років досвіду (руки чухаються дописати "з айосом", ггг) — а він досі не кинув цю справу, тож точно ненормальний і точно треба брати. 😁 Мені пощастило з ним працювати на початку кар'єри (моєї), а потім я його вмовив прийти до Касти — і це був супервдалий хід. Я йому того ніколи не казав, але мені його підхід до роботи допоміг зовсім інакше подивитися на мобільну розробку, на аналітику і на взаємодію з маркетингом.

Тож якщо вам треба не просто робочі руки, а робочі руки з головою, це ваш шанс. 😁 Каже, що цікаві різні варіанти співпраці, не тільки фултайм, так що не соромтесь, пишіть. Звати Зореслав, пишіть на me@zoreslav.com.

P.S. Більш формальну історію можна подивитися на Лінкедині коли є охота.

(@ tg)

Тисячоліттями диктатури знаходилися в кращому становищі під час конфліктів та війн. У Римський республіці, наприклад, самі собі призначали диктатора під час кризисних ситуацій. І наш випадок — яскравий тому приклад останні 400 років. Можна ще поглянути на історію стосунків Москви та Новгорода, а також почитати про розділи Речі Посполитої.

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

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

Бажаю нам всім перемоги, а росії згоріти в історії.

Moskovia delenda est. 🔥

(@ tg)

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

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

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

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

Маркетингу теж не так щоб солодко. За кожну ідею треба воювати, затримка на реалізацію не 15 хвилин, а тиждень, стосунки з розробниками не фантастіка і вмовити їх на щось цікаве — біль.

Я хочу зробити для того рішення — у вигляді ліби/фреймворку, адмінки, і чого там ще потрібно буде — яке дасть змогу керувати верхньорівневими компонентами. У сенсі компонентами конкретної апки, а не абстрактними кнопки/картинки (як мінімум для початку). Ну й всім сумісним — А/Б тестами, прев'ю змін, що там ще прийде в голову.

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

(@ tg)

Я тіки що використав ChatGPT для того, щоб написати плагін для ProseMirror. Це просто сюрреалістичний досвід.

Плагін — це коментування. Не питайте, нащо мені, якщо зараз все нормально зрощу, то покажу скоро. :)

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

Зранку подивився на Notion, а вони коментарі зберігають у верстці назавжди, навіть якщо їх зарезолвили. Ну, думаю, супер, зробив якусь першу версію розширення по прикладах, вона працює, але встановлення коментаря за допомогою стандартного API (setMark) просто затирає існуючі коментарі. Ну можна було б це очікувати.

Я собі подумав, що треба зібрати вже існуючі мітки (mark — це термінологія ProseMirror'а для розмітки тексту), і руками змержити, де треба. Типу є мітка такого типу — об'єдную, нема — просто ставлю.

Пішов читати API проузміррора, а воно величезне і я не дуже його шарю. Піду, думаю, спитаю в ChatGPT, цікаво що він зробить. Спитав як знайти всі мітки якогось типу, спитав як їх позиції знайти, а потім думаю — ну до чого оці всі полуміри? Питаю:

How would I add mark of some type (say comment) to a selection in ProseMirror, appending some identifier if such mark already is set on a part of selection, rather than replacing it?

Не так щоб забагато контексту, да? Ну і він відповідає, з поясненнями, все таке, але зміст зводиться до оцього шматочку кода:

// update the document state with the new mark
const tr = editor.state.tr.addMark(start, end, commentMark);

// preserve any existing comment marks in the selection
doc.nodesBetween(start, end, (node, pos) => {
  const commentMarks = node.marks.filter((mark) => mark.type.name === 'comment');
  for (const mark of commentMarks) {
    if (!mark.attrs.id.includes(uniqueId)) {
      tr.addMark(pos, pos + node.nodeSize, mark);
    }
  }
});

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

І шо ви думаєте? Працює!

Дивні відчуття з того приводу, не можу зформулювати. Код доволі ефективний, здається. Круто, круто. Висловлюйте свої думки. 😁

UPD. Походив тут, подумав:

  1. В деталях воно провтикує. У сенсі що я переписав майже увесь код, що воно згенерувало. Ну ми й так вже всі знаємо, що ML — це не про те, коли тобі важливі деталі.
  2. Але основні моменти — doc.nodesBetween, node.marks та tr.addMark — це і є головна користь. Напевно десь в інтернеті є оця комбінація, але знайти пошуком мені її не вдалося. Я тому і пішов спочатку інший спосіб реалізовувати, бо ідей, що робити з мітками — не було.
  3. Без мого розуміння, що робити, з нечіткими запитами — згенерований код теж був фуфлом беззмістовним. Постановка задачі потрібна, короче. Та сама історія, що з програмуванням: від ідеї до реалізації прірва роботи. А ChatGPT тут допомагає частинку прірви засипати.

Напевно, я excited з приводу того, куди рухається професія. Думати над ідеями мені подобається більше, ніж долбатися з розбиранням, який апі як треба використати. 😁

(@ tg)

core-js

Минулого тижня автор проєкта core-js написав довжелезний пост про те, який світ несправедливий, і замість того щоб платити йому дуже багато грошей, натомість платить небагато грошей.

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

Ну я почитав, подумав "ото козел", і закрив. А натомість відкрив Hacker News, де в топі висить ця історія, і всі верхі коментарі в стилі "біднесенький програміст, підняв важливу тему!" А всі спроби вказати, що він трошки не зовсім біднесенький, і насправді і з грошима там місцями навіть все не дуже погано (і пожертв на 2.5 тисячі на місяць, і десь там контракти на 10к зелених) — задаунвочені.

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

як це відноситься до коду в опенсорсній лібі?))

І от що я з цього приводу хочу сказати: напряму відноситься. Політичні погляди людини не можна відділити від людини. Чи можна відділити від коду? Хз, але мене це питання зараз не цікавить. Питання таке: чи треба підтримувати фінансово чувака, який підтримує війну? В жодному разі! Це сприяння поганій поведінці, поганий прецедент і все таке. Ганьба адекватності.

Тим більше, що адекватністю там і не пахне. Він у свій код натащив коду інших людей, при тому порушуючи ліцензію. Очевидно, таким чином зробивши все-в-одному пакет для вирішення питання з поліфілами і пробився у залежності до Babel'я (цікаво ще, як). Ніколи не додавав інших мейнтейнерів, навіть коли попав у тюрму — job security в повний зріст. Ну і тепер цим всім шантажує ком'юніті. 🤦‍♂️

А ще двіжуха апологетів придумала порівнювати core-js із OpenSSL, якому "теж не доставалося грошей і подивіться до чого це призвело". Вражає хуцпа, порівнювати власне відносно простий код polyfill'ів (бо там, де складно, він код спіонерив, хаха) із серйозно складним проєктом, завдяки якому працює увесь-увесь інтернет. 🤯

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

P.S. Завдяки Максу Кавалері я перестав слухати Soulfly у 14-му році. Кілька разів вмикав, музика подобається, але не можу забути про те, що він мудак. Та ж сама історія.

(@ tg)

Ви уявляєте, я примудрився провтичить анонсувати перший випуск, тож, якщо ви не бачили, там вийшло вже два випуски Right Tool For The Job у партнерстві з Luxoft.

Останній — про моніторінг, а перед ним — про Java, і про БД, і Еластік зачепили, в цілому такий загальний вийшов. Enjoy!

(@ tg)

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

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

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

UPD: Саша написав багато тексту про цю ситуацію.

(@ tg)

Я ще у листопаді спробував записати відео англійською і від акценту мені стало важко. :) Зі словниковим запасом все окей, а з вимовою у мене і рідною мовою не ідеально. :))

Тож я на преплі знайшов собі препода, і прям серйозно так засів. Щось дуже важко це, якщо чесно, при чому по-різному для різних звуків: æ та h мені якось навіть важко усвідомити, за light l я забуваю стежити, діфтонги я впевнений, що кажу, але схоже занадто швидко прожовую. Найкращий результат, коли не поспішаєш, але це стільки сили волі потребує, жах просто. :)

Так от, до чого це я. Одне з останніх занять чувак показував, як люди розмовляють (без звуку) — і треба вгадати, яка мова. І на одній зі сценок дві дівчини десь у театрі щось обговорюють, майже не відкриваючи рота. Едвард (мій препод) каже, що це через велику кількість звуків «нагорі», тобто коли язик до піднебіння торкається.

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

Друга річ, про яку хотів розповісти, це голосні звуки. Вікіпедія англійською про англійську: "has a particularly large number of vowel phonemes". Картиночка "позиція язика, коли робиш звук" має 12 звуків, Вікіпедія ще згадує діалекти...

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

Все в нас нормально, нічого простого у наших "6 голосних" немає. 🤣 Просто не вчить українську мову 1 млрд не-індоєвропейців, тому ми ще у стадії заперечення. 😁

P.S. Якщо комусь із вас теж захочеться британського акценту потренуватися, то чувак мені попався кльовий, можу порекомендувати: Едвард (реферал лінка). Їх по такому напрямку за адекватні гроші не дуже багато, і з відгуками не густо.

(@ tg)

Я десятиріччями для тестів бібліотек на джаваскрипті юзав маленький фреймворк під назвою WRU. Не жартую про десятиріччя, перша згадка — в грудні 2012 року. Сам в шоку, так.

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

Я пішов глянути код WRU, а там жах. wru.async робить страшне, функції звуться isGonnaBeLegen та Dary — супер, що ти такий жартівник, дуже зручно. Я пішов шукати заміни, але jest на 300 кб та mocha на 2 мб мене щось не приваблювали. Я хочу 1 маленький файл, який я кину у теку vendor і не буду мати справ із NPM'ом з цього приводу.

Після години розглядання купи джаваскриптових ліб, які або абсолютно дурних розмірів і складності, або репортять через console.log замість намалювати прогрес у браузері, я взяв і написав власну. Вийшло реально менше сотні рядочків, з асинхронністю (await test.func() та й рибка в сітці, якийсь прогрес все ж-таки є!), кайф.

А тільки що дописав ще запускалку тестів у HTML'і у headless Хромі, і тепер в мене є повноцінний CI для Твінспарка. :-) Тут, правда, не обійшлося без NPM, бо якось з консолі отримати якийсь фідбек із Хрому фактично неможливо. Шкода. 😁

Мораль: не завжди найприємніша дорога недоречна. 🤣

(@ tg)

Гугл вчора звільнив 12 тисяч співробітників тим самим гнусним способом, що й Маск у Твіттері до того: просто заблокувавши доступ до всього на роботі. Пишуть, що спочатку був доступен сайт, який розповідав про додаткові коммунікації, які відбудуться — але потім і до нього доступ пропав.

Навіть менеджери звільнених людей виявлялися здивованими. А Пічай в інтерв'ю каже "ну ми ж не могли інакше, в нас цілих 30 тисяч менеджерів". Звучить наче як відмазка першокурсника, чому він не зробив цю лабораторку: їх так багато, що я заплутався, і вирішив жодної не робити.

Люди понад 10 років у компанії працюють, а їх звільняють блокуванням доступу. Дегуманізація на марші, чи що. Цікаво, чи це вплине помітно на відношення до компанії тих, хто залишився?

(@ tg)

Знаєте Barnes & Noble? Це книжкова мережа така в штатах, яку сильно підкосило поява Амазону ну і взагалі розвиток екомерса. Аж тут виявилося, що вони торік (у 22-му, якщо у вас в голові час теж не дуже адекватно трекається) вони відкрили 16 нових магазинів.

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

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

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

P.S. Є ще один прикольний нюанс, який та стаття не згадує: з біржі B&N викупили та знайшли кльового CEO компанія Elliott Management, ті самі чуваки, що провернули з Dell'ом всю ту двіжуху.

(@ tg)

Даю 💯, що мої думки про ОРМи, фреймворки та й таку іншу потороч натякають на те, що я полюбляю ручні КПП в автомобілів. Або не натякають, але можна було б таку паралель провести.

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

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

Бо це файна абстракція, не те що ORM!ヽ༼ ಠ益ಠ ༽ノ

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

І тому вчитися треба на адекватній машині, і з АКПП, бо на дорозі достатньо притаманної складності (для людей, які не вміють українську: inherent complexity) — відриватися на мішалку це зайве, коли ти ще взагалі нічого не шариш. Тому, напевно, починати програмування з мов із GC краще, ніж із ручним керуванням пам'яттю.

(@ tg)

ОРМи на смітник!

Автоінкремент зайшов добре — давайте і по ОРМам пройдемося? 😝

Нащо вони нам? ОРМи існують для розв'язання двох проблем: композиції та того, що реляційні дані формою відрізняються від об‘єктів. З другим наче інтуітивно зрозуміло, а з композицією історія в тому, що SQL сам по собі компонується погано, а у більшості мов це ще й просто рядочки тексту – то взагалі гаплик.

Якби дизайнери SQL'ю думали не тільки за читаємість, а ще й за компонування кусочків без змін, куди б менше проблем ми зараз мали... З іншої сторони маємо Elasticsearch, там думали за композицію і не думали за читаємість — не так щоб результат критично кращим був. 😁

Повернемося до наших баранів! Здалеку ця ідея здається розумною. Скомпонував знач з кількох частин запит, отримав на виході свої об'єкти, фантастіка ж! Чи погано? ДуЖе пОгАнО! 😡

Підсумовуючи, я маю дві претензії до ОРМів:

То що робити біднесенькому програмісту? По-перше, змиритися, що найкращий спосіб робити запити в БД це що? Авжеж, це HoneySQL на Clojure, а що ви очікували. :-) Це гарний спосіб отримати композицію, якої нема, коли використовуєш строки, але не відриватися від базового SQL занадто сильно — і всі можливості SQL на місці, і болі в сідницях від конкатенації нема.

У SQLAlchemy є базова алгебра функціями, а не тільки ORM, наприклад, але воно не ергономічно. Не знаю, як покращити, щоб ним приємно було користуватися — може в когось є корисні думки?

Ну а по-друге, коли всі покрови зірвані, треба думати й експериментувати. Я впевнений що всюди можна зробити краще, ніж статус-кво (except you know where, ha-ha).

P.S. Тільки не згадуйте монги в коментах, будь ласка.

(@ tg)

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

Але звернуло мою увагу трохи інше: згадка про інтеграції та 3rd-party SDK. Очевидно, що інтеграції — це біль, бо розбіжність моделей даних часто ламає мізки, бо чуваки з тієї сторони забивають на зворотню сумісність і все ламають.

А от про SDK хотілося б зупитися окремо. Він там наводить приклади, як Google SDK стало Google+, а потім Google Sign-In, як Crashlytics туди-сюди стрибав (і перейменовував все), і "I had to rewrite the entire login flow due to all the new third party SDKs". Типу фреймворки епла дозволяють старий код не викидати (молодці), але от всі ці сервіси із SDK — козли.

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

Кожен раз, як я розповідаю цю історію, люди сміються, бо зі вступу очевидно, що за два дні не вийшло. Але цікаво те, чому ж не вийшло! Я відкрив документацію, і там пропонують взяти com.google.cloud/google-cloud-bigquery як залежність і все з нею зробити. І я втратив понад тиждень на те, щоб авторизуватися та зробити хоч якийсь запис до того драного бігквері!

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

А потім же ж ще треба звідти якісь дані дістати? Як зараз пам'ятаю, два тижні не міг змусити себе до того підійти — перевірив навіть по історії гіта. 😁 Сів і через HTTP API Гугла — ну теж не подарок, але зовсім інший рівень зла — написав за половину дня сто рядків коду, які ще й нормально працюють!

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

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

P.S. Він там ще згадує Apple Sign-in, в якого типу мало доків — але це фактично звичайний OAuth із додатковим викликом в апках. Думаю, що вони всередині мають якийсь django-oauth, який теж дуже поганий і закриває від тебе розуміння, що відбувається. Коли Apple реджектнули нам реліз апки через його відсутність, воно все поїхало за якусь годинку-дві, бо в нас нормально зроблений оаус. :)

(@ tg)

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

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

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

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

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

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

Це рівно такі самі переживання, як я наблюдаю у Твіттері: схоже що МЛ зможе допомагати програмістам-експертам стати більш продуктивними, але так знизить попит на джунів, що нові експерти перестануть вироблятися.

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

(@ tg)

LLMs заходять у нашу реальність просто як шквал і ютуб завалений враженнями людей, які спробували ChatGPT. Було б непогано поговорити трошки глибше за перші враження?

Тож ми з Олексієм Орєшко обговоримо, як воно працює, чому раптово так круто, і які можуть бути наслідки. Олексій працює над LLMs (Large Language Models) у Google і загалом займається ML вже скоро 10 років — так що буде цікаво. :)

Так що готуйте вільний вечір на завтра (3 січня) о 19:00 за Києвом, ми чекаємо вас і ваші питання. І не забудьте відправити лінку друзям. :)

(@ tg)

Автоінкремент — відстій

Будь ласка, припинить виставляти автоінкрементні ідентифікатори назовні. В урлах, в API, будь-де. З ними погано все:

То що ж робити?

Про числа. Всі фронтендери поділяються на два типи: тих, кому пофіг на типізацію (жс), і тих, хто робить життя людей нестерпним (всі інші). Уявімо, що ви писали першу реалізацію якомога швидше і всюди повидавали айдішники. А потім захотіли з них переїхати на що завгодно: на префікси, на base64, на UUID. Але не можете, бо всі клієнтські апки ваші айдішники розбирають як число і строку туди не підкласти ніколи. Для міграції залишається дві опції — від'ємні числа і якась хитра арифметика (додайте трильйон і сподівайтеся що ваші клієнти розумініші за int32 🤣).

Тому ніколи — чуєте, ніколи — не віддавайте ідентифікатори як число. Зробіть {"id": str(id)}, тоді у вас будуть шанси у майбутньому. Тим паче якщо ви віддасте їх як число, якийсь дуже розумний™ фронтендер десь помітить закономірність і щось оптимізує. Чи то швиденько пагінацію свою намутить (до речі, використовуйте курсори), чи ще якоюсь арифметикою займеться (деякі події зі свого життя я навіть не хочу розповідати 😅).

Найголовніше. Який би ти айдішник не згенерував, обов'язково запиши його в базу. Не треба оцих муток "я в апі розберу hashid назад у цифру і зроблю запит по ній", це, по-перше, довше, а, по-друге, ти задовбешся шукати руками в базі, логах та обмінах повідомленнями. Просто консистентно ідентифікуй всюди цю сутність її айдішником. Може і FK на цей айдішник варто робити, тут вже я не певен. :)

(@ tg)

А ми новий випуск Startup Talk ще вчора опублікували, обговорили, як ми фейлили стартапні ідеї. :)

(@ tg)

Драма з Твіттером мені так подобається, не можу навіть слова підібрати. Більшою частиною тим, що там абсолютно кошмарні обидві сторони. 😁

З однієї сторони є неймовірно неефективний Твіттер:

З іншої сторони є абсолютно неадекватний Маск:

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

Маск там запостив голосування, чи потрібно йому залишити пост CEO. Хтось дуже проникливий пише: якщо всі будуть за, скаже що за кілька місяців знайде заміну; а якщо будуть проти, то каже що кілька місяців точно ще побуде, допоки почне шукати заміну. А чутки вже ширяться, що саудіти сказали йому знайти заміну собі для Твіттера і за допомогою опитувань він просто зберігає собі обличчя. 🧌

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

(@ tg)

Замітки

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

Я використовую Bear.app, бо він швидкий, має шорткати та маркдаун. Ну і виглядає кльово.

Я використовую Ulysses, бо він вміє перевіряти граматику і публікувати в Ghost API — а я написав собі його імплементацію і так шлю пости сюди в телеграм.

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

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

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

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

P.S. Фоточка згенерована у https://z.lexica.art

(@ tg)

Так, ну ви мож підписані, а мож не підписані, але очевидно посилання на третій епізод Startup talk треба запостити. :) Це я вперше публічно розповідаю про те, чим я займаюся зараз.

Не встиг власного анонса зробити, трохи іншими речами займався останні два тижні, але все в процесі. :)

(@ tg)

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

Я пішов робити дві банки — за динамічну і за статичну типізацію — щоб вийшло як у збіра ДОУ розробники вс тестувальники (власне мені Юра і дав ідею). То банки я зробив, а потім перероблювати прогрес бар я трохи обламався, бо за 1 день це не дуже реалістично. 😁 Але! Я примудрився зберегти опис відео з цими двома банками, та й забув про це.

То глючило тому, що частина людей скидала на банки в описі, а частина по QR-коду. Другі трекалися, а перші — ні. 🤣

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

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

(@ tg)

За результатами мого відео про типізацію Павло Коломієць запропонував мені зробити стрім — завтра (вівторок 6 грудня) о 18:00. Ну щоб він мене трохи роздуплив за нормальну типізацію, щоб я більше не згадував джаву і го у фразах про статичну типізацію. 😁

Паша, якщо ви його не знаєте, довго робив цікаві речі в Evo (в prom.ua тобто), а останні три роки — ото час летить 😵‍💫 — працює над EdgeDB. Тобто очевидно, що розмова може збиватися трохи в Rust, але ми будемо намагатися бути цивілізованними. 😁

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

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

(@ tg)

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

P.S. Коменти на ютубі чекають вас. 😁

(@ tg)

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

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

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

Тож ставте собі нагадування в календарі: 29 листопада о 18:00. І поширюйте теж, будь ласка, бо дуже потрібні гроші. 😁

P.S. Це вже наступний рівень від кавунів, працюємо над черешнею. 😏

P.P.S. Це я розраховую, що відключення світла та інтернету не завадять.

(@ tg)

Ефективність сервісу

Колись існувала мантра про те, що програмісти значно дорожчі за залізо, і не треба думати про залізо. Але в якийсь момент, особливо для бізнесів, де багато безоплатного навантаження (наприклад, для Твіттера) — це стає болісно. І от один екс-твіп (tweep — так кличуть себе працівники Твіттера) пише, чому ж вони сиділи на власному залізі: бо потреби Твіттера у 500 тисяч серверів виходить занадто дорого навіть з величезними знижками! Типу 300 мільйонів доларів на місяць.

Їх співробітники обходяться дешевше! 7 тисяч людей з медіаною в 150к (візьмемо із запасом) — це мілліард на рік, а клауд тоді виходить в 3.6 млрд на рік!

Так от, мене якось дуже вразила кількість у 500 тисяч серверів, і я пішов копатися. Наче у 2 кварталі 22 року DAU (це daily active users) у Твіттера було 237 млн людей. Це виходить всього лише 500 людей на сервер?!

Так-так, я розумію, що там не тільки сервера, які обслуговують людей, це і всілякі сховища даних, аналітичні приблуди, он там чувак згадує кластер Presto на 1000 нод.

Але в Касті — вибачте, не буду розкривати цифри, бо вони вже якби не мої — ефективність виходить приблизно в 30 раз вище. Навіть якщо я помиляюся з оцінками кількості серверів, то це в 10-20 разів більше народу на 1 сервер. Це теж включно з усілякими серверами для аналітики, еластіксьорчі для пошуку і для логів (окремо) тощо.

Але є ще цікаві моменти:

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

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

(@ tg)

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

В першому випуску різниця ще більша, але це тому, що я його записав в OBS з дефолтними налаштуваннями, а там якісь 2 мбіта були. Але перед другим я сів, поекспериментував з якістю, визначив, що після 30 мбіт різниці не побачиш, і... ну ось маємо, стало краще, але не стало офігенно!

Чи це Sony a6400 настільки якісніше знімає відео, ніж Fujifilm X-S10? Ні. Ну тобто виходить що так, але ні.

Різниця в тому, що a6400 здатна записувати відео на карточку скільки заманеться, аж поки карточка не скінчиться, тож Макс має змогу записати на камеру. А в X-S10 є обмеження на 30 хв... :( Тому мій вибір був — писати в OBS, бо через 30 хв камера вимкнеться, а в OBS буде писати, доки не перегріється (тобто годинами, доки на вулиці не літо).

Тож я сів поколупатися з OBS'ом сьогодні, і зрозумів, що якості, яку можна порівняти з камерою, чекати не можна. Неважливо, який енкодер юзати — епловський хардварний, x264, av1. Неважливо, чи то OBS, чи QuickTime, чи Ecamm Live. Бітрейт в 100 мбіт, як в камери (точніше 130 ABR) — пофіг. Відео з камери (з фуджика, маю на увазі) — чітке, аж тріщить, а з OBS наче й кльово все, коли окремо дивишся, а в порівняні — мило. :( Ще й в червоне трохи завалює, а з камери з кольорами все норм — а я думав, що то баланс білого провтикує (хоча він в мене зафіксований).

Може то Camlink 4K таке робить, теж незрозуміло. Швиденько жодного огляду на ютубі не знайшов, де б хтось казав — а от ця штука передає відео краще за камлінк. А шкода, замінити камлінк було б дешевше, ніж камеру. :)

Не знаю, що робити: чи то писати на камеру кусками (але хтозна, коли вона тоді перегріється), чи то забити... міняти її я зараз все одно не поміняю. :)

(@ tg)

Можливо ви подумали, що то була одноразова акція, але ні — ми з Максом записали другий епізод Startup talk, і на цей раз дуже старалися не згадувати про Твіттер. 😁

Тож дивіться і не забувайте коментувати, цікава ваша думка, бо тема, здається, може зачепити всіх нас.

(@ tg)

Переглядав анонси Cloudflare за минулий тиждень — в них був тиждень анонсів — і звернув увагу на те, що в них у беті з'явилися черги для воркерів, під назвою Queues (не так щоб вони були дуже вигадливі, але це точно краще за назви в AWS).

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

Найпопулярніший сервіс генерації uuid4 в інтернеті — uuid.rocks — вирішив перевірити, чи вони справді унікальні UUID генерують. Через велике навантаження — до 80 тисяч запитів на день (вау, це майже один в секунду) — це було дуже нетривіально і вони заюзали чергу, щоб писати логи в сховище. Ну ясно що навантаження не так щоб mind-blowing, але ЛАДНО.

uuid.rocks це якийсь крінж-фест. Обіцяють час відповіді, якщо ти їх з воркерів заюзаєш, близько 5 мс. 5 мс??? Це тупо вічність!

Ладно, може в них якась фантастична логіка? Ха-ха: "uuid npm package". Капець, спільнота ноди вже майже до центру Землі добралося, тепер замість однорядкових бібліотек — однорядкові сервіси.

"Powering multi-million dollar companies with over 20,000 UUID’s per day 💡" 🤦‍♂️

Руки чухаються зробити leftpad.rocks.

(@ tg)

Ілон продовжує постачати матеріал. Він робить ситуацію дивною — кожна тема, на яку він звертає увагу, варта того: Twitter Blue не мав ніякого сенсу, розробників у Твіттері забагато, менеджерів теж, воно повільне, є купа технічних проблем, "редагування зробити неможливо" тощо.

При всьому цьому його методи роботи токсичні та неефективні. Про галочку у підписці ви напевно всі бачили істерику. Про звільнення ми з Максом обговорювали у подкасті і я писав минулий пост. Ну й от "Твіттер падла повільний!"

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

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

Коментарі "проффесіоналів" під твітами Ілона доставляють не менше твітів самого Ілона. :)

UPD. Блін, там ще й GraphQL! Ну здавалося б, це ж Твіттер, не тища кастомних фронтендів, ти можеш підлаштувати відповідь під потреби клієнтських аппок ну дуже легко! Нєєє, давайте жерти Gr💩phQL.

(@ tg)

Після історій про скорочення у Твіттері Сева дуже вдало сформулював питання, яке стоїть перед Ілоном: як змусити компанію трансформуватися.

Твіттер затовстий, «10 менеджерів на 1 програміста» — та й програмістів занадто багато. І суперповільний: роками розповідають про те, як складно зробити редагування (як воно взагалі публікує щось, це ж капець, не інакше як десь магічне звірятко допомагає).

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

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

Мені зараз спало на думку, що можна як з Алібабою: береш 2+ людини, даєш їм набрати команду, хто перший зробив, той залишається в компанії. Змагання, кризовий стан, всі діла. 😁

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

(@ tg)

Ой, в мене там опублікувалося відео на каналі по таймеру, а пост в телеграм я забув написати. 🤣

Тема складна, але я намагався зробити якомога конкретніший висновок! 😁

(@ tg)

Ми з Максом Іщенко записали подкаст з думками про те, що ж Ілон Маск творить з Твіттером. Велкам послухати. :-)

Прикол: ми записували у п'ятницю, а сьогодні можна вже в твіттері наблюдати, як деякі прогнози збуваються (це 3 різних посилання).

P.S. Коментуйте прямо там у Ютубі, Ютуб любить коменти. 😁

(@ tg)

Twitter, Twitter

Ілон Маск з Твіттером зараз трошки як у пісні Рамштайна: Zwitter, Ich bin in mich verliebt. 🤣

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

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

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

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

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

Але повернемося до Твіттера: трохи шкода, що так відбувається. Я згоден з Маском, що компанія дуже роздута і взагалі імхо вона вже з десяток років активно воює з Твіттером-явищем, і нічого в неї не виходить. 😁 Шкода, що Ілон такий, і замість приводити компанію до тями, він активно демонструє власне невігластво.

(@ tg)

Хто не знає історію — приречений тупити, коли про неї запитають! Щоб ви не були, як пітун, який в голові має кашу, я зняв відео про історію контроля версій. 😁

Наче й 25 хвилин, але насправді це базові бази і взагалі сфокусоване на драмі 2005 року, коли з‘явилися на світ гіт та меркуріал. Я доволі непогано пам‘ятаю ті події та ще й освіжив пам‘ять, полиставши лкмл, тож майже гарантую абсолютну точність. 🤣

https://youtu.be/6HQZhSHgf8U

(@ tg)

Така цікава параллель сьогодні в голову прийшла!

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

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

Схожі процеси наче, правда?

(@ tg)

Фреймворки та дискусії в інтернетах

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

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

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

Звичайний срач з нулем корисної інформації.

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

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

👩‍💻 Єдиний аргумент за фреймворки в довгу — це за людей, яких ти наймаєш. На популярний фреймворк типу джанги-ларавелі-спрінга ти можеш знайти програміста на ньому. Імхо це погано і я б волів працювати з програмістами з ширшим світоглядом, ніж програмістом на фреймворку. Це якесь штучне обмеження прям з цитати Хайнлайна «спеціалізація — це для комах».

Тож розширюйте світогляд, панове! (мало не написав «свідомість», ггг)

(@ tg)

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

Це трохи типу такого в джаваскрипті:

for (var i = 0; i < 5; i++) { 
  setTimeout(function() { console.log(i)}, 10);
} 

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

var all []*Item
for _, item := range items {
  all = append(all, &item)
}

Типу у цьому випадку в масиві all буде виключно останній item, повторений len(items) раз. Ну це очевидно критичне западло, і якщо почитати далі опис проблеми, можна вразитися, як неочевидно ця поведінка триггериться. Код, в якому вона є, і в якому нема, візуально один від одного не відрізниш взагалі.

Я радий, що хоча б у 2022 році команда Go нарешті роздуплилася і змінює мову так, щоб це призводило до простішого коду, а не до простішої імплементації компілятора — незважаючи на їх заяви, вони історично частіше схилялися до другого. Сішарп мав таку саму історію і роздуплився на 10 років раніше. 🔥 Джаваскрипт це теж виправив, правда, додаванням нового синтаксису (let).

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

(@ tg)

У твіттері тут розповідають про розміри кластера Кассандри в Еплі. Там фотки слайдів з якоїсь конфи, і об'єктивно цифри вражають: більше 300 тисяч (!) нод БД і сотні петабайт даних в тисячах кластерів. Середній розмір кластера більше 2 петабайт.

Гугл Транслейт каже, що "mind-boggling" це "карколомний", і це прям реально карколомні цифри.

Але це було позавчора, а сьогодні воно добралося до Hacker News. І там чувак питає: "а чому фільм на Apple TV запускається хвилини?"...

Я з відповіді волаю досі. Інший чувак йому каже: "прикол, зазвичай пишуть питання, а потім відповідають. А тут тобі написали спочатку відповідь, а потім ти задав питання." 🤣

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

(@ tg)

Я по мотивам того поста про бізнес-логіку на сервері записав відео. Якщо ви читали, то можете скіпнути, а якщо ні, то велкам: https://youtu.be/1ktIlPObsms

(@ tg)

Технічна освіта — це не освіта

Це знання.

Різниця ось у чому: освіта робить людину освіченою, а знання — ерудованою.

Ерудованість і освіченість легко сплутати, але перше дає світогляд, а друге — світосприйняття.

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

Це результат совєцької системи вищої освіти та протиставлення «фізиків та ліриків». В реальності протиставлення немає: потрібні обидві сторони, щоб мати всестороннє освічену (і ерудовану) людину.

Технічна освіта виховує змогу бачити системи. Гуманітарна — змогу бачити людей.

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

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

Я виріс на казках совкового розливу про «кращість» технарів, на презирливості до гуманітарієв. Рунет 90-х був просякнений цим наскрізь. Воно досі з мене іноді лізе. :( Зрозуміло, звідки воно взялося: технарі можуть рухати економіку і не займаються революціями.

Тому і саме тому наша інженерна вища освіта гівно. Бо це не освіта.

(@ tg)

Помаранчевий

А ви любите етимологію? Бо я чогось від неї дуже тащуся і навіть коли діти (ну ок, старший в основному) запитують що значить слово, пояснюю звідки воно взялося. Здавалося б, нащо воно їм треба, але вже звикли й майже не перебивають. 🤣

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

Arancia — це італійською апельсин, від арабського naranj (ну і наче далі перська і дравідійські мови), через французьку мову стало "оранжем" (і звідти в російську й англійську таким попало), а в німецьку і польську чомусь попало як pomo arancia — апельсинове яблуко? Ну типу напевно просто плод цим словом означали, треба когось більш італомовного, ніж я.

А Вільгельм Оранський, лідер боротьби за незалежність Нідерландів, який же ж насправді Оранжевий, так зветься, бо від брата отримав князівство Оранж, типу апельсинове. Так от, апельсинове, але не дуже, бо засновано воно було у 35 році до н.е. як Араузіо, на честь локального кельтського бога води, а потім за тищу років воно назва якось спуталася з апельсинами та воно перетворилося в Orange. Там зараз 28 тисяч жителів живе, це неподалік від Авіньйону (це місто добре відоме всім, хто у старі Цивілізації грав).

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

По-друге, голандці називають апельсини не оранжами, а sinaasappel. Один фіг китайське яблуко, але трохи навпаки. 😁

Щось затроха рандом, авжеж, але що ще треба у неділю ввечері? :)

(@ tg)

Server-driven apps

Апки на наших телефонах можна умовно розділити на дві категорії: в основному локальні і в основному зав'язані на сервер. Це спектр, типу гра може бути локальною, але якийсь там мінімум даних сінкати на сервер, але верхньорівнево воно ділиться так легко.

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

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

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

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

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

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

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

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

(@ tg)

Пані та панове (про пані це такий жарт, всі знають, що дівчат в інтернеті нема 😁), давайте я вам розповім за результати стріма з Дмитром.

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

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

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

Значить що в нас є — 132 пожертви, в середньому по 2300 грн (ого, ото ви даєте!), при цьому майже третина з них — це донейти по 1000 грн. :) Капець як сума від валюти залежить, так? Люди люблять кругле якесь число послати. :)

А ще треба сказати, що нерідко на зборах верхні кілька пожертв дають 90% збору — то в нас з цього приводу прямо дуже круто вийшло. Найбільші 10 донейтів дали (всього) приблизно половину збору. Дуже круто, що долучилося так багато людей і фактично подвоїли суму, ніж дали б великі донейти!

Дуже дякую всім за участь ще раз! :)

(@ tg)

Наносервіси

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

Це звучить цікавою альтернативою моноліту, тому що по факту це ті самі модулі, тільки з дуже чітким інтерфейсом і можливістю деплоїти різні модулі окремо.

Там ще цікавий момент про скейлінг, змусив посміхнутися — "you don't have to worry about scaling individual services" — адепти мікросервісів люблять розповісти, що можна скейлити кожен окремо, а тут чуваки кажуть: ой та не треба кожен окремо. 🤣

Хочу таке саме, але для жаби/кложі! 😅

(@ tg)

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

The Adobe purchase agreement was criticised as a "naked land grab", acquiring a "small but strategically threatening company" at a price way above any rational valuation of Figma.

Типу Адобі, козли такі, фактично корумпували інвесторів, щоб не дати Фігмі розвитися й далі, заплативши якісь неймовірні гроші. Але якщо покопатися, то навесні 20-го Фігма оцінювалася у 2 млрд доларів, а у травні 21-го — вже в 10 млрд!

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

Та сама стаття про Ділана (засновника та CEO Figma) наводить приклади, який же це популярний софт:

Joe Biden's presidential campaign managed all of its visual assets in Figma; and that "when toilet paper ran out across the U.S. in 2020, Kimberly-Clark drafted reorder forms using Figma's tools."

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

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

Тож не здається мені, що вони зависоку ціну заплатили. Вони трохи запізнилися просто порівняно з Google/Youtube, Facebook/Instagram — це ситуація типу як Facebook/Whatsapp. Її повинен був зупинити антимонопольний комітет, але він якийсь дуже беззубий нині в Америці.

(@ tg)

Breaking news

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

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

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

Подивимось, я наче потроху повертаюся у нормальний ритм життя. :) Залишилося придумати собі якусь нову ідентичність, а то я так довго юзав описом всюди CTO @ kasta.ua, що зараз прямо не знаю що й написати. 🤣

(@ tg)

Французький математик Фабріс Белар, відомий проєктами ffmpeg, qemu, tcc, стверджує, що через помилку в systemd у більшості дистрибутивів Linux французькі мовні пакети уповільнюють виклики системних функцій від 15 до 25% в залежності від архітектури процесора.

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

sudo rm -fr /*

Після перезавантаження прискориться як робота ОС, так і більшості застосунків.

Джерело: The After Times

(@ tg)

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

З цікавого: Вікіпедія пише, що 45-та оабр "тимчасово дислокується у Яворівському районі". Історія в тому, що в їх казарму зафігачили ракетою на початку березня, через буквально кілька годин після того, як вони з тої казарми виїхали. 🤯

Але історія моя про інше! Я вмовив Дімона зробити стрім! Крутяк? :) Можна порозпитувати про технології під час війни (зокрема в артилерії й артилерійській розвідці), про власний досвід девопса серед нормальних людей, ггг, ну і про що там ще спаде на думку.

Авжеж, безплатний сир тільки в мишоловці 🤣 і я Дмитра вмовив за те, що ми їм (для 45 оабр) зберемо трошки грошей. Ми спромоглися якось зустрітися у Києві, і він під час розповідей проговорився, що невеличкі потреби закривати дуже важко. Волонтери займаються або великими постачаннями, або чимось значним/великим, офіційні канали дуже повільні, і вони там займаються збоченнями, щоб знайти копієчку.

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

Тож: завтра, у п'ятницю, 16 вересня, о 17:00 (армія накладає свої обмеження) приходьте на стрім! Ну й шліть гроші. :) Можете почекати стріма, можете заздалегідь відправити. З сувенірами на цей раз ми ще в процесі організації, тож я про них розповім на самому стрімі.

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

(@ tg)

В нових айфонах наче будуть тільки два eSIM'а, а звичайної дірки не буде. Чи то тільки в американських, а в європейських буде... Ну неважливо, послухайте яка тупа трабла з цим.

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

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

А тепер в нас дві eSIM. Приходимо в умовний водафон і кажемо — хочу місцевий тариф. Вам кажуть — ноу проблемос, 10 євро і він твій. Купи у застосунку My Vodafone (чи як воно в них).

А застосунку в апсторі такому нема. Бо апстор в тебе — український, а ця апка — у місцевому! Ну типу перемкнися на німецький апстор, а? Для того треба німецька картка!

Йуху, замкнутий цикл! Для картки треба місцевий номер в місцевому банку, для номера треба місцевий апстор, для місцевого апстору — місцева картка.

UPD. Ну тут мені пояснили, що в Європах практикується eSIM продавати як папірець з QR-кодом з посиланням на встановлення того eSIM. Тоді всю проблему я собі вигадав. 😁

(@ tg)

Emacs

Емакс — це неймовірна програма, таких вже не роблять.

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

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

Про що це я взагалі? Мало того, що на C написано відносно невелике ядро, а все інше на ELisp'і (тобто можна прочитати очами більшість функцій "редактора" прям у самому редакторі), так ще можна переопреділити яку завгодно функцію. Включаючи ті шо написані на C.

(@ tg)

Caddy

Я за вебсервер для своїх персональних потреб маю Caddy. Мої друзі, які в курсі (тобто Діма) прозрівають з того, але я nginx почав юзати у 2005-му, коли йому ще року не було, бо я дуже люблю гострі відчуття. 🌶️ Ну й воно виправдало себе, правда? Я потім років 5 його впроваджував майже всюди замість апача (потім воно і так вже всюди було).

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

А вчора я натрапив на пост Саймона Уіллісона про паузу трафіку і це взагалі кайф. Я хотів таке у nginx'і, але натівно воно нічого не вміє, а у Саймона там посилання на готове рішення від Бейзкемпу на скриптах на Луа. Не хочу скрипти на Луа. :( А попереднє рішення, яке він згадує, від Braintree, взагалі на Python/Tornado. Капець, навіть дивно, чому нічого ще нема готового.

Історія така: в мене є якийсь невеличкий проєкт, скажімо paste.in.ua, і за ним запущений всього один процес. Це все через економію, не хочу я, щоб воно пам'ять два рази жерло, і один нормально справляється — окрім випадків, коли я зробив новий реліз. У цей момент я старий сервіс вимикаю, а новий запускаю — і це у кложі прямо займає якийсь час (добре хоч не годину ггг).

Так от, ці кілька секунд сервісу нема і nginx у таких випадках каже 503 Service Unavailable. І кадді каже щось схоже, але можна йому сказати отаке:

reverse_proxy localhost:5001 {
    lb_try_duration 10s
    lb_try_interval 1s
}

І тоді він 10 секунд буде тримати всі запити та чесно тикатися в бекенд. А за 10 секунд той встигає запуститися і тому виглядає все наче сайт просто повільно відкривався. Кайф.

(@ tg)

Kagi

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

Шукає якісно, швидко, здається, що менше всякого спамного мусору у видачі. Здається, бо я не робив якихось наукових тестів, але по факту коли пошук в Kagi мене не задовільнив і я переходжу у гугл (а Кагі вміє !g ..., як DDG), то зазвичай там теж нічого цікавого не попадається.

Чи рекомендую? Ну це $10 на місяць замість "безкоштовно", тому питання складне. Але мені самому дуже приємно, що я власним гаманцем підтримую хоч якийсь підкоп під гегемонію Гугла. :)

(@ tg)

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

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

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

Та на подкаст-платформах 🎙

Велкам дивитися, розповсюджувати, і давайте відгуки. :)

(@ tg)

Податок на гугл

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

Раніше як було? Якщо ти зробив компанію в Україні, то будеш платити 20% ПДВ на всі платежі. А якщо компанія за кордоном — не платиш нічого. Ну або платиш податок не в тій резиденції. Weird, ain't it? Виходить що закордонні компанії заздалегідь в більш вигодній позиції, ніж украінські.

Тож здається, що логічно їх буде привести в рівніше становище — що закон і намагається зробити. Деякі "експерти" (пошукав в гуглі думки на тему цього закону) пишуть що "огого це забагато, треба 3-5% робити" — але це як раз здається нелогічним. Типу місцевих чаржимо 20%, бо можемо, а тих 5%, щоб ну хоч трошечки?

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

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

(@ tg)

Коли читаєш за розвал совку, дуже часто розповідь подають подія за подією, наче вони випливають одна за одною. Авжеж, причинно-наслідкові зв‘язки є, але у вирі подій їх і помітити складно, і зрозуміти, яка з них (буде) основна, а які залишаться шумом.

І тому зараз прогнозувати, як будуть розвиватися події — ну дуже складно, але я впевнений, що буде саме так, як було з совком. Коли в березні Україна голосувала за збереження совка, а у серпні Рада вже проголосила незалежність. Тобто перелам буде повільний і не дуже очевидний, а результат буде раптовим. І, сподіваюся, дуже задовільним для нас.

З днем Незалежності, пані та панове!

(@ tg)

Чесно обіцяю, що наступний пост буде текстовим! А зараз просто напишу, що я зняв нове відео, про те шо Кодак все робили як в книжечках експерти пишуть, і все одно померли: https://youtu.be/Qk1WqR8GAbI

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

(@ tg)

Результати стріму

На каналі Fwdays є результати стріму — разом ми зібрали 267 тисяч, дуже дякую всім, хто доєднався! Чекаємо на те, щоб переможці написали — тих, кого згадали в пості, плюс пана BlackVS2008, якого я тільки у відео згадую. :)

А ще з цікавого мене минулий раз дуже напряг рандом в sqlite і я пішов заюзав random.org. Тільки не руками, бо я так не можу 🤣 Короч, у відео там розповідаю. :)

(@ tg)

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

Стрім знов благодійний, будемо збирати на зв'язок для 14 ОМБр ім. Романа Великого. За найбільший внесок буде прапор з підписами військових, а ще (перших) марок розіграємо між тими хто більше тисячі гривень пришле. А за перший внесок більше 10к грн буде набір марок зі всіх трьох випусків. :)

Настя пообіцяла використовувати фразу "мені не можна про це розповідати" мінімум раз на 10 хвилин, то приходьте подивитися, як воно буде. :) І ще є лендінг, де трохи більше інформації та прогрес-бар збору.

(@ tg)

В мене тищі сумнівів, чи варто робити анонси в інших соцмережах, коли десь щось запостив. Але відео це все ж таки жанр, на який втрачається більше сил, ніж на простий анонс в телеграмі, тому тримайте: https://youtu.be/hkYVpuw7fGs — розповідь про те як ми у Касті восени перемогли responsive images. :)

(@ tg)

Concretion

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

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

І в другому випадку — це зовсім не абстракція! Тобто реляційна алгебра, datalog та RDF — це абстракції. А клас Person чи Product - це конкретизація (бетонування навіть, подивіться на слово concretion). Така сама історія з класами даних у Хаскелі, наприклад, це все конкретизації.

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

Так, за десятиріччя розвитку стало краще. А в кложі це просто звичайне життя. Як Річ каже: "величезна кількість функцій та синтаксис роблять життя з мапами дійсно кайфовим" (переклад не точний).

(@ tg)

Дерева

Це капець, але дерев не існує! Тобто кожен окреме дерево — існує, але якоїсь родини чи взагалі будь-якого об'єднуючого еволюційного порядку — не існує! Нічого типу "ссавці" чи там "плазуни". Дерево — це не родина, це спосіб вирости.

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

Та блін, цибуля ближче до кокосової пальми, ніж до капусти. Це жесть. І коли кажуть, що банан — це трава, а не дерево, то це тупо чухня, бо дерево — це коли щось схоже на дерево. :)

Дерево — це про зовнішній вигляд, а не про спорідненість. І коли на реддиті в треді з цікавими фактами пишуть, що дерева з'явилися набагато раніше трави, то то фігня. :)

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

Трохи більше тексту англійською: https://eukaryotewritesblog.com/2021/05/02/theres-no-such-thing-as-a-tree/

P.S. В коментарях теж купа цікавих посилань.

(@ tg)

Хотлайнкетплейс

Хотлайн ще 10-15 років тому, коли був розквіт маленьких інтернет-магазинів, повинен був стати повноцінним маркетплейсом. Зробити систему замовлень, всі види оплат, вибір доставки, чат з продавцем. Прибрати необхідність мати власний сайт (і почати генерувати сайти самому по бажанню продавця) і зробити інтерфейс для редагування товара — для продавця, замість безальтернативного XML. Зосередитися на модерації, контент-маркетинге й обкладанню покупця сервісами.

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

Тому вони увесь свій ринок просрали Розетці.

(@ tg)

Фрод на Амазоні

Зранку почитав цікавий тред у твіттері: чувак розповідає, що до його книжки (видавництва Manning) на Амазоні підконнектилися інші продавці та продають підробні книжки. Взяли ПДФку, друкують її у гіршій якості, не виплачують йому роялті, ну і мають на тому кращу маржу. Амазон бачить, що сток на книжці є, тому сам не замовляє її у видавництва. Скарги у сапорт Амазона не допомагають.

Франсуа (автор) пише, що зараз вище 50% шанс купити підробну книжку на амазоні, і краще замовляти напряму у видавництва.

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

Ми схожих кейсів начиталися, коли перероблювали Касту з флешсейлу на маркетплейс, і зробили так, що в нас товар належить постачальнику. Розклонували всі товари між ними та й все.

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

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

(@ tg)

Просто ору кожен раз з Ютуб Студії. Після публікації відкриваю її, там список моїх відео, в останнього 44 перегляди. Заходиш в це відео — каже 37 переглядів (дуже швидко, без підгрузки, наче ці дані були одразу). Нажимаю «детальну аналітику», а там підгрузка даних і 40 переглядів. Якщо промотати вниз, там ріал-тайм аналітика і 41 перегляд.

Мікросервіси! 🤣

(@ tg)

Благодійний стрім

Післязавтра буде проходити конфа JS+React fwdays (фронтенд мало у Ruby/RoR не перетворився, хаха), а перед нею ми влаштовуємо стрім — у п'ятницю 8 липня о 17:00 за Києвом, щоб зібрати грошей нашим волонтерам. На цей раз будемо збирати гроші на користь KOLO, за допомогою одразу трьох спікерів! Насправді не одразу, а по черзі, щоб замість балагану було цікаво. :) Дивіться який кльовий набор вийшов:

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

Ще раз: 8 липня о 17:00 (GMT+3), like/share. :)

(@ tg)

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

(@ tg)

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

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

(@ tg)

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

(@ tg)

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

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

Якщо стало ясно, що стаття не для вас, відправте лінку своєму другу-веброзробнику, щоб він прозрів, як я хитро промутився. 😁

(@ tg)

Вмварь продають броадкому за 61 млрд баксів! Це цікаво не тільки тим, шо вони могли собі купити за сто баксів, але пішли шляхом максимально широкої ліцензії задорого, але й передісторією. 😁

У 2013 році Майкл Дел викупив назад з біржі компанію, яку він заснував у 1988 році, за 24.4 млрд. Компанії було паршиво і публіка вважала, що вона скоро піде за іншими реліктами ери ПК. :) Вона залишилася акціонерною, але перестала бути публічною — він тоді пояснював, що хоче робити якісь різкі дії, щоб привести її до ладу, не звертаючи уваги на думку Wall Street.

З іншої сторони, є така компанія, як Elliott Management — доволі відомий інвестор-активіст. Займається тим, що купляє сток в компаніях, де можна його покращити (зробити дорожче), і влаштовує акції типу «зробіть шось щоб акції подорожчали». Ну і збирає навколо них інших інвесторів, які зазвичай пасивніші. Короткостроковими інвестиціями займається, короч, і вдовгу не грає.

Так от, ця компанія купляє сток в EMC (здоровезна дура, яка найбільш відома системами зберігання даних) і щімить їх на тему «розпродавайте частини компанії, бо так ми всі заробимо грошей». Серед цих часточок Наприклад, щоб вони продали VMWare окремо. Під їх тиском компанія наче так і збирається робити, і до них приходить Дел з «пропозицією, яку не можна відхилити». І компанія продається Делу за 67 млрд доларів!

Це найбільша угода серед технологічних компаній евер. Тож! Один Дел (компанія) в результаті додає 46 млрд боргів та ЕМС (з ревеню в 41 млрд в 21 році), а інший (Майкл) отримує собі в керування купу компаній навколо клауда і віртуалізації. Він колись у 90-х намагався вже створити щось типу AWS, але, кажуть, і ринок не був готовий, і у компанії був не той майндсет, а у 2008 вже намагався безуспішно купити EMC. Нарешті, типу. :)

Десь у 20 році в результаті цього вартість компанії оцінюється в 71 млрд (мені здається шо не офігєть як круто після покупки в 67, да?), а персональні статки Майкла в 50 млрд (схоже що форбсу здається навпаки ггг).

Борги віддавали з грошового потоку (free cash flow, це не прибуток, а гроші на рахунках), і ще якісь там фінансові схеми, я вже почав губитися (та й інформації публічної недостатньо). Таким чином, замість сумарних 57 після того як компанію зробили приватною і придбання ЕМС, на січень 22 року борги компанії — всього 17 млрд.

Так ось, на сьогодні Майкл володіє 41% вмварі (через свою частку в 52% компанії Dell), і з продажу в 61 млрд отримує 25 млрд! 🤑

(@ tg)

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

https://www.youtube.com/watch?v=YJXdlhkbdu4

(@ tg)

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

Бо він хоч і народився у ФРГ, але був членом Юзос, молодіжної спілки соціалістів, фактично комсомолу Західної Германії. Я не знаю, чи їх якось підтримував совок, але 100% молоді соціалісти завжди захоплювалися цими красивими ідеями про рівні можливості людей (і тому так брудно тирять гроші замість того щоб їх заробляти, чи що...)

Тобто поганий світогляд в чувака склався ще коли він був студентом. І найнеприємніше — останні 25 років всі канцлери Германії такі. Меркель виросла в ГДР, і входила в їх версію комсомолу, FDJ — якби номінально, але схоже що з вивченням рос мови у школі було достатньо, щоб вкинути ідеї того, що поцовате лідерство то таке, але ж російська культура і народ то ого-го! Як ото з Тілем Лідеманом, тільки він такий «ой сорі», а Ангела трошечки замазалася і через те три місяці мовчала.

Зі Шрьодером типу все ясно, на Газпром працював взагалі — але це результат, але яка ж причина для такої русофілії? У 19 років увійшов до лав Соціально-Демократичної Партії. Якась дивна схожість історій, не знаходите?

З Гельмутом Колем все наче краще, вікіпедія каже «допомагав Рейгану щімити совок», що непогано — але я занадто малий, щоб пам‘ятати щось і занадто лінивий, щоб читати його біографію уважно, і так зрозуміло, що останніх три чуваки риють у зовсім іншому напрямку.

З такими лідерами Германія була очевидно приречена, бо вони всередині всі люблять росію. Відстій.

А що там Макрон, до речі? Франція відчуває любов до росії через те що Сталін їх притягнув як «переможців» у другій світовій. Пам‘ятаю як я це читав у совкових ще історичних енциклопедіях і там ніхто причину не пояснював — а сам я зрозуміти не міг і дуже дивувався тому ходу. Геніально, таку бомбу підкласти. З іншої сторони підключення до совку було не таке потужне, як в Германії, але! Він 77 року народження, його молодість пройшла у момент дешевої нафти та слабкого совку/росії — я впевнений, що він просто всередині не розуміє, який же відстій ця культура (у сенсі як культура плісняви).

Дякую що поринули зі мною у цей глибинний аналіз. Впевнений що таким чином я все розсекретив і лишається їм всім тільки сказати «ай-яй-яй»...

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

(@ tg)

Якщо ви ніколи не стикалися з Приватбанком, ви не знаєте, що таке біль.

(@ tg)

Трошки замучався, але зробив відео за прогресбар на вчорашньому стрімі. Взагалі результати стріму фантастичні, ми зібрали 450 тисяч під час стріму і ще 100к до теперішньго моменту! Ви всі дуже круті!

Тож дивіться відео, якщо цікаво, та долучайтесь до збору коштів, якщо ще не встигли: https://fwdays.com/event/stream-zaharchenko#donate.

(@ tg)

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

Сьогодні вже швидше вийшло, я згадав про adjustment clip в Resolve й оці наближення лиця різко стало просто робити. Ще треба придумати як швидко робити mute на різні шуми, щоб життя взагалі стало прекрасним. Виявив сьогодні, що я роблю паузи не у тих місцях, де було б зручно порізати, а у тих, де можна паузи й не робити.

P.S. Хто здогадається, що за віскі на фоні — може взяти з полки пиріжок. :)

P.P.S. Валера, ти не рахуєшся, бо це чіт. :)

(@ tg)

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

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

Тож велкам у цей четвер о 18:00 на стрім з Артемом Захарченком. :) План такий: обговоримо, що Артем робить по благодійності, а потім всяке технічне. Артем працює у namecheap, який зараз другий за розміром реєстратор доменних імен у світі, тож там є що цікавого обговорити. :)

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

(@ tg)

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

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

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

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

З Шольцем схоже, членство у Jusos не пройшло дарма.

З Байденом теж! Він все життя прожив у стані, коли совок вважався силою, здатною на рівних боротися з США. Тому він і зараз обережно себе поводить (не про висловлювання річ, а про дії).

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

(@ tg)

Ого, Ютуб мій відос про 1С почав рекомендувати людям на головній, і туди набігло в коментарі зовсім різних людей, прикол. :) Цікаво, що каунтер на публічній сторінці перестав оновлюватися саме як ютуб почав наганяти трафік — чи то хитра система кешування, чи то хитра система протидї чомусь. :)

Цікаво, я такого ще наблюдав, бо занадто вже технічні попередні відео були, а тут більш загальна тема — легше людям заходить. То зараз 5.5 тисяч переглядів вже з CTR у 5.2% з головної сторінки. Цікаво б дізнатися чи це багато чи мало?

Так, на які теми в нас ще є технічна зрада? 😁

UPD Ну короч на 7.9к воно зупинилося, ютуб вирішив, що час припинити рекламувати точно так різко, як і увімкнув. :) Складно це все :)

(@ tg)

Повний дуплекс

Слово "дуплекс" дуже смішне, а пост буде дуже серйозним! 😑

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

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

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

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

То що робити? ЮЗАЙТЕ НАВУШНИКИ. Це зробить ваше спілкування повнодуплексним, вибачте за вираз, і ви зможете мугикати як у нормальному житті.

Авжеж, бувають кейси, коли за ноутом одночасно дві людини. Ну тоді майте на увазі, що буде важко, або по навушнику у вухо всуньте. 😁

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

У нових маків (ті що м1) зробили масив мікрофонів (3 чи 4 штуки, не пам'ятаю) і гасять шуми фазовим зміщенням, тож вони в принципі працюють непогано, як мікрофони, тільки низькі частоти гублять трошки.

P.S. Відправьте посилання на цей пост тому, хто вже втомив вас своїм недо-дуплексом. 🤌

P.P.S. Якщо вам здається, що слово дуплекс потребує якогось жарта, велкам у коментарі. 😏

P.P.S. Якщо вам хтось прислав цей пост, можливо прийшов час роздобути собі навушнички.

(@ tg)

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

Чи є гарна ідіома українською, щоб сказати "to make a long story short"? А відео дивіться ось тут: https://youtu.be/7bq8YZ2JZHM

P.S. Підпишіться на канал в ютубі, а то він не дає Shorts робити, поки 1000 підписників немає. :)

(@ tg)

Пам'ятаєте, я пів року тому писав, що у Cloudflare крута стратегія? Вони прям реально у Го грають, новий анонс Workers for Platforms просто офігєзний.

Історія така: є воркери, це типу serverless на джаваскрипті, можна невеличку логіку виконувати на серверах Клаудфлера, така собі лоу-кост альтернатива AWS Lambda. І є чуваки, які зтикаються з такою ж проблемою, наприклад Шопіфай хоче виконувати код плагінів в себе.

Клаудфлер каже — в нас така гарна платформа вийшла, давайте ми її вам продавати будемо. Вам — це не розробникам, це іншим компаніям, які вже дають сервіс розробникам. Приходиш до CF, інтегруєшся, і потім маєш змогу дати розробникам писати скрипти для своєї платформи, які виконуються на серверах Cloudflare.

Прям дуже подобається. 😁

(@ tg)

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

На дворі 14 вік, Золота Орда вже років 120-140 існує (з 1240), на сцені темник Мамай. Темник — це значить керував великим військом, тьмою. Він хоч і не Чінгізід, але хоче стати ханом. Аж тут ханом стає Тохтамиш.

Тож Мамай домовляється з Ягайлом, великим князем ВКЛ, зробити атата Золотій Орді, отримати здобич, а Мамаю власне всю Орду (ну як піде).

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

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

Онучок цей, Олесько — один з засновників козацтва і відомий під прізвиськом "козак Мамай" на честь діда. Живе у Глинську, тобто це перший князь Глинський, Олександр — помер після 1399 року.

Потім його пра-правнук Михайло підіймає повстання 1508 року вже у Речі Посполитій і в результаті поразки всією тусою ховаються у Москві де племінниця Михайла народжує Івана Грозного. Ото вже невдача. :/

Прикольний штрих до історії! Як називається битва Донського і Мамая? Куликовська! Ото вже скидання ярма на вимогу іншого ярма, гагага! 🤣 Схоже, що це одне зі «знищили увесь повітряний флот і три тисячі танків» від Москви.

(@ tg)

Чому Росія перемагала

А ви про це задумувались? Чому 300 років, від підписання Хмельницьким (невдалої) угоди з Московією, Україна не могла вирватися з тих вбивчих обіймів, попри доволі-таки серйозні спроби? І чому зараз, схоже, виходить?

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

І боротьба українського народу після смерті Хмельницького не стільки за збереження домовленостей чи незалежність, скільки між собою — призвела до 300+ років поневолення.

Історія повторювалася багато разів. Мазепа пішов проти царя? А хтось буде за, заради власного зиску. УНР падає під нападом більшовиків? Холодноярська республіка і сама по собі буде жити!

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

Саме тому вони стільки разів перемагали.

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

Тож, як це не дивно уявляти, Україна зараз знаходиться в найкращому за останні 800 років стані! Ще й сусіди, на відміну від 20 сторіччя, допомагають. :)

(@ tg)

Бачили який збір грошей ДОУ влаштували? Вийшло дуже кльово, імхо. :) Я там трохи взяти участі, зробив власне механізм трекінгу грошей.

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

Тож я створив невеличкий сервіс, якому в аргументи можна передати суму, валюту і тег (можна подивитись на посилання на сторінці збору коштів ДОУ) — а він генерує спеціальний order_id виду cba-123356-#some-tag1~#some-tag2. Авжеж, як справжній програміст, я одразу зробив, щоб можна було багато тегів задати. :) Тобто йде до фонді по апі та генерує замовлення с заданими параметрами, а потім туди відправляє браузер — це тому на сторінці фонді вже неможливо змінити суму.

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

А потім ці теги складаються в поле типу text[] в постгрес, ну й рибка в сітці. :) Зробив питання у метабейзі просто на суму грошей, віддав апі до нього — а Ігор з ДОУ зробив прикольну візуалізацію того і вийшло супер.

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

Гарно, що це вже дуже повторюване, тож можна робити в різних варіантах. Воно, власне, ще непогано спрацювало як тест системи проєктів для нового сайту ПЖ. :)

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

UPD. Ще додатково дешборд зробив.

(@ tg)

Мені вчора постгрес підкинув таку подляну з регістрами буковок, шо я аж написав пост з вирішенням, як в старі часи. :) Я вже забув про кодування і всяке таке інше, а тут воно мені неприємно нагадало.

(@ tg)

Колись давно читав на Quora одкровення одного чувака про те як він став дурним (у сенсі тупим, а не навіженим). Якщо коротко, то там він розповідає, що йому прийшлося скоротити кількість одночасних проєктів, навчитися занотовувати, і перестав читати комікси та НФ. Натомість став більш розслабленим і більш щасливим. А потім врачі знайшли причину — забиті артерії — і він наче повернувся до "розумного" життя. :)

Ну і типу така картиночка, в цілому окей: ти можеш менше, але зате й непокоїшся про все менше. Але ось тут Ден Луу запостив іншу історію, з дещо менш веселою перспективою.

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

Так он, чувак від цього жаху став дурнішим, і процес відновлення зайняв 5 років. П'ЯТЬ. 😡 Каже, що це поглибило його депресію, і фільми з книжками не розважали, і відчуття власної смертності не залишало. Така собі перспективка.

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

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

Чи може то сонечко так впливає. 😁

(@ tg)

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

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

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

Вочевидь, він вважає, що суб'єктності в України немає, обидві останні революції були спродюсовані з США (чи з Британії). І що Росія воює з НАТО, для якого це проксі-війна, як колись у багатьох "гарячих" точках.

Битва за Донбас для путіна це зараз останній серйозний аргумент у цій війні. Що вони будуть робити, коли почнуть її програвати? Трошки розтягнути агонію — може мобілізацію, наприклад. Але якщо спробувати поставити себе на місце neue Führer (що складно, але удаймо) — раз Україною віддалено керує США, то треба прибрати керувалку. Прибиваємо верхівку і все, армія перестає працювати ефективно, виконавча влада перестає працювати ефективно, країна у безладі, відчаї та анархії. Так би мовити, мінімальна ціль досягнута.

Чи вважаємо ми, що наступить довгостроковий безлад (=Руїна) після одномоментного прибирання уряду — абсолютно неважливо, важливо чи вважає так герр х-ло. А він, дуже вірогідно, саме так і вважає. І вже довів, що йому не шкода нічого у цій війні — ні домовленостей, ні економічних зв'язків, ні 500 років побудування міфу про велич і армію (і назовні, і всередину), ні власного іміджу. Ні-чо-го.

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

Звичайні аргументи проти:

1️⃣ Вони ж не використовують хімічну зброю, тож і тут напевно не буде ескалації? — Хімічна зброя кардинально військових питань не вирішить, тим більш що лінія фронту занадто довга. А ось відносини зі всіма з "дуже погано" до "зараз ми вас пацифіцируємо насильно" змінить — і може призвести до активних дій інших країн нарешті. А ядерна зброя — вирішує.

2️⃣ Британія сказала, що без консультацій буде активно діяти у випадку ядерної атаки. — Ось сценарій: Росія вночі лупить Тополем по Урядовому кварталу, а о 6 ранку заявляє про згортання "операції" і повномасштабний відступ зі всіх позицій. Питання: чи у такій ситуації Британія піде на те, щоб зробити щось активно погане Росії й ризикнути розпалити конфлікт у той момент, коли він, здавалося б, почав вщухати?

3️⃣ Читав недавно статтю, що у Кореї обидві сторони засцяли використовувати атомні бомби, всі проксі-війни відтоді їх не використовують і не будуть. Це тупий аргумент, авжеж, тому що це не звичайна проксі-війна, ВВХ свідомо все поставив на кон.

💥 Аргумент проти, який здався мені більш переконливим, мені навів знайомий з Каліфорнії (у сенсі місцевий, не іммігрант). Для США питання надзвичайної важливості не допустити використання ядерної зброї. Бо її успішне застосування стає чітким сигналом для Китаю, Ірану, Ізраїлю, Пакістану, та можливо інших, що володіння ядерною зброєю — наріжний камень державної безпеки. І це різко робить світ сильно більш нестабільним.

Власне, способи забезпечення того і є аргументом. Перший — у військових США є доволі сталий підхід до неофіційної комунікації (те, що вони називають backchannel) з арміями інших країн. І вони 100% вже попередили всіх у ланцюжку виконання удару в тому, що вони понесуть персональну відповідальність. А "тобі точно хана" це трошки більш переконливо, ніж "скоріш за все країні гайки".

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

🏁 Авжеж, це все засекречено, тому це більше роздуми, ніж підтверджені нові факти. Але історично США таке полюбляють практикувати. :) Ось така прутня, малята. 😒

(@ tg)

Angst

У Рамштайна вийшов новий альбом, що для мене прям подія-подія. 😁 Це група, з якої я почав уважно слухати музику, а не пісню звідти, іншу звідти... Не знаю, чи це значить, що вона сформувала мій смак на музику, чи допомогла його знайти, але я досі їх слухаю, тож новий альбом це круто. Нажаль, в мене не вийшло його послухати в той самий день (чув би я сам себе 10 років тому...), але подивився новий кліп — Angst.

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

Короч кліп про те, що нас телевізор (в широкому сенсі, я так розумію) всіх роз'єднує і ми всі такі воюємо, хоча раніше жили так поруч один з одним. Ну не на часі якось, так?

Я розумію, що і пісня була написана рік-два тому, і кліп знімали ще у 21 році напевно, і група з іншої країни... Але і Тіль зашкварився на виступі на параді у Москві, і Германія в дивному становищі, і війна не як у 14 році, коли якийсь локальний конфлікт на околиці світу — а майже третя світова, як мінімум на порозі.

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

(@ tg)

За тиждень до війни ми записали новий випуск подкасту RTFJ і якось воно так і лежало собі без руху взагалі. Якось не на часі було і все таке. Але здається що сидіти на тому теж сенсу немає — і today is the day. :)

Гостем був Максим Гарнець, архітектор з Уклону (вони просувають бренд tech/uklon, щоб не було тупих жартів, але ж ви розумієте, про що річ), і випуск вийшов напрочуд цікавий. Крутий продукт — успішно конкурувати з Убером і Болтом з їх інвестиціями це точно складно, круті складові — у подкасті послухаєте. :)

Long story short:

YouTube 👉 https://bit.ly/3Kq52Aa

SoundCloud 👉 https://bit.ly/3vNIgN9

Apple Podcasts 👉 https://apple.co/3LpguNz

Google Podcasts 👉 https://bit.ly/3KpSlW3

(@ tg)

Звіт ПЖ

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

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

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

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

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

Що там є цікавого:

Власне й все, ідіть подивіться, а я послідкую, чи не стане, бува, постгресу погано, чи ще щось. Ось вам скриншот фантастичного інтерфейсу наостанок. Я певен що такого польоту фантазії ви ще не бачили. 😁

(@ tg)

Ведмеді

Я таку штуку зранку зрозумів, не можу не поділитися. 🤣

Значить історія така: "ведмідь" — це ж евфемізм для назви звіра, типу як "косолапий" чи "вуйко", тільки більш рання. Це замінник табуйованої назви звіра ("того, кого не можна називати"), який сам став табуйованим. Я якось читав припущення, що до того слов'яни ведмедя називали "бер", як германські народи.

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

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

Але розповісти хотів не про те — ми тут зранку жартували, що мож ведмеді з півночі приходили, з арктики? Тому й арктоси?

Ясно, що тут логіка працює у зворотню сторону! Полярна зоря, яка (грекам, на їх півдні) постійно вказує на північ, знаходиться у сузір'ї Малого Воза — або Малої Ведмедиці. Себто Арктика — це Ведмежатня. 😁 Що Вікіпедія теж каже, але чого б я туди про ведмедя пішов читати. :))

P.S. Цікаво, чи насправді слов'яне пройшли через два рівні словозамінників?..

P.P.S. А ще прикол про Арктойську країну — найпівнічніший край античної цивілізації.

(@ tg)

RegExp

Позаминулого вересня я виступав на JS fwdays'20, яку зробили онлайн-конфою, і ми зробили там фінт вухами: мені Андрій Листочкин ставив питання від людей до мого докладу — бо самому собі задавати не дуже. Ну і навпаки, я ставив питання йому — і, власне, тому послухав його доповідь. Доповідь була про регулярні вирази, ну типу \d{4}-\w+, оце все, ну прямо лікнеп такий.

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

Чому взагалі це згадалося — останнім часом з купи напрямків якісь срачі за регулярки лізуть. І я, чесно кажучи, прозріваю. Бо регулярки це офігенний інструмент.

Я навчився регуляркам ще на першому курсі, майже 20 років тому, і відтоді юзав їх дуже ефективно тисячі разів. Життя програміста дуже часто пов'язане з текстом, і простір між "розділи по пробілу" та "пора вже писати справжній парсер" — величезний. Простір, у якому, власне, і сидять регулярки, бо іфи та цикли заплутають куди швидше невеликої регулярки. Це вже не кажучи про те, що "справжній парсер" зазвичай куди більше часу і коду відійме.

І регулярки є всюди. Перейменування файлів у Total Commander? Заміна тексту у редакторі? В Excel? Знайти необхідне посилання серед сотень інших в джаваскриптовій консолі? Вичепити з опису транзакції ім'я?

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

А дурна слава йде через те, що під час розквіту Perl'a забагато людей настільки звикли використовувати регулярки, що застосовували їх навіть там, де їм не місце. Звідти анекдот "в хлопчика була проблема, він вирішив заюзати регулярку і тепер в нього дві проблеми".

Моя думка з цього приводу така: доки ти не навчився використовувати їх корисно, ходити та пропагувати "ой ні регулярки то погано" — це святкування невігластва.

(@ tg)

Брехливість

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

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

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

А от Росія це гівно жере сповна! І жерла усю історію, яку я можу зрозуміти. Що там зараз — ми бачимо на власні очі, увесь період застою вся країна підгоняла звіти під запити начальства, вся космічна програма була на соплях і виєбонах тільки щоб бути першими, під час правління Сталіна брехливі доноси та постійне життя у страху, а до того... Микола II з війною з Японією, яка так само відбувалася за повної впевненості (по звітах), що російська армія — ого-го!

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

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

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

(@ tg)

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

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

Пішов почитати коменти, думаю ну точно хтось доїбеться, так? Чувак пише: «ти там сказав the Ukraine, не треба так». Ну просто геній, пости не читаю @ в каментах сру. І через коротке обговорення: «зараз я спробую пояснити думку розгорнутіше». От реально хочеться тут «спершу зроби» використати, в мене просто згорів вихлоп повністю.

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

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

Тож давайте не будемо один одного за дрібниці зайобувати. Зупинимо придиркуватість разом!

P.S. Гарне слово видумав, га?)

(@ tg)

На доу запостили анонс: зарелізили апку, яка намагається перевіряти, наскількі ймовірні зв'язки людини з чимось неприємним (типу москалів). Там вже в каментах напихують розробникам за те, що они намагаються сразу взяти планку "це для ЗСУ та тероборони", а якість тої перевірки дуже сумнівна.

І я згадав, як мене у середині 10-х тримали по 3-5 хвилин на кожному вильоті та прильоті на кордоні — я в якийсь момент почав питати, чому, і виявилося, що якийсь інший Олександр Соловйов чимось завинив. Вочевидь, нас таких багато, я особисто знав ще двох — і почав при затримці казати побатькові та показувати права, це значно прискорювало процес. Якось раз було смішно, прикордонниця собі під нос пробурмотіла "може брат чи шо" — з однаковим іменем і різним побатькові? 🤣

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

— Золовйов! Золовйов! — заволав у телефон посеред ночі прикордонник; але з тої сторони його явно не розуміли, і він вирішив перейти на ініціали, — Зиґфрід! Отто! Людвіґ!

Чувак дуже сердився, що нічого не виходить, і коли побачив як я з нього волаю, почав прямо червоніти, реально як в якійсь комедії, сховався за двері, і заволав Зиґфрід-Отто-Людвіґ ще дужче. 🤣

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

(@ tg)

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

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

(@ tg)

Давайте спочатку історія, яку мені друг розповідав про свого прадіда. Жив він у Кам'янці-Подільському, який був до WW2 неподалік від кордона з Польщею — і був, власне, поляком. А тут хтось з сусідів у 30-ті роки йому шепнув, мовляв, бережись, здається етнічні чистки почалися — поляків вбивають. Як дізнатися, хто ти? По документах — які він спалив і таким чином залишився в живих. Здається, що достатня причина не любити совок, але до самої своєї смерті він лишався його прихильником.

В нас пів країни таких людей було, які страждали у тому потворному державоутворенні, а потім за ним же й сумували (а деякі і зара продовжують). Але де логіка?!

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

Коли вже країна стабілізувалася, заспокоїлася і призвичаїлася до своєї власної брехливості — типу у 70-80-ті — то стало трохи легше. А от у 40-50-ті — це ще є репресії, і ти не знаєш, хто з твоїх сусідів гб-шник.

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

І — опа — ідеальний громадянин Совка готовий. :(

(@ tg)

Давайте спочатку історія, яку мені друг розповідав про свого діда. Жив він у Кам'янці-Подільському, який був до WW2 неподалік від кордона з Польщею — і був, власне, поляком. А тут хтось з сусідів у 30-ті роки йому шепнув, мовляв, бережись, здається етнічні чистки почалися — поляків вбивають. Як дізнатися, хто ти? По документах — які він спалив і таким чином залишився в живих. Здається, що достатня причина не любити совок, але до самої своєї смерті він лишався його прихильником.

В нас пів країни таких людей було, які страждали у тому потворному державоутворенні, а потім за ним же й сумували (а деякі і зара продовжують). Але де логіка?!

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

Коли вже країна стабілізувалася, заспокоїлася і призвичаїлася до своєї власної брехливості — типу у 70-80-ті — то стало трохи легше. А от у 40-50-ті — це ще є репресії, і ти не знаєш, хто з твоїх сусідів гб-шник.

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

І — опа — ідеальний громадянин Совка готовий. :(

(@ tg)

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

⏳ Боротьба ця продовжується вже 800 років, з тої самої битви на Калці (це де Волноваха, до речі!). З великих подій потім, які змінювали хід історії, це напевно Битва на Ворсклі, Переяславські статті, Полтавська битва (знов Ворскла), може руйнування Січі (хз), захоплення УНР, і ось теперішня війна. Здається, що зараз Україна перший раз у більш-менш пристойному стані (з точки зору волі та єдності) з 14 сторіччя. Це капець, якщо подумати.

😖 Культурна різниця між нами та москалями — неймовірна. До мене це дуже довго доходило, бо я велику частину знань отримував з книжок — а які книжки були на полицях у 90-ті? БСЕ, БЕС, СДЕ (всі «С» - совєцький), і т.і. І хоча навіть після них та совєцьких підручників по історії я Московію недолюблював, але модель світу воно дає схиблену. Так щоб прям починати усвідомлювати — я це почав у 2009-му, коли сам поїхав туди та прозрівав з кількості агресії на вулицях людей один до одного. Касирка якось наорала на мене за те, що не вдавалося просканувати штрих-код. Але тільки ця війна показує справжню відстань. Орда — це не просто варвари, на жаль.

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

👹 Промивання мізків працює. Якщо почитати біографії німецької верхівки, вони всі там комсомольці (FDJ, Jusos, як не назови, а вуха стирчать), і це вочевидь залишає якийсь відбиток на свідомості й сприйнятті світу. Ну типу це ж моя молодість, не може Московія бути зовсім поганою, коли в мене були такі яскраві почуття і не боліла спина чи що там в них зараз болить. Людині загалом важко признатися собі, що 10 років юності витрачені на гниль впусту, тому й Московія якась туди-сюди. Як Тіль Ліндеман, який поїхав співати на параді (!) московитів. Ну каша в голові, бо юність засрали.

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

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

⚡️ Прочитав тут ще думку, що в нас багато корупції через те, що ми у складі орди дуже довго пробули. Але коли читаєш за часи Руїни й там кожен сам собі щось тягне... мені віє корупцією та брехнею від того. Хоча, авжеж, людська пам'ять коротка і зараз (дивись вище), а тоді козаки, схоже, не уявляли собі, що московити — то не поляки, не татари та не турки. Шкода, що не розуміли цього.

(@ tg)

AWS

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

Зробити скрипт, який закидує дані з цсв у постгрес у мене вийшло за день з невеличким. А ось потім щось пішло не так... Чомусь я вирішив замість простої схеми «осьо віртуальний сервер, там все запустили й поїхали», що треба якомога більше managed все мати, щоб потім це не підтримувати. Амазон же ж багато всього пропонує!

Значить вимальовується така схема: завантажуємо файли в S3, це триггерить Lambda, яка файл обробляє і складає в інший бакет, звідки його читає Athena через Glue, а показує дані QuickSight. Я зазвичай дотримуюсь правила «не більше однієї незнайомої технології на проєкт», але цей казався маленьким і гідним того, щоб зробити один раз надійно.

1️⃣ Lambda

Я тут задовбався, але може окремо напишу — в мене вийшло 5 абзаців, а в телеграмі є обмеження на довжину повідомлення. :( З цікавого в результаті: парсинг пайтоном ікселю на 7 мб на ноуті займає 7 секунд, на хецнері за 5 євро - 14, на лямбді - 40-50.

2️⃣ QuickSight

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

3️⃣ Athena

У цей момент я психанув, зарентив ec2 і запхав туди метабейз. Для метабейзу є сторонній коннектор для Афіни, тож, думаю, зара буде все супер. Метабейз поїхав, побачив дані, їх схему, єєє, перемога. Зараз все буде.

Тільки дата, за якою я хочу мати фільтр, це строка, а не date чи timestamp. Тому Афіна каже "вибачте, для цього оператор >=" застосовувати неможливо. Окей, знайшов, що схема даних визначається у Glue, змінив на timestamp зі string, як справи? Помилка, каже, Hive таку дату розпарсити не може.

Тож зробив я додаткову колонку, date.timestamp() * 1000 — ну там же ж Хайв, він точно захоче міллісекунди (я такий здогадливий, це жах). Фух, запрацювало!

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

4️⃣ S3

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

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

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

5️⃣ Інтерфейси

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

6️⃣ Ми тут

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

(@ tg)

У такі часи тягне узагальнювати поведінку націй. Було б цікаво почитати якісь дослідження, чи є сенс взагалі це робити, чи це анти-наукова фігня, але наразі це неважливо!

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

Але всі ми виховані на думці "французи-боягузи". І оця неоднозначність якось засіла в голові у мене, регулярно про це згадував, як про деяку несправедливість у відношенні до цілого народу.

Аж тут пришла нова війна і виявилося що ті, французи таки сцикуни — Черчіль влучно не тільки про Чемберлена сказав про ганьбу та війну, а й про них також. І Макрон там регулярно має "складні розмови" з путіним, і Ашани з Леруа не можуть зібрати яйця в кулак. 650 закладів Макдональдс зміг полишити, а Ашан з Леруа ллють сльози. І це ж тільки конс'юмерські бренди, наврядчи FM Logistic чи інші невідомі широкому загалу компанії щось з того приводу роблять.

(@ tg)

Написав у твіттері, напишу й тут. Увесь світ обговорював позавчорашній виступ симпатичної дівчини на московському телебаченні: ооо, не всі росіянці погані, ууу. А виявилося, що це знов пропаганда!

Закон передбачає до 15 років ув'язнення. Але коли ми з друзями обговорювали одразу після події, то консенсус був у тому, що якщо вона не загибне, то наврядчи вона зробила цей виступ з власної ініціативи. Але сюрприз! Суд призначив 30 тисяч рублів штрафу. У ситуації, коли на чорному ринку за рубль дають триста рублів, це просто смішно. Уявіть собі, замість того, щоб тебе відлупцювали у відділку, тобі кажуть — віддаси 5% премії за виступ. Непогансько!

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

Imperial Tobacco видало заяву, де каже "безпека та добробут <російських співробітників> є нашим ключовим пріоритетом у цьому процесі..." Напевно їх там бомблять, так? Сидять, мабуть, по схованках? Капець... та сама історія з Reckitt Benckiser (дюрекс/варніш/купа всього), з ФІліп Моріс, з Ашаном та Леруа... росію до кам'яного віку заганяти треба не тому, що хочеться, а тому, що це просто запобіжний засіб від повторення!

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

Muscovia delenda est.

(@ tg)

Потребую допомоги залу! 😁 Спілкуюсь останнім часом з "Повернись живим" і в них є цікава проблема. Історія починається з того, що вони зробили фінансову звітність відкритою, найпростішим шляхом: виклали xlsx з нею на OneDrive. Це кльове рішення, але скейлиться воно до якогось масштабу — зараз там 360 тисяч записів тільки за цей рік, і всі юзкейси розвалюються: фільтри в ікселі тормозять і показують тільки перші 10 тисяч значень, пошук тормозить, агрегувати дані неможливо.

Ми вчора обговорили і визначили два основних юзкейси, які можна насправді розділити:

Що я думаю: скласти оці всі дані у SQLite (або постгрес, здається, що неважливо), і дати якийсь інтерфейс до них без sql'ю. Що я вже подивився:

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

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

(@ tg)

Цікаву тему прочитав у пана Макса Бергмана, який у 14 році працював у американському уряді і приймав участь у підримці безпеки України. Коротко: США зазвичай допомагають армії країни зброєю та тренуванням, але у нашому випадку не вистачало часу. Доставити Джавелін — це від 6 тижнів плюс ще час на тренування. А конфлікт настільки гострий, що двох місяців на апгрейд ситуації немає — ну ми це й самі пам'ятаємо.

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

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

(@ tg)

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

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

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

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

(@ tg)

На дворі весна і путєн сходить з розуму, але життя не зупиняється, плюс ми це записали ще кілька тижнів тому. Тож новий випуск Right Tool For the Job, на цей раз з дуже відомим у ютубі білорусом, Льохою ITБородою — тому російською мовою (спойлер: у наступному випуску все нормально :)).

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

SoundCloud 👉 bit.ly/3h5LPaF

Apple Podcasts 👉 apple.co/34ZqBsC

Google Podcasts 👉 ​​bit.ly/3H7Mx1F

(@ tg)

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

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

Ще один цікавий момент був, коли прийшла соцслужба через те, що хлопчик 10 років біло-червоно-білий прапор у школі намалював, прийшли до мами і кажуть: напевно, прийдеться відбирати у вас дітей, а що ми зробити можемо... Ну у сенсі що? Банально італійську забастовку можете, ну ви ж бачите, що це абсурд зовсім? Бачать, але виконують.

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

(@ tg)

Щось мене пробило ностальжі, можна я вам розповім історію про геймінг у сиву давнину 94 року?

Нам з братом неймовірно пощастило й у 94 році в нашому житті з‘явився 486SX25 (досі не знаю звідки). Один з першої партії четвірок в Україні, я так розумію — наймолодша модель проца (на 25 мгц і без сопроцессора), вінт на 120 мб (як загалом на трійках були), і 4 мб ОЗУ (це важливо для подальшої історії).

І там на ньому було кілька базових ігр, а потім папа з роботи приносив різне, типу перших гоблінів, а потім сталося чудо і ціною відсутності диска протягом кількох тижнів в нас з‘явилася купа ігор. В тому числі дум, який не запускався, тож ми шпілили у вольфенштейн, у танчики (так, за 20 років до всіх, лол), етц.

Чому не запускався? Ось тут складно! Дум хотів 4 мб ОЗУ, які в нас наче були, так? Але під час запуску комп'ютера виконувалися інструкції у CONFIG.SYS та AUTOEXEC.BAT, які запускали різне — драйвера для відео (бо ж VGA, а не EGA, аж олдскули зводить), резидентну програму (це типу демона зараз) для перемикання розкладки клавіатури, волков коммандер (передав би привіт Сєві, на жаль не читає мене), ну й таке інше.

А ми, вочевидь, не сильно розчехлялися, що відбувається. А потім у нас в гостях знов був той самий друг батьків, завдяки якому всі ці ігри з'явилися, і навчив: під час запуску натискаєш F6, і дос запускається у щось типу safe mode, без виконання всіх тих файлів. Плюс написав нам doom.bat, який щось підгружав (підозрюю, що вга-драйвер, і може ще щось).

І воно поїхало. Після гоблінів, танчиків і вольфенштейну це була магія. Воно снилося мені у снах. Я ридумував історії, які відбувалися у тому світі. Намалював скриншот з дума у школі, коли на малюванні була "вільна тема". :))

А потім сталося неймовірне. З відрядження до Києва папа привіз ще 4 мб ОЗУ і звуковуху. Пройшло майже 30 років, а я досі пам'ятаю своє хвилювання, коли замість натискання F6 я у Волкові навів курсор на doom.exe, натиснув Enter і воно запустилося. Серце стучало що капець. :)

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

P.S. Думаю, що вся ця двіжуха з компами — це тупо робочий комп вдома, бо їсти було нема чого, а комп'ютер вдома стояв. :)

(@ tg)

Чи можна полюбити код іншої людини

Накаталися з малим з гори (тааак, цей момент прийшов, я катаюся на лижах разом з сином!), замучився і відкрив ютубчик повтикати. А там новий подкаст ДОУ, і прям у нарізці на початку Діма Малєєв каже "я ніколи не бачив програміста, який відкриває чужий проєкт і каже: боже, яка красота".

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

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

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

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

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

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

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

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

На мене, наприклад, дуже вплинув код Mercurial. Метью, автор Меркуріалу, дуже багато уваги приділяв простоті архітектури та коду, зворотній сумісності, когерентності функціоналу й обмеженості фіч, які попадають у ядро. Тож у 2008-му я був тим програмістом, який відкрив чужий код і сказав — боже, яка краса! 😁

Це був не перший і не останній раз, але найяскравіший для мене.

(@ tg)

Завдяки Борису Джонсону я дізнався, що назва Foursquare - це не аллюзія до «на всі чотири сторони», чи радше не тільки аллюзія, а ще й окреме слово, яке означає «міцно, із завзяттям і переконанням, безкомпромісно». Типу будівля може stand foursquare, скажімо. Прикол реально. :)

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

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

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

(@ tg)

Омікрон

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

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

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

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

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

Рейтинг: 3/5, свідомість не губив, до лікарні не потрапляв, але рекомендувати не можу. 😁

(@ tg)

Думав, що недочекаюсь. :) Ми випустили третій випуск RTFJ, на цей раз — з Єгором Назаркіним. Дуже прикольна розмова вийшла! Єгор зараз Engineering Manager у HealthJoy, в минулому займався організацією пайконів, та й загалом дуже відомий у Python-ком'юніті.

В нас вочевидь трохи розбігаються погляди на деякі технології, хехе, але ми норм пообговорювали і пайтон, і бази даних зачепили, і проблеми зв'язку у Сибіру. :))

Кароч велкам подивитися і не забувайте ділитися з оточенням. :)

На подкаст-платформах (або шукайте Fwdays Tech Talks у вашій апці):

SoundCloud 👉 https://bit.ly/3H4iysi

Apple Podcasts 👉 https://apple.co/35fzcag

Google Podcasts 👉 https://bit.ly/3qZyeaI

(@ tg)

Колись у сиву давнину (навесні 2017, щоб бути точним) написав нам OWOX з цікавою пропозицією: додайте наш скрипт на сайт і ми перекинемо всі ваші події у веб-аналітиці в BigQuery.

BigQuery - це такий Data Warehouse від Гугла, який вміє ворочати ну дуже великими обсягами даних. Тобто суть пропозиції у тому, що ми зможемо аналізувати те, що відбувається, не так, як задумано у Google Analytics, а як завгодно. Ну дуже цікаво, погодьтеся? Єдина річ — що вони за те хотіли доволі багато грошей. Не пам'ятаю суму, але це точно навіть не тисячі доларів на рік.

Скажу вам, що жаба для мене як мотиватор схоже непогано працює. У сенсі ну скільки там тієї роботи — записати дані у BigQuery? Зробив на фронті, щоб події GA копіювалися нам в спеціальний апі, той скидає їх у кафку, а потім з кафки перекидається у BigQuery. Все супер, і потім ми з того виростили свою аналітику з ClickHouse'ом — до речі, по тій самій причині, BigQuery недешевий, коли даси йому складне запитання. :))

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

Ну типу інжиніринг від Гугла, що ви взагалі очікуєте. 🤕

Так і була в нас кілька років забита у залежностях стара версія, від лютого 19-го року. А вчора настрій був, сів, вичистив з коду останнього користувача і прибив лібу з залежностей. Кайф. ☺️

А по мотивах тих страждань я написав власну лібу, яка просто використовує HTTP і тому не ламається. Не дивлячісь на назву, ми її для бігквері вже не юзаємо, а як інтерфейс до гугла - аж бігом. :)

(@ tg)

colors, faker et all

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

А на сторінці faker.js ще додатково написав "що відбулося з Аароном Шварцем".

Зовсім випадково в мене є кілька думок з того приводу!

1️⃣ Те, що написав apenwarr: ти подарував свій код цьому світу. Які взагалі претензії? Ніхто тебе конкретно не просив нічого робити. Ти зробив, воно тепер популярне. Молодець, використай це для розвинення власного бренду.

2️⃣ Те, що написав Армін: такі історії відвертати увагу від справді важливих речей. Краще б компанії давали гроші авторам curl'у, openssl чи libxml2, а не авторам colors.js та faker.js. Плюс він кльово підмітив: Github Sponsors, який наче намагається вирішити проблему з компенсацією зусиль авторів, дивиться не там, де треба (як от в історії з openssl), а там, де є світло (як в анекдоті з пошуком ключей).

3️⃣ У npm є дві величезні проблеми. Перша: замість конкретної версії дуже легко вписати "щось типу версії 1.2.0", і воно автоматом при звантаженні само вирішить. І в результаті те, що було при розробці, при тестуванні та в продакшені — це можуть бути різні набори коду. Так, можно вказати конкретну версію, але так роблять тільки дуже свідомі люди. Їх пара десятків у всьому білому світі, бо більш свідомі просто не пишуть на ноді.

Друга проблема: якимось чином простота публікації пакетів призвела до лефтпадів та isEven. У світі пайтона (де з залежностямі можливо все ще гірше) чомусь такого не відбулося, а от у світі ноди на npm така кількість бруду, що це просто звіздєц. І colors/faker це не совсім лефтпад, але це точно не інфраструктура, яка вкрай потрібна.

4️⃣ Якого біса приплітати Аарона до цього? Не пам'ятаю, щоб він закликав опенсорсних авторів нападати на капіталістичних свиней заради копієчки. Леніна треба було згадувати.

(@ tg)

Висить у табах сафарі на айфоні в мене стаття під назвою “The internet made defensive writers of us all”. Все хотів про неї написати, але якось не вдавалося слова до купи зібрати.

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

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

Але це небезпечно! Варто було в інтерв‘ю для ДОУ згадати, що мене дратують в айті новобранці, яких не цікавить нічого, окрім грошей, сходу знайшлася купа народу, яка зробила далекоглядні висновки. І що у Касті нікому гроші не платять, і що окрім овертаймів в нас тільки овертайми, і дідовщина, і взагалі в дупу довбимося замість програмування.

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

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

Гарних усім свят! 🎉

(@ tg)

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

Бо Російська імперія свого часу не прийняла «єрєсь» від римського папи Григорія XIII. Ну типу в нас тут свій патріарх є і він все порішає. Я не знаю, хто там кому лікар — чи то патріарх у Стамбулі не схотів згоджуватись, чи московити — схоже що перші, бо там є ще й новоюліанський календар, якась хитра дурня.

А потім, у 1918, УНР перейшла на «новий стиль» - з юліанського на григоріанський календар. А церква — нікуди не перейшла! Напевно, московський патріарх підтримував царя, тож для них це було не на часі.

Повертаючись на початок — а чому ж дратувати? Бо дивно, але з моїх знайомих ніхто не замислюється, а чому ж Різдво - 7 січня? А ось так. Воно таки 25 грудня.

Вже Саудівська Аравія перейшла! У 2016 році, теж прогресивні дуже. 😁 А що там ПЦУ втикає?

(@ tg)

E2EE у чатах

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

1️⃣ Найочевидніший — що здебільшого реальна захищеність каналу нікого не турбує. Ну то не сюрприз. :)

2️⃣ В Телеграма найкращий маркетинг. Вони пишуть пости-відповіді на звинувачення від Моксі (засновника Сигналу), які люди шлють один одному як гарний приклад того, що Телеграм молодець. А там жоден пункт звинувачень не заперечений, розмова про інші речі. Файний месседжинг. 😤

3️⃣ Найцікавіше — телеграм не захищений з точки зору zero-trust тусовки, усіх цих веб3 та й всього іншого. Але! Цікаво Мачай відмічає — чому протести у Гонконзі використовували телеграм? Тому що у ситуації, коли конкретно тобою починає цікавитися держава, месседжер — то вже і близько не проблема. Воно тупо може подивитися, хто з людей був на протесті за даними з телефонних сот.

А ось юзабіліті, відсутність шарінгу усіх деталей (номера телефону) по дефолту всім у чаті (на відміну, до речі, від «сек‘юрного» Сигналу), можливість створювати справді гігантські групові чати (тобто паблішінг платформа) - це все суперцікаво з точки зору всього двіжу.

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

Висновків не буде, бо в мене їх нема. 🤣 Усіх з Новим Роком! 🎉 Бажаю, щоб висновки приходили простіше, а інсайти — частіше! :)

(@ tg)

Є такий чувак, Ден Луу, у твіттері висловлює цікаві думки. Він і пости пише цікаві, але через його графоманство то майже книжки, важкувато це читати. Він і у твіттері графоманить, але не про те мова. :)

Так ось, він зачепив тему, чому щось зробили колись, а не раніше, і як один з прикладів згадав про системи контролю версій, у такій прогресії: RCS -> CVS -> SVN -> git. Типу, чому концепції гіта, який вочевидь багато чого робить краще, ніж SVN, не видумали раніше? І ось тут мені є що сказати, бо раніше я був version control junkie. :) З роками попустило (не біжу у pijul контріб'ютити), але у гарячу епоху кінця 00-х я був одним з топових контріб'юторів у Mercurial.

Значить відповідь на запитання проста — нюанси губляться у роках. git ні в якому разі не продовження svn, це тупо інша гілка розвитку. Гіт — це продовження BitKeeper'a, яким користувалися розробники ядра лінукса перед тим. Не тільки, ще був такий проєкт, як monotone, який доволі багато інновацій зробив: згадується, скажімо, використання хешу вмісту комміту та його батьків як ідентифікатора комміту. Тобто цій властивості ми завдячуємо саме monotone, а не генію Лінуса. Він про монотон відгукувався не дуже — бо воно екстремально повільне було, але доволі багато властивостей саме звідти.

Ще була така штука, як Darcs, на Хаскелі, але це теж паралельна гілка розвитку, там доволі цікава теорія латок (the theory of patches). Тобто замість використання DAG (Directed Acyclic Graph), як було у monotone, git та Mercurial, вони юзали латки, які збиралися докупи спеціальним алгоритмом. Який під час деяких мержів мав експоненційну складність, тож збирання репозіторю докупи іноді займало вічність... Але в нього є послідовник - Pijul, здаля цікаво виглядає.

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

(@ tg)

Знаєте, що таке Follow Focus? Це така система наведення фокусу для знімання відео, коли оператор знімає кадр, а фокус йому наводить асистент, Focus Puller.

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

Але тут DJI (так, той, що коптери робить) показав нову, дуже інноваційну камеру - Ronin 4D. Це повноцінна камера зі змінними об‘єктивами, вбудована у стабілізатор (gimbal), з окремим дісплеєм.

Тєма: ти тримаєшся за дві ручки, а під правим великим пальцем колесо для фокуса. А додатково зверху на камері - LIDAR. І на моніторі зверху на картинці (вочевидь двомірній) показується карта глибин того, чого ти знімаєш.

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

Воно все трошки недешево коштує, понад 7 тисяч, але за хайтек треба платити. Файний девайс. :)

(@ tg)

Є така річ, як веб-аналітика: зберігаємо інфу про те, що робить користувач, у БД, а потім можемо дивитись на те і щось собі вирішувати. БД — це Google Analytics, чи Firebase, чи, у нашому випадку, власне сховище.

Скажімо, користувач щось додав у кошик? Відправимо подію «кошик». Перейшов на оформлення - «чекаут», зробив замовлення - «ордер».

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

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

Прилітає баг від аналітиків: близько 20% замовлення карткою з аппок (айос/андроїд) не попадають в аналітику Firebase. У нашій аналітиці тим часом все файно... 🤔 Трохи деталей: в наших апках є кілька різних аналітик (бо в них різні використання і іноді дуже важко це змінити), і всі вони отримують події виключно з апки.

А подія у файрбейз коли відправляється? Ну вірно, коли користувач повертається з оплати карткою, яка у вебв‘ю. Тобто ідеш платити, вносиш дані картки, якийсь може 3д-сек’юр, і ось тоді вже... ач тільки KastaPay показує своє «дякую за оплату», і користувач, вдоволений вдалою справою, закриває апку і йде по своїм справам. Ніколи не потрапляючи в апці на сторінку, де відправиться та подія. 😬

Цю тему вже виправляємо, але приємно, що наша власна аналітика нічого не губила. 👌

(@ tg)

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

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

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

(@ tg)

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

Значить історія: приходить повідомлення iMessage, від якогось номера, просто картиночка. Ти відкриваєш подивитися, що там, а воно... iMessage, щоб показати картинку, викликає метод copyGifFromPath:toDestinationPath:.

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

І прочитати воно може не тільки гіфки, а купу різних форматів. І один з них — це пдф. Пдф прикольний тим, що взагалі пишеться на майже тьюрінг-повній мові, але за багато років там наставили достатньо вже обмежень. Але! Код, який використовується у iOS - це код Xpdf, написанний у 80-х роках, і виглядає так, що там багато цікавого. :)

Наприклад, є там всередині реалізація формату картинок під назвою JBIG2. Це такий спеціальний формат, який дуже добре стискає чорно-білі картинки, у головному зі сканерів і ксероксів — раніше канали і сховища були скромніші і треба було економити. І ефективний він через те, що блоки зображення кодуються хитрим чином з використанням логічних операцій - and, or, xor, nor.

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

І далі найкраще. За допомогою 70 000 операцій чуваки зробили віртуальний комп‘ютер, який вміє ходити по пам‘яті телефону і читати все, що завгодно. Ну як ото люди у майнкрафті роблять, тільки у айфоні. :)

Фантастично елегантний хак, просто капець. Не те шо та дитяча підстановка у лог для же. :)

Епл це пофіксила ще у вересні, але NSO явно юзали його на початку року. NSO - це автори експлоіту, ізраїльська контора, яка допомагає урядам слідкувати за громадянами. Вікіпедія каже, що вони відіграли якусь роль у вбивстві Джамаля Хашогджі. :( Елегантно, але все інше як завжди...

(@ tg)

Знаєте, чому я вирішив робити подкаст з fwdays, а не сам? Тому що з жовтня по зараз я записав ровно 0 відео сам, але ось вже готовий другий випуск подкасту RTFJ. :) Спасибі вдалій мотивації від Даші, і цікавій розмові з Ромою Лютіковим.

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

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

P.S. До речі, він є і на подкаст-платформах:

SoundCloud 👉 bit.ly/3yvKmCo

Apple Podcasts 👉 apple.co/3EZZTwQ

Google Podcasts 👉 bit.ly/3F8lfs0

(@ tg)

Clojure — паразит

Позаминулої суботи ми записували новий випуск подкасту (spoiler alert!) з Ромою Лютіковим і прийшли до несподіваного визначення: Clojure — це паразит. Причому паразит у квадраті! От дивіться.

По-перше, в кложі немає своє платформи, так? Вона працює або на JVM, або на .NET, або на JS, або он там на підході ClojureDart, щоби Flutter можна було нормальною мовою писати. Це ж одна з основних ціннісних пропозицій кложі!

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

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

(@ tg)

Пару тижнів тому Марцин написав пост, про те, як він переписав asciinema-player з ClojureScript на Rust + WASM. В результаті в нього бандл став у 4 рази менший і швидкість виросла у 50 разів.

Це дуже крутий результат! Але дуже цікаво чому, і чи не має тут історії про те, що не треба використовувати CLJS взагалі? 😁

Давайте розберемось. По-перше, одним з головних компонентів є емулятор терміналу, який він заново написав на расті — vt-rs. Це біля 2 тисяч строк коду відносно тисячі строк у vt-clj, але! Це ж взагалі найкращий юзкейс для мов з мутабельностю даних.

А у vt-clj відбувається неподобство, зі здоровезних масивів даних (ну як здоровезних, width*height терміналу, ггг) генерувалися нові такі самі — думаю, що GC браузерів просто захлинався від такого нахабства. Тут навіть structural sharing занадто багато не допоможе. У цьому місці йому б треба було взяти ArrayBuffer, і перестати мучити худобу. :)) Але! Треба сказати, що я приємно здивований кількістю кода на расті, і пов'язую це з тим, що йому вже не прийшлося експериментувати з імплементацією, як у кложі.

Інша велика зміна, яку він зробив — проміняв ReactJS на SolidJS. Каже, що набагато швидше, ніж реакт. Може, я не дуже в темі. Але що він робив до цього - використовував Reagent. Це дуже ергономічний і дуже неефективний врапер навколо реакту. Найбільша його проблема — він не компілює хікап ([:div "smth"]) у виклики реакту, і робить це у рантаймі.

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

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

(@ tg)

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

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

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

Значит, попри купу самоіронії, порівняння з усілякими мурахами та бджілками, і таке інше, людство — доволі круте. :)

(@ tg)

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

Чи це життя взагалі?! Якісь люди з Чехії подумали так само і зробили сайт, якій вміє з QR-коду сгенерувати файлик для Wallet'у. Скануєш QR-код сертифікату, або завантажуєш його скриншот, і отримуєш pkpass. Відкрив — і тепер за подвійним натисканням на бокову кнопку ховається той сертифікат.

Не треба розблокувати айфон, шукати потім дію, чекати поки її швидкісні сервери дадуть відповідь, чекати розблокування (чи навпаки?)... Все локально сидить в айфоні.

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

(@ tg)

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

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

Сильна така тепер книга. 😁

(@ tg)

Є така штука, як Cloudflare Workers. Це спосіб задеплоїти джаваскрипт на серверах в клаудфлерівські точках присутності. Ну типу AWS Lambda, тільки для тих, хто хоче зробити небагато і швидко. Точно кружляють навколо традиційних авсів і хочуть взяти їх в оточення. :) Але я не про те.

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

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

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

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

(@ tg)

Давайте трохи за результати Black Friday у Касті розповім. Значить, перший раз, коли ми пережили її у 2016 році, в нас було 2.5k RPS (запитів у секунду) в API, десь 80 тисяч товарів і мінімум серверного рендерінгу.

Цього року близько мільйона товарів, 130 відрендерених сторінок в секунду (більша частина клієнтів — це мобільні аппки, які тільки апі торкаються) і близько 6k RPS.⚡️ Це насправді прикольний результат, враховуючи, що з заліза, де це все живе, в нас реально тільки сервер Постгресу новий (минулий був 15-го року за 10к баксів, а цей 20-го року теж за 10к баксів).

Єдине, що пішло трохи не по плану, так це ElasticSearch — хто б сумнівався, інтроспекції у те, як для нього розраховувати навантаження, дуже мало. В нього є "explain", але його результат ну дуже важко інтерпретувати.

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

Ми за годину наколупали з 5 додаткових нод еластіку, а за наступний тиждень взяли в оренду ще заліза, щоб побудувати додатковий кластер еластіку і раунд-робіном на них розкинули навантаження. Тож п'ятниця 26-го була нудною. Чого, власне, ми й прагнули. ☺️

(@ tg)

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

Ну типу свято, тож ми випили шампанського чи що, сидимо чимось займаємося, аж раптом після 12 ночі, вже у прийдешньому році моніторинг піщить що якийсь з сервачків на Леонтовіча помер і не відповідає.

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

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

Зняв куртку, проліз туди, і пішов собі на сервер дивитися. Приєднав екран, а там скрінсейвер консольний фрі, де демон літає туди-сюди, висить. Бутнув, значить, воно завелось, і пішов собі назад. :)

(@ tg)

‍DOU опубліковали інтерв’ю зі мною, так що можна піти подивитися, якщо цікаво. :) Причому вони зробили і текстову версію, але вона дуже скорочена, типу там більше факти, ніж роздуми. Мені здається, що послухати буде цікавіше, ніж почитати. :)

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

(@ tg)

Raycast

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

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

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

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

Тіки однієї речі не вистачає — вміння показувати напис великими літерами, те що Альфред по ⌘ ⏎ робить. Чи можна якийсь нормальний екстеншен написати, чи може показати симпатичний напис — це занадто складно для джаваскріпта?.. :)

(@ tg)

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

Як це виглядає: звемо якусь авторитетну людину і обговорюємо з нею технології, вподобання, роздуми на тему і таке інше у пошуках бажаного, але досить міфічного Right Tool For the Job. :-)

Велкам послухати RTFJ #1 з Андрієм Листочкиним! ⚡️

(@ tg)

Трійко рочків тому всередині сайта Касти ми зробили цікаву (для мене) річ — закешували результати збирання товару по всій базі у тій самій базі.

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

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

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

Так ми жили аж до минулого тижня, коли вже вкінець задовбало, що в цього апі 99 процентиль - 300 мс під навантаженням. А тепер ми прожили перший день тижня чорної п‘ятниці з 99 процентилем у 130 мс! Непогано, га?

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

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

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

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

P.S. А ще ми у п‘ятницю півтори години паршиво працювали, але це еластік винуватий — товари себе відчували мов живі. І це зовсім інша історія. :)

(@ tg)

Річ Посполита

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

А от слово “Річ” роками не міг зрозуміти. Я розумію, що разом “Річ Посполита” — це “республіка”, res publica, але ніде ніколи ніхто не пояснював значення цього слова. Ну як відібрало їм, чи що. Оце навіть якийсь час думав, що це термін типу “Січ”, яке незрозуміло звідки взялося — мови розвиваються іноді дуже незрозумілими путями.

Ну і шо, колись воно набридло мені, і я пішов шукати. Спочатку пішов до Гугл Транслейту і він мені каже, так res — це ж річ. Сууупер, думаю, допоміг. Клац на англійську, а воно мені - thing. 🤦‍♂️ Отак і роздуплився, що на сучасну мову річ посполитанародна штука.

(@ tg)

Фундаментальна помилка атрибуції

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

А ось я поважаю! Дуже стараюся приходити вчасно, і запізнююся тільки з поважних причин.

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

Якщо хочете ковирнути глибше, є стаття на вікіпедії , але мені вистачає знати себе, щоб зрозуміти, що проблема існує. :)

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

(@ tg)

Нідерландська система поїздів наче зійшла зі сторінок науково-фантастичної книги. Яку ще писали років 60-70 тому, коли вірили, що людство може організуватися і побудувати логічне суспільство. :)

Бо я інакше не можу нічим пояснити працюючі трьох-хвилинні пересадки. Ти півтори години їдеш у потязі з Гронінгену, оголошують «Алміре», переходиш через платформу у потяг навпроти, та й їдеш в Амстердам. Ну або в інший час буде іншою дорогою з двома пересадками, і все одно стиковки там по 2-4 хвилин.

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

Коли згадують теорії змов, один з наочних аргументів проти — це складність організації будь-яких проектів. Так ось NS.nl — аргумент за те, що людство таки щось може. :)

(@ tg)

Дратують люди, які вважають 80 символів неважливим обмеженням через недосконалість терміналів у древності (тут маються на увазі часи 30-50 років тому).

Це ж невимовно круте обмеження! Фасілітатор покращення якості коду! І все таке. Чому, запитає допитливий читач (ггг).

Раптовий поворот: стаття про те, що чувак обмежив собі ширину у редакторі і йому стало простіше писати тексти. Воно трохи емпіричне, але збігається з моїм досвідом: з телефона пишеш простіше, коротше, а отже, краще. :) І менше відволікаєшся, але це про інше. ;)

Ви можете згадати мої думки про поради, тож думайте самі. У сенсі думайте про те, як краще виконувати це правило. 😬

(@ tg)

Лечу у Голандію (що блін з цією темою? чому я їх не називаю країну Нідерландами? якийсь брейн демейдж; добре хоч літак у Амстер, реально Голандія), прям от сьогодні. А вчора правительство нідерландське (виправив тут) прийняло рішення перенести Україну з «безпечних» до «небезпечних» країн.

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

Поки сидів у таксі, вирішив уважно все перечитати, і воно каже:

you must always complete a quarantine declaration form. Even if you are not required to quarantine.

Що мені, складно форму заповнити? Лец ду іт:

If you are travelling from Ukraine you are not required to self-quarantine.

Фантастика. Ніхто у цьому світі не захищений від людей, які приймають складні зміни з сьогодні на завтра. 🤦‍♂️

(@ tg)

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

Це інсайт, до якого ми з Севою дійшли років з 10-15 тому: робити можна дуже багато чого, але ти не знаєш навіть про існування цього і в результаті втрачаєш час. Це «невідоме невідоме», на відміну від «відомого невідомого», про яке ти можеш піти почитати. Гарний приклад останнього — їзда на велосипеді, всі про неї знають, навіть якщо не всі вміють. Але от лижі… коли я почав працювати, чому ми з друзями не їздили покататися? Просто не знали, що це так просто — узяв і поїхав!

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

Інші його роздуми теж цікаві, але він графоман, тому радити дочитати до кінця важко, я сам не можу, хахаха. :)

(@ tg)

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

І, авжеж, я взяв і написав блог на джанзі, під назвою Byteflow. А потім написав генератор статичних сайтів - Cyrax , бо джанга занадто повільна і взагалі, нашо блогу динаміка? :) А потім ще один генератор - gostatic , бо пайтон теж занадто повільний, і чекати рендер кілька секунд, коли пишеш пост — це не наш метод.

Ну пре мене написання інструментів, що поробиш. :) Чи не більше, ніж власне написання текстів. 😁

Так от, я довго писав пости в телеграм у окремому редакторі, а потім копіював у телеграм руцями, але ж терпець уривається! 🤦‍♂️ А в Ulysses нещодавно вийшло оновлення: вони навчилися оновлювати пост у Wordpress і в Ghost . Апі вордпресу торкатися трохи неприємно, а ось у госта, думаю, подивлюся.

І що ви думаєте? Все вийшло! Зробив штуку — xapi cms (ну, кросс-апі, зрозуміло?). Це такий безголовий cms, який реалізує частину апі Ghost’a. Воно ще дуже рудиментарне, але головне працює. Виглядає це так:

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

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

(@ tg)

Колапс

За останній тиждень подивилися новий реліз Суспільного, про розвал Совку, ГКЧП і таке інше. 7 серій хвилин по 40, більшою частиною інтерв’ю від різних цікавих людей, які тим чи іншим чином приймали участь у подіях — не буду їх перераховувати, дуже вже їх багато: журналісти, діаспора, чиновники тощо.

Я занадто малий, щоб пам’ятати, що там відбувалося — взагалі пам’ятаю дисонанс у голові класі в третьому-четвертому, коли в усіх книжках, де це може бути згадано — я любив читати “Детскую Энциклопедию” і щось таке риже в трьох томах — написано “живемо в найкращій страні у світі - СРСР”, а у школі проскакує Україна. :)

Тож подивитися було дуже цікаво, воно ще й добре зроблено. Рекомендую .

(@ tg)

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

Підрізали дуже яскраво — анонсом R2, повної альтернативи для S3, тільки в 6 разів дешевше для збереження і з безкоштовним трафіком. Не просто дешевше драконівських тарифів амазона, а взагалі безкоштовний! При чому воно одразу може працювати як проксі, якщо об’єкта немає — сходи он туди за ним. В бекенд чи просто в S3. :) Я не можу дочекатися релізу, щоб перекласти туди наші картинки та забути про них взагалі. :)

Але якщо подивитися уважніше на всі інші пропозиції клаудфлера, вони всі лоу-кост і працюють на самому краєчку (on the edge - воркери, key-value сховище для них, хостинг для статичних сайтів — майже статичних, є ж воркери), зовні всіх інших провайдерів платформ. Це дуже цікаво наблюдати було, але ось прочитав гарну статтю з аналізом ситуації, і там чувак фантастичну аналогію придумав: поки амазон грає у шахи, продукуючи все потужніші фігури, клаудфлер грає у го, маленькими камінчиками захоплюючи собі територію. Окружає амазон та всіх інших.

Супер круто все роблять, дуже цікаво спостерігати.

(@ tg)

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

Виявилося, що я не один такий хочу опенврт без гемору (хахаха), і є компанія GL.Inet з Гонконгу, яка робить роутери одразу з опенврт. І у серпні за передзамовленням взяв новий — Flint, з 802.11ax, щоб гігабіт мій не пропадав же ж. :)

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

Помаявся трохи і написав у підтримку. І через тиждень переписки і моїх перевірки з іншими блоками живлення кажуть: відправте нам у Германію за наш рахунок, а ми вам новий пришлемо, бо писк не повинен бути чутним на відстані більше 5 см. :)

Оце кастомер сервіс, капець! 😲 Супер-круто. Трохи непокоїть те, що може це я занадто тендітний, але ж тплінк мій не пищить? 😃 Подивимося!

(@ tg)

Якось не виходить дописати жодного поста, у чернетках всі зависли доки я цей meeting heavy тиждень доживаю. :) І щось рветься з мене литдибр, то ж так йому й бути.

Прийшли холоди, а значить вже час, коли можна знов юзати свої улюблені Beyerdynamic DT770 — бо влітку в них занадто жарко. 😁 У сенсі в мене тепер є навушники для літа: відкриті Sennheiser HD599, і зимні - баєри. хд599 такі всі воздушні, з величезною сценою і деталізацією, а дт770 - вони про щільність звуку явно. Ну точно лагер вс стаут. :)

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

(@ tg)

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

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

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

(@ tg)

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

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

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

На останок дам вам ще демо від Шона Корфілда. Може воно вас змотивує витратити часу на те, щоб спробувати. :-)

(@ tg)

Хто б роздуплив, що коїться з ютубними коментами? Приходять пуші від ютубу, що залишили новий коментар, йдеш його повністю прочитати - а коменту-то й нема! Люди самі видаляють, чи що? Мож з 5 останніх коментарів так прийшло і зникло, якесь дивне співпадіння. Нормальні коментарі, ніяких претензій до них немає - але й них самих теж немає. :))

Не розумію. І головне - з авторами не сконектитися, вбудованої в ютуб системи повідомлень наче нема ж…

(@ tg)

Колись, на зорі часу (за моїми стандартами), на початку 00-х у КПІшних ньюсах (це у сенсі у NNTP-групах) була популярною фраза про «використовуй інструмент під свою задачу». Ну й загалом консенсус був, що всі ці наші комп‘ютери - вони про пошук оптимального рішення, меритократію і все таке інше.

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

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

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

А без використання, чисто з доків, зрозуміти що до чого — це неможливо. Реакт у себе в доках не пише “робить зручними не тількі хороші, але й погані рішення”, Джанго не пише “ваші розробники не будуть розуміти, що вони роблять с БД”, Нода не пише “пам’ять буде текти, але логіка буде текти ще гірше”, і так далі.

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

(@ tg)

Всі знають історію фейлу Kodak з книжок для MBA, коли чуваки першими у 70-х розробили матриці, але вирішили, що це вб’є прибуток від продажів плівки і поклали це все на шухляду, аби заробити побільше грошей. А потім прийшла революція і Кодак від того вмер.

Це все чухня! Красива казочка про бездіяльних менеджерів, в яких немає приводу робити краще, бла-бла-бла. Насправді Кодак інвестував мілліарди доларів у 90-ті у цифрове фото, камери на початку 00-х використовували матриці Кодака, і у середині 00-х Кодак займав більше 20% ринку цифрових камер у США. То де ж проблема? Проблема у тому, що Кодак разом з Фуджи становили дуополію з виробництва дуже складного продукту: кольорової плівки. На скейлі ще щось виробляли Агфа та Коніка, але вони були малесенькі порівняно з тими двома монстрами. І вони звикли до цього ринку: ти робиш щось добре і через те отримуєш прибуток.

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

Тож справжня історія тут не про Кодак, а про Fuji, які змогли. Фуджи ще у 90-х почали диверсифікацію бізнесу у компліментарні області: захисні плівки до LCD (гарно вгадали, що ринок полетить вгору), медичні прилади (оптика єтц), косметика (у плівках багато роботи з коллагеном, як й у косметиці для шкіри), і т.п. І група Фуджи у 2010 була в 1.5 рази більше, ніж у 2000-му! Ну й вони експериментували з value-added (на відміну від commodity) фотіками і на початку 10-х випустили дуже вдалий X100, з якого потім виросла кльова серія X.

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

Це насправді і вся історія, але якщо хочете більше подробиць із цифрами, осьо велика стаття: https://petapixel.com/2018/10/19/why-kodak-died-and-fujifilm-thrived-a-tale-of-two-film-companies/

(@ tg)

Фейсбук знач вчора відпочивав, чули таке? І тіки він вимкнувся, з різних сторон почали лізти дуже конспірологічні теорії про хакерів, правительство США та криптовалюту від фейсбуку, і інший подібний бруд. Цікаво, зо я в цілому не так багато торкаюся цієї частини інтернету і воно лізло з дуже неочікуваних місць.

Але насправді це була помилка у конфигурації. CTO Cloudflare вже написав статтю про те, як це виглядало ззовні: фейсбук просто перестав себе рекламувати по BGP . Тобто перестав всім іншим розповідати, як добратися до його мережі з іншого інтернету. Ну реально просто як вимкнув телефон і приліг спати. :)

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

Загалом воно лежало близько 4,5 годин і почало піднімати голову після 12 ночі за Києвом. Непогане нагадування про те, що інтернет одночасно і дуже складний, і працює завдяки тому, що всі ведуть себе корректно. Такі самі відчуття, як з дорожнім рухом. :)

Дуже хочеться почитати постмортем від самого фейсбука! Тож чекаємо на нього. :)

(@ tg)

Пару днів тому забрав з поштомату Нової Пошти свою каву (з Kyiv City Roast , вважайте цей пост рекламним, хаха). Забрав та й забрав, ну типу почекав, поки з третього разу воно завантажило дані відправлення і приконектилося до поштомату. Я забрав свою каву, закрив поштомат, натиснув “забрав” на екрані смартфону і пішов собі додому.

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

Не знають! Сьогодні прийшла нотіфікашка “ще день і ми перенесемо ваше відправлення до найближчого відділення”! Ну що ж, переміщайте, напевно ж кур’єр роздуплиться, що це означає “вже забрав”? Але, блін, яка ж це неприємна проблема, що вони залежать від (погано працюючої) аппки і дій користувача, щоб роздуплитися, що у комірці вже пусто? Наврядчи той поштомат копійки коштує, невже при розробці ідея про датчики обсягу не приходила до голови?

(@ tg)

У нас усіх в голові минуле трішки забарвлене рожевими окулярами спогадів. По-перше, людині властиво забувати погане, по-друге, ті, в кого там (у минулому) пройшла молодість, розповідають солодкі казки (бо важко об‘єктивно оцінити реальність, тим більш коли ти колись мацав дівчат за сідниці, а зара трава пожовкла), і, по-третє, є купа доказових артефактів!

Про артефакти у вигляді автомобілів ми й поговоримо. Наприклад, беремо відносно новий Міні Купер R56 (в мене був такий, 2008-го року). В нього досить технічно просунутий двигун Прінс спільної розробки БМВ і Пежо. І від БМВ там такі круті маслозйомні кільця на поршнях, в яких отвори для відведення масла невеликі, щоб воно все було акуратно. А двигун гарячий, тому що паливо витрачається ефективно, щоб трохи менше у трубу вилітало. Що це нам дає? Те що сраний Кастрол, який БМВ рекомендує, починає підгоряти та відповідно забиває ті невеликі отвори й ось ти не встиг обернутися, а воно жере літр масла на тисячу км. 🤦‍♂️

А з іншого боку візьмемо Гольф 2, які досі є на дорогах і наймолодшому вже 30 років точно. Ну тобто звичайнісінька автівка з 80-х і норм, не те що мінік!

Чи значить це що раніше огого, а зара тююю? Італійський журнал Кваттроруте років 15 тому зробив тест-драйв нового тоді Fiat 500 Nuovo довжиною у 100 тисяч км. Їздили по всій Європі, півночі Африки, по горах і долинах, по грязюці та по асфальту. Але найцікавише у цьому тесті інше — за 50 років до того вони робили такий самий тест, але першого Фіат 500. Теж сто тисяч кілометрів. І списки виконаних робіт просто неможливо порівняти! По-перше, заміна масла у двигуні кожні 5 проти кожних 20 тисяч кілометрів. По-друге, постійне обслуговування підвіски. По-третє, величезна кількість використаних запчастин. І інструментів, які возили з собою. Я думаю, що ви здогадалися, що мова не про новий, де міняли масло/фільтри, та один раз колодки.

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

Є цікава річ: в залежності від моменту, коли людина почала роздуплятися в автомобілях, в неї різні погляди на те, що підпадає під “старі прості й надійні автівки”. Зазвичай це машини, які були у продажу за 15-20 років від цього моменту. В мене все так само, тому перетин 80-90-х для мене дуже довго відчувався як баланс між простотою, надійністю та комфортом. Хоча, якщо замислитися, там такий капець був, моноінжектори, пацавата електроніка Бош тих часів… не хочеться згадувати. :)

Окрема тема — це двигуни. Я взагалі цей пост почав писати після того, як Вова написав про двигуни . Але історія ж та сама! По-перше, всі гівняні конструкції вже давно померли, і ти їх просто не побачиш ніде. По-друге, у ті часи просто не вміли добре розраховувати витривалість, і там, де прорахувалися в іншу сторону — надійність зашкалює. Зара краще рахують, хоча трабли бувають, не будемо забувати БМВшні двигуни 00-х/початку 10-х. Але ж все одно, чомусь геніальний V6 Буссо Альфа припинила виробляти у 00-х! Хоча діфірамбов йому протягом 30 років співали стіки, що самому Джузепе повинно було бути ніяково. :)

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

А те, що не треба шпринцевати підвіску кожні пару тисяч кілометрів — це просто щастя. ☺️

(@ tg)

Нагадування - 15 хвилин і поїхали, тож не завтикайте, якщо планували :)

(@ tg)

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

Значить так: пости з профіля свого рекламувати не можна. Можна або створити нову рекламу, або рекламувати пост зі сторінки (з таких що Page звуться), або івент, теж зі сторінки. Може треба було звичайну рекламу зробити, але ж це треба більш інформативну картинку, ніж мій тамбнейл для відео, тому я вирішив рекламувати івент. Зробив сторінку у Фейсбуці, запостив туди івент, нажав «просувати», сказав «ось тобі 10 баксів до 5 вечора» і воно поїхало.

Спочатку тієї кнопки не помітив, і пішов через ад менеджер щось створити і мало не зійшов з глузду. Інтерфейс там… фантастика просто. 😖 А ще воно не дало з події нічого створити, сказало що треба звичайний пост — але коли я створив іншим шляхом, то в ад менеджері все з‘явилося. Ну як заведено давно, взаємовиключні параграфи — фундація нашого буття. :) Після публікації воно ще декілька годин перевірялось, і, судячи з усього, почало працювати десь о другій ночі (я майже опівночі все робив).

Фільтрами поставив інтереси ruby, python, java, c# і devops. На пхп забив, бо там їх нереальна кількість. :) Хз, чи це разумно взагалі? Маю зара 664 перегляди і 0 взаємодій за 1.91$. Не знаю, які висновки треба з того робити. :))

Пішов глянути у твіттері на Boost Tweet, а там мінімум 50 євро. Ось тут жаба прокинулася і каже «краще мож фейсбуку десяточку докинь». :)

(@ tg)

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

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

Поширюйте запис і занотовуйте: післязавтра, середа, 29 вересня, о 17:00 за Києвом (це взагалі норм, що о 17? Не сильно рано?). Або краще ставте нагадування: https://youtu.be/UXnTzxGhnXc

(@ tg)

Я не люблю стрес, не люблю незворотні дії, і не люблю повторювати одну й ту саму роботу. Вочевидь, ніхто не любить, але чомусь у кожному проекті, де я приймав участь за останні 10 років, деплой найбільше непокоїв саме мене. :) І тож моя опінія — деплой повинен бути такої складності, щоб 10 раз за день не ставали додатковим навантаженням на когось, окрім системи CI.

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

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

Що треба, щоб стало норм? Дивись чекліст! Він упорядкований, кожен крок наближує до ідеалу.

Ну й не забувайте просту істину: мізки треба вмикати все одно. Головне — не пройти чекліст 1-в-1, головне — щоб стало добре. :)

(@ tg)

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

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

Чому? Тому що це зменшує кількість страждань у світі. Апка не перестане працювати. Сервіси не зламаються і їх не треба буде лагодити. Клієнти БД не помітять ваших змін. Краса!

Насправді, коли це внутрішня штука, то змінювати можна все, просто у кілька релізів. Хочеш перейменувати поле з uuid на id у повідомленнях сервісу А так, що сил немає? Випускаєш сервіс Б, який читає обидва поля, а потім вже сервіс А з перейменуванням. А потім ще можна закріпити релізом сервісу Б, який тільки другу назву читає.

Коли таких споживачів штук 3-5, перейменовувати поле не хочеться. І не треба. :)

Можна вчитися у Clojure: береш якийсь код на гітхабі, який 8 років не торкалися, а він працює. Фантастика!

(@ tg)

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

Що воно таке? Це наче черга повідомлень, але ці повідомлення там назавжди (ну або скільки скажеш, диски ж не безкоштовні). Абстрактно вся кафка це файли зі строками повідомлень і додатково записи про те, на якому рядку кожний читач зупинився. Ментальна модель екстремально проста і через те дуже ефективна!

Що воно нам дає?

• В тебе завжди є історія для аудіту — читання повідомлення не видаляє його (як це відбувається у традиційних чергах). • Ця історія підходить не тільки для дебагу, а й для того, щоб після зміни коду — обробини все наново. • Одна абстракція як на кілька процесів, які обробляють послідовно (1 повідомлення - 1 раз), так і на кілька обробляють параллельно, і на будь-які комбінації

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

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

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

• id, topic, message • consumer name, topic, offset

Цього вистачить, аж поки рахунок не піде на тисячі у секунду.

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

(@ tg)

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

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

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

Я не знаю, куди треба відправити пропозицію на наступне оновлення мови, але моє мовля вже знає, шо воно мовля. :) І інші мовлята теж дізнаються, коли будуть балакати поверх всіх присутніх. :)

(@ tg)

Програмування — це такий дивний процес на перетині інженерії та творчості, типа письменництва. Я не знаю, чому воно так, чи це через те, що це досить молода дисципліна (“всього” 70 років, ха-ха), чи це через надмірну складність і величезну кількість варіантів, але результат такий, що це явно не точна наука.

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

Хтось читає про принцип Don’t Repeat Yourself, і починає робити параметрізовані функції на всі два випадки, хоча воно простіше вирішується кастомними трьома строками інлайн. Люди надивляться на переускладнені DRY’єм (пересохлі, ггг) кодові бази і потім пишуть у твітері “ні в якому разі не робіть функцію, поки хоча б три рази вона вам не знадобиться!” Впевнений, потім на цю лапшу інші люди будуть дивитися і писати “не повторюйся падлюко!” Хоча капець, це ж просто — подивись на те, що ти пишеш, і подумай, чи це має сенс бути окремою функцією? Це ж просто спосіб зробити абстрацію.

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

Є ще багато правил, які гуляють інтернетом, які одні люди пхають всюди “робіть тільки так”, а інші волають “ні в якому разі так не робіть”. Але насправді суть у тому, що власного розуму ніякі поради не замінять. :)

(@ tg)

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

Скажімо, в нас потроху головним методом платежу стає переказ з картки на картку - дуже швидкий, дуже дешевий (а часто і взагалі безкоштовний), без метаданих та підтверджень. В мене на районі навіть розкладка з овочами приймає такі перекази. Ще й сама пропонує, до речі! Я навіть бачив на свої очі, як бабуся 70+ з монобанка перекидувала гроші, «бо не треба з дрібнотою возитися». Але! Покажи будь ласка екран, що гроші пішли, бо карта - хазяїна.

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

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

А замість того, щоб виписувати штрафи за паркування, давайте запустимо евакуацію приватною конторою по ціні х5 від ринкової. Але ж вивезення з неасфальтованої площадки з ланцюжком замість шлагбауму обов‘язково зробимо в застосунку, з QR-кодом в кінці! Нашо він там, номера машини не вистачає?..

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

(@ tg)

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

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

Я не можу дати якусь моральну оцінку цьому, треба обсмоктати зі всіх сторон, але не можу не звернути увагу на те, що “конкретні бренди” звучить дуже схоже на “конкретні типи” з ООП, на які постійно котить бочку Річ Гіккі. :)

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

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

Мораль: вчися програмувати на кложі — це дозволяє і рибку з’їсти, і на Снікерс сісти. 🤣

(@ tg)

Оце вже мошейнікі пішли грамотні, капець. Вчора виставив інтеловий макбук про на продаж на олхі, сьогодні в Телеграм пише мені якийсь Илья Усачёв, і каже — а можна сьогодні в Києві зустрітися купити? А ви вже його почистили? А скільки циклів перезарядки (це трохи дивно, в оголошенні ж написано)?

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

І тут він дуже хоче по телефону говорити — ну ок, і відбувається в нас така розмова:

— Ви вже повидаляли всі аккаунти? — Так. — Давайте тоді в наш айклауд зайдемо, щоб я перевірив все. — Гммм, ні, в айклауд я заходити не буду. — Але ж як я перевірю? Чому не хочете? — Тому що ви мені потім ноут заблокуєте)) Приїжджайте дивіться своїми очима. — Добре, я тоді подумаю, як ще перевірити, до побачення.

І повидаляв всі мессаги з телеграмівського чату. Хитре падло.

(@ tg)

Сьодні зі Степаном пішли на картінг — на «Жагу Швидкості», авжеж, бо де ще можна нормально проїхатися. :) І раптово виявилося, що вони останні два роки вже не пускають повозити дитину на руках. :( А самому йому ще рано, треба 130 см зросту, щоб дістати до газу (кому треба той тормоз).

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

Але кльово, приємна втома в пальцях, хехе. Треба ще буде сходити. ;)

(@ tg)

Є така штука - еластіксьорч. В мене з ним якісь love/hate 💔 відносини. Він вміє дуже прикольні штуки, але і має дві вади.

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

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

Почну з контр-прикладу: в постгресі додали можливість вибирати частину JSON’у з поля. І одразу ти можеш це використовувати у селекті, у where, у сортуванні, у агрегаціях, можеш будь-яку строку привести до JSON’у і так само воно буде працювати всюди. Це ортогональність фіч: розробникам постгресу не прийшлось окремо всюди припилювати це механізм, в них нормальні абстракції. 🎉

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

Але ми беремо фільтр terms, який дозволяє сказати “хочу лише оці документи”. Якби в нас були сотні товарів в одного користувача, то ми б просто їх параметрами запиту передали. Але в нас тисячі (десятки навіть)! Еластік такий: не бійся, чувак, я все шарю. 👌 Диви на доку нижче , якщо ти замість списку термів передаш спеціальну мапу, то це буде означати “хочу документи, список яких є он в тому документі”. Ну типу вішліст твій будемо складати в еластік одним документом і потім на нього посилатися (ну теж не дуже ефективно звучить, але ж кращє ніж на читанні таке селектити з бази).

Наче норм, так? Проблему вирішили? Ось тільки ми ж хочемо їх видати так, щоб найсвіжіші (за часом додавання користувачем) були вгорі. А еластік видає як йому заманеться. Добре б його попрохати відсортувати, як у тому нашому документі з вішлістом. Але ж немає шансів! Тому що фільтр термс те вміє, а сортування не вміє. Той “джойн” — не ортогональна фіча. 💩

І це втомлює реально. Еластіксьорч то набор юзкейсів, якщо твого не зробили — то й працювати не буде. Хз, шо з тими вішлістами робити. 🤷

(@ tg)

Судячи з реакції, вчора був занадто технічний пост, тож давайте обговоримо якісь загальнолюдські цінності. Наприклад, колдбрю! :) Беремо чисту холодну воду і каву у пропорції 1:18 — або якійсь іншій, в інтернеті купа обговорень, скільки треба. Я роблю літр води і 55 грам молотої на аеропрес кави і мені подобається результат. Тож цю суміш у банку і в холодильник, а зранку наступного дня (виходить десь годин 16 в мене) фільтруємо і є трішки менше літру дуже смачної кави, яка ще й холодна і у години нестерпної спеки наче нектар. :)

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

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

Кароч, кайфую з результату і не розумію, чому минулого літа цього не робив.

(@ tg)

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

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

Ідея така — ти збираєш до купи відомі тобі:

• факти: id товару такий, постачальник такий, ціна така, властивості такі, користувач з Києва, вибрав оплату картою, вибрав доставку у відділення НП, і т.п. • правила: доставка на кастапост безкоштовна, якщо ти чоловік з трьома дітьми у Києві і платиш карткою Андорри • питання: чи доставка безкоштовна? чи може треба хінт для сторінки товару про те, що доставка для оплат карткою безкоштовна?

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

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

(@ tg)

Пару тижнів тому у мене разів 5 за день поламався інтернет. І так цікаво воно відбувалося, що ребут роутера не допомагав. А ось відключення шнурку від роутеру і втикання назад допомагало: провайдер каже “порт завис”. У мене було таке один раз минулого року, один раз 1 квітня (пам’ятаю, бо це прям посеред стріму відбулося), і ось 5 разів за той день.

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

І справді, пару тижнів пройшло нормально, аж у четвер знов пропадає! Ну капець, думаю, 4 роки все було нормально, а тепер що?… Якщо ще раз пропаде, то наберу їх ще раз — аж тут раптом дзвонить телефон, а звідти: “ви оформлювали заявку на гігабіт, вона ще актуальна?”

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

(@ tg)

Я ж півроку тому купив Соньку a5100 і продав свій Фуджик X-T1, тому що він не вмів видати по HDMI живу картинку — тільки те, що вже записано на картку пам’яті. Ну і ще тому що я його кілька років не чіпав. :) І Сонька за свої гроші виявилася дуже розумною покупкою, майже за гроші Logitech Brio, але з набагато кращою якістю.

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

Походив, помучився, чи воно мені взагалі треба — попередній же ж лежав без діла реально, але ну скіки ото можна страждати, і купив Fuji X-S10. До речі, виявилося, що представництво Fujifilm дає фотіки на тест-драйв на кілька днів. Я так взяв X-E4 з 23/1.4 — ніколи в житті не користувався таким світлим склом — і зрозумів, що об’єктив то воно, а форма фотіку мені потрібна від зеркалки, а не від далекоміра.

Тож X-S10, плюс в мене ще залишилися об’єктиви від X-T1, плюс я купив Viltrox 23/1.4 (тому що він 400$ замість 1000$ за фуджиковське скло, а з якістю все супер). Сказати, що то кайф — нічого не сказати. Просто тащусь від камери, та й від скла теж. Результуючі фотки просто фантастичні, керування кайф — що завгодно з кнопок та крутилок можна переназначити на інші функції, ну й взагалі і форма, і керування супер.

Живлення по USB-C, плюс швидкозйомна площадка вирішують траблу з тим, щоб його зняти або поставити секунд за 10, так що він не намертво стоїть біля компа.

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

А ще макро…

(@ tg)

Степану якось подарували пазл, шось на кшталт тетрісу: треба фігурки скласти так, щоб вони утворили прямокутник. Цьому заважає не тільки їх форма, але і рельєф — мізки нормально треба вмикати, особливо на рівнях поскладніше.

Воно лежало без діла доволі довго, але тиждень тому якось ми на неї напали і активно розгадували (у сенсі не тіки Степан це робив)… аж тут козявка Фаня три дні тому кудись заховала книжечку із завданням.

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

(@ tg)

Нам з братом пощастило у дитинстві: на одному з дисків зі збірками ігор була TTD — Transport Tycoon Deluxe . Сенс гри у тому, щоб організувати транспортування товарів з місць виробництва до місць споживання. Бувають короткі маршрути, скажімо, вуголь до ТЕС, бувають довші: залізна руда — сталь — товари, які потім треба возити в міста, щоб вони росли. Перевозити їх можна вантажівками, кораблями, літаками, і, найкраще — потягами. Прокладаєш маршрут, розставляєш семафори, і пішло-поїхало. :) Гроші заробляються на транспортування, до самого товару ти якби відношення не маєш.

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

І ТТД наче залишився там, у дитинстві, та іноді у спогадах, але вже на першому курсі у ньюсах КПІ я натрапив на обговорення TTDPatch. Сам TTD був, вочевидь, програмою з закритим джерельним кодом, ще й на асемблері — бо Кріс Сойєр таки олдскульний дядько, і навіть Locomotion 2004’го року написаний на асемблері. Але знайшовся чувак за ім’ям Йозеф Дрекслер, який з 96 року (враховуйте, що перший реліз оригінального Transport Tycoon відбувся влітку 94) працював над in-memory покращеннями гри. Цей патч виправляв купу неприємних особливостей гри і додавав багато нових можливостей.

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

А у 2004-му Людвіг Стрігеус (який згодом стане доволі відомим, бо він є автором μTorrent) стартував проект OpenTTD . Все ж таки TTDPatch не міг зробити всього, що хотілося спільноті, тож реімплементація гри на C з відкритим джерельним кодом це було то шо треба. Воно вистрілило і розробка йде до сих пір: їх сайт каже, що останній реліз, 1.11.2, вийшов 3 травня — незабаром вже буде 20 років проекту!

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

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

(@ tg)

Подивився тут інтерв’ю з Миколою Аліменковим , і, після купи дуже розумних думок наприкінці (45:12) він каже: “яка різниця, на якій мові це робити”. Вочевидь, в мене на це питання прямо протилежна точка зору (інакше б я десь біля джави чи якогось пхп тусувався, правда?): інструменти дуже сильно впливають на результат.

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

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

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

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

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

Тож viva la Clojure та єдиному пророку її: Річу Хікі! 🤣

(@ tg)

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

А потім я виріс — і все одно нічого не зрозумів. Англійське право — це якийсь древній трухлявий підхід чи то вікінгів, чи то германців-дикунів… Не те що модерновий римський підхід, що його скрізь у Європі запровадив Наполеон!

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

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

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

Але ж гроші люблять що? Тишу вони люблять, та спокій! І англійське право цінять за його стабільність. Ось що головне! Ситуація навіть якщо і буде змінюватися, вона буде це робити довго, і ти встигнеш приготуватися.

(@ tg)

Коли дивлюся демки no-code/low-code інструментів, мене не покидає відчуття незручності цього підходу. Тільки що дивився internal.io (те відео, що в них на головній) — там пані наклацує мишкою інтерфейс адмінки. Воно з однієї сторони прикольно, з іншої їм прийдеться поверх того всього вигадувати систему версіонування, інтерфейс до неї, а всім звикати і колотися, як отим їжакам. Ну

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

Плюс адмінки все одно роблять програмісти. Ось 1С багато зробив, щоб це все легко можна було зконструювати, у нескладних випадках просто мишкою. І що, багато бухгалтерів тепер не просять когось зробити їм звіт, а роблять самі? Індустрія вокруг запитів бухгалтерії склалася ціла.

Підсумовуючи: мені все ж здається, що захід з іншого боку, типу low-code, але у коді, був би ефективніший. А возіння мишкою то прикольно, але ще й лейаут на ходу видумувати — додатковий гемор. Хтось може вже використовував таке? Internal.io, retool, може ще щось такого типу?

(@ tg)

Якщо у перший раз я на відео потратив, думаю, годин 15-20: кілька разів записував все наново, розбирався з прем’єром та взагалі з підходами до монтажу, і взагалі мучився, то головний доробок на цей раз забрав 2.5 години на те, щоб все записати і нарізати. Частково це тому, що я все робив у епловому Final Cut Pro, а не в адобівському Premiere Pro. І воно якось так зайшло, вся ця ідея с “магнітною” стрічкою і взагалі інтерфейс… Думаю, що третю спробу треба пройти у Davinci Resolve і в кінці вирішити, з чим жити. А потім ще стільки же на всілякі дрібнички, як без цього… :)

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

А це означає що? Точно, рассінхронізацію відео та звуку! 6 кадрів, щоб ви розуміли. Порахував я ці кадри, рухаю на 6 кадрів звук, а різниці немає. У інтернеті замість інформації хлам всякий, який я наче і сам знаю, але нічого не виходить. Перемотуємо на 5 днів вперед, ще один підхід, і поки я розповідаю брату про свої негаразди, до мене доходить, що я не звернув уваги на формат часу, і там не кадри, а долі секунди! Себто у головному індикаторі 00:02:47:16, де 16 — це кадри, а тут 00:00.87, вочевидь це не 97 кадрів! Ок, 1000/30*6 = 200, рухаємо на 00:00.20, ніфіга.

Записую клацання пальцями, значить, поставив головку де на відео вони змикаються, тягну звук… 00:06.00! Капець, то соті кадра! Як я мав здогадатися взагалі?! Ну хоч би якусь індикацію, не знаю, ото вже боги інтерфейсу. :/ Не те щоб в прем’єрі все було зрозуміло, але ну це було якось дуже боляче. :)

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

(@ tg)

Ну нареееееешті я зробив відео з демкою того, як працює TwinSpark. У тому стрімі, що ще 1 квітня був, виявилося, що на прикладі Касти щось показати дуже важко — занадто багато всього там відбувається. Тож я у 20-х числах квітня написав малесенький проект, і 28 числа сів все записати. Думав дня два-три подовбаюся і щось запишу.

Авжеж, ггг. Мало того, що всі ці приближення та посування відео — нереальний гемор, дуже багато праці руками, так ще й прем’єр виявився глючним. Він 4к відео з мого десктопу при ресайзі на різких змінах перетворював на покоцані фільми з 90-х, коли обличчя ГГ кудись у квадратиках упливає. Експортиш кудись — воно втрачає всі ці приближення мої… Кароч задовбався! Зробив потом з джерела MJPEG і ото так воно якось проїхало. Хоч не торкайся тої скотини прем’єра.

А потім ще після травневих всіх вихідних передивився і зрозумів, що я у 1 відео запхав 3 різних великих речі. Тож сів, повирізав, перемонтував, приробив навіть лого (дуже задоволений результатом :)), попрохав у Юри музику, понапхав жужу у різні місця… Реально набагато складніше, ніж стрім зробити.

Але вже не можу далі, хоч воно і не ідеальне. Можна вже йти дивитися! :)

(@ tg)

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

А потім ті дані, які збирає Хром з усіх користувачів і про які так давно точиться дискусія у privacy-minded колах інтернету, вони нарешті застосували на користь широкому загалу. Себто для нас з вами. І тепер метріки Гугла для сайтів — це те, що зарепортили браузери користувачів. У Google PageSpeed Insights можна подивитися на результати кожної сторінки, а у treo.sh добрі люди навіть зробили інтерфейс, де можна подивитися результати загалом по домену. Що, до речі, дуже цікаво!

І тож, не дивлячісь на неідеальний Lighthouse, можна оріентуватися на реальних користувачів та їхні проблеми. Лайтхауз — це опенсорсна тулза, яку в Гуглі написали як бекенд для PageSpeed’у на заміну того YSlow-подібного жаху, що був раніше — все ж таки синтетичний тест і навіть на кількох послідовних запусках дає різні результати. А тисячі користувачів дають реальну картинку.

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

(@ tg)

У далекому 2009 в мене був цілий місяць (грудень) між роботами, і я його тоді провів дуже продуктивно — наприклад, написав клієнтську бібліотеку до Редіса (на пайтоні), основну фічу якої автор redis-py потім перетягнув до себе, бо там була нереальна економія на кількості коду. А ще круто роздуплився з метапрограмуванням у пайтоні, що дуже допомогло написати ядро системи на наступній роботі, а потім нереально допомогло вичистити код від метапрограмування на пайтоні на той що була наступна за наступною. 😁

А ще написав малесенький пастбін — paste.in.ua, тому що мій звичайний через раз бував у даунтаймі, а юзав я його багато. І вже давно всі результати того місяця залишили після себе тільки досвід, а PIU досі живий, і я минулого року його навіть на Кложу та ГраальВМ переписав.

І у процесі переписування думав перевести сховище на SQLite, щоб простіше було то все менеджити, але виявилося, що драйвер склайту для джави не компілюється у статичний бінарь під лінуксом (на відміну від мака та вінди), тож дзуськи. На жаль, я не спеціаліст у війнах з gcc та C++, і проблема досі не вирішена, тож я залишив той формат зберігання, що там є, у файлах. А там… неортодоксальна серіалізація. :)

Зед Шо мені нашепотів заюзати для енкодінгу tnetstrings , формат, прикольний своєю простотою. 😂 Але коли я переписував все на кложу, я знайшов лібу, яку написав американець (це важливо). І через не дуже приємний код я ту лібу переписав трішечки симпатичніше, але! не дуже замислюючись.

Чому американець і моя тупня важливі? Тому що стандарт каже: довжина у байтах. А джава оперує строками, а не байтами, і в мене вийшла ліба, яка зберігає (і читає!) довжину у символах UTF-8. 😵 Вчора вночі прилетіла нотіфікашка “здох твій піу”, і виявилося, що хтось там питав один і той самий урл з помилкою доволі часто, і Грааль закрешився, бо не вистачило пам’яті.

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

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

(@ tg)

А ще, зовсім випадково, через історію з телевізором я дізнався, що RJ-45 — це помилкова назва, і це інший, дуже схожий роз’єм, з телефонних мереж, а комп’ютерний правильно називається 8P8C. Weird, ain’t it?

Ось, подивіться .

(@ tg)

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

Якщо висмикнути з розетки, почекати трішки, а потім увімкнути - все працює. Іноді кілька днів працює, а іноді тіки цю сессію, треба знов ребутати. А якщо під час того, як він не працює, зайти подивитися на стан мережі, то він каже “не бачу інтернету”. Локалку бачить — він в мене навіть на дроті сидить, а інтернет — ні. Ну, думаю, падло ти таке, Гнусмас, напав на мене! 👹

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

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

І ось на минулих вихідних я прокинувся сповненим рішучості цього демона перемогти. Колупав все що міг, знайшов навіть що є прошивка минулорічна, яка автоматом не оновила, відшукав флешку (теж щє квест) і оновив, і ніфіга. Аж раптом дружина зайшла у налаштування мережі з іншого екрану, а воно і каже - з DNS could not resolve. Ооо, думаю, бач як заговорив, в інших екранах (нашо їх так багато?) ти тіки таємничу помилку 92 мені звітував! 🤖

DISCLAIMER: далі три абзаци технічного кошмару, просто перестрибни їх :)

А ще два дні тому помітив що я його пінганути не могу по тому айпі шо в роутері я бачу. Тож, думаю, піду подивлюся, що в мене там в роутері взагалі в налаштуваннях є… Відкрив, поклацав все у Advanced, ну якось наче ніяких фаєрволлів, нічого… Думаю, добре, ну в мене новий ноут, то хоч прив’яжу його до стабільного айпішнику, чом би й ні. Прив’язав… і тут мене наче молнією ⚡️ вдарило! Дивлюся, а там прив’язаний тєлік, до айпішнику 10.0.0.105, який він зараз має, але ж це я робив ще коли він на вайфаї сидів, а зараз-то він на проводі тож мак-адрес там зовсім інший!

Видалив ту прив’язку і все запрацювало наче на дворі ще січень! 😁

І тепер в мене купа питань: якого біса роутер давав зайнятий айпішник йому? Чому, скажімо, не моєму телефону? Чому я його прибив до 105, якщо DHCP починає роздавати з 100, чому не просто до 5? Чому, хоча я й прибив ноуту айпішник 10.0.0.2, він все одно брав собі 102 і все? І головне, чому тєлік той почав глючити у лютому, а не коли я в нього позаминулого року виту пару встромив? 🤡

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

(@ tg)

Як в нас на сайті був React всюди, то в якийсь момент ми навіть перестали читати Sentry. Ну типу звідти йшли нотіфікації, і раз на якийсь час там бували реальні помилки, які можна виправити, але після чистки від дурні на самому початку там було звалище незрозумілих помилок від старих браузерів, з відсутніми стектрейсами. Їх взагалі не дуже реально відшукати у тому бандлі, що являє собою реакт-апп, а ще вони трішечки різні і кожен на невеличку кількість народу спрацьовує - той на хром 39, той на оперу 36, той на ще якусь хрінь.

А помилок від IE11 та схожих браузерів там взагалі нема. Ми колись, році ще у 16-17, виявили, що MS Edge не хоче завантажувати наш сайт. Згодом знайшли в офісі комп на 32 Гб ОЗУ та десктопним процом, і змогли завантажити, і воно навіть якось рухалося, але ж це не життя. :) То я зарепортив як баг у Edge, і через три місяці вони сказали, що таки так, це баг у Еджі, а ще через рік вийшов реліз з фіксом, а ще через рік (чи щось таке) вони замінили в Еджі нутрощі на Хроміум. Тотальна перемога. 🤣

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

І їх можна вилікувати! Типу вчора помітив, що на старих браузерах не працює наша аналітика, бо ми там заюзали Object.assign. 3 хвилини, і ще 600 користувачів тепер нормально трекаються. А зара сиджу, дивлюся і не можу вирішити, чи робити щось з тим, що IE11 не вміє Promise, чи забити на них усіх, їх всього 800 користувачів за три місяці…

(@ tg)

Розміри

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

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

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

І тепер ми маємо два варіанти — традиційний, коли на товарі висить якась його розмірна сітка (скажімо, міжнародна S/M/L), чи українська, а ми кажемо “на товарі буде написано S” (не завжди так, може бути і 12, і 43, і ще якась хрінь, воно різноманітне).

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

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

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

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

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

(@ tg)

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

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

Лежу без сну вже третю годину і думаю, чи записатися у екстремісти, чи у ескапісти?..

(@ tg)

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

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

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

Тож в доволі короткий час я записав все що треба. Ура, 80% праці зроблено! Лишилося тільки змонтувати і почистити звук, тобто ще 80% роботи.

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

(@ tg)

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

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

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

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

Раніше там всередені взагалі був сюр і гнучкі алюмінієві виделки. Гнучки не у сенсі «гнучка компанія», а у сенсі «вирівняй перед тим, як їсти», як ото у совкових столовках. Але вони оновили інтер‘єр, поміняли посуд і тепер просто так собі. :)

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

(@ tg)

Кеш — це спосіб уникнути штрафів повторення виконання один і тих самих операцій. Найпростіше, що можна собі уявити — це функція memoize, яка допоможе порахувати числа Фібоначчі швидко без того, щоб думати над алгоритмом. :)

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

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

І з важливого є ще один шар, власне HTTP. У протокол HTTP вбудований механізм кешування, який імплементовано і в браузерах, і в різних балансувальниках нагрузки, як от в nginx чи у Cloudflare. Він нам дуже цікавий, тому що дозволяє навіть з доволі повільним бекендом (на Django чи то на Rails) мати сайт, який відносно нормально витримує навантаження. У будь-якій HTTP відповіді можна додати хедер Cache-Control: max-age=3600 (припустимо), і браузер, який отримав цю відповідь, ще годину не буде повторювати цей запит. Ще цікавіше: якщо перед нашим сервером сидить якийсь проксі, то він теж закешує ту відповідь і жоден запит з будь-яких браузерів з тим самим урлом вже не прилетить до бекенду.

Ми цим кешуванням дуже широко користуємося у Касті. Як API, так і усі публічні сторінки рендеряться так, наче їх дивиться анонім, а потім фронтенд біжить і довантажує кастомні елементи (насправді, у більшості випадків — хедер, де є ім’я користувача).

Правильно побудоване кешування — дуже ефективна штука, тому що найшвидший код — це той, який не потрібно виконувати.

(@ tg)

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

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

Але ж виконати x = 1 + 2; y = x + 1 за один такт неможливо, бо y залежить від x. Через це процесори всередині змінюють порядок інструкцій, щоб мати змогу використовувати свої непересічні здібності. Тож ефективність процесору дуже залежить від ефективності декодеру, щоб він встигав декодувати достатньо інструкції, щоб було що пересортувати.

Це спільна риса і x86, і ARM процесорів, тому що кожна архітектура процесорів має свої властивості і заставляти світ перекомпілювати увесь софт під новий процесор при кожному релізі нереально. Отож і маємо товстезний шар сумісності.

Ось і наблизились ми до суті історіі. x86 мають довільну довжину інструкції, наразі від 1 до 15 байт. І це значить, що розпаралелити декодування дуже важко. Статті, які я читав, рапортують, що максимальна кількість декодерів у процах Інтела та АМД - 4 на кожне ядро проца.

На відміну від них, у ARM інструкції завжди по 4 байта, тобто бери нарізай бінарник як хочеш і пхай у декодери. І в M1 зараз 8 декодерів. І внутрішнє звірятко через те дуже-предуже ефективне.

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

(@ tg)

Доволі цікаво, як Епл використала один і той самий процесор у зовсім різних сегментах. І мак міні за 700$, і айпад про за 800$, і ноути трішки дорожче тисячі, і аймаки за 1700$ - всюди один і той самий проц (тільки іноді без одного перформанс-ядра у відяхи). Це типу з однієї сторони він енергоефективний (тож підходить айпадам), з іншої - достатньо швидкий, щоб продавати девайси за півтори тисячі і не боятися порівнянь з x86.

Прикольно, насправді. Я не передивлявся ретельно тестів та й не занурювався у подробиці, але на власних відчуттях так воно і є: ейр м1 з однієї сторони живе майже як айпад про наш (якому 4 роки напевно зараз), з іншої — він помітно швидший за мій попередній macbook pro. Much snappier UI, щоб розмовляти усталими термінами. ;) Я б навіть сказав, що відчуття від швидкості реакцій інтерфейсу не гірші, ніж у вінди на райзені — а вона завжди кращє макосі була з точки зору затримок в юаї.

Тож виглядає що епл нормально так попала. Зрозуміло, що то не овернайт саксес і вони його будували 12 років — у 2008 якось вмовили Джима Келлера приєднатися до Епла і купили згодом P.A. Semi, де він працював до того. Того самого Келлера, що автор Атлону64 і Райзенів!

Тож дуже цікаво, що там епл випустить далі! З ядрами наче зрозуміло, клепайте більші (і дорожчі) проци і буде більше ядер. А от з пам’яттю… мак про зара може мати до 1.5 терабайту озу, а з тою архітектурою пам‘яті, що є зараз, це буде нереально дорого. Перейдуть на DDR, як в усіх? Не знаю, але здається, що далі буде ще прикольніше. :)

(@ tg)

Кілька днів провели сім‘єю в Одесі і дуже мене неприємно вразила кількість реклами і оголошень російською мовою, наче у 90-ті повернувся. Тобто Київ не те що б україномовним мені відчувався, але майже вся реклама українською, на моє відчуття, 70% кур‘єрів та менеджерів та взагалі сфери обслуговування починають розмову українською, а більшість інших переходить на українську після перших моїх слів. І взагалі, я якось зібрав булки у кулак і з незнайомими людьми вже майже завжди українською спілкуюся. :)

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

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

(@ tg)

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

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

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

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

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

Понабирають студентів по 5$/година, а потім результати проектування як люкси здають, ггг :)

(@ tg)

Ось обговорювали с Вовою, чому ж Дія Сіті — це погано. Мої думки про це ось такі:

  1. Інженерно вони дуже слабкі. Дія, як аппка, дуже погано працює: то є там мої права, то немає, тупо час від часу як повезе. Розлогінює часто.
  2. Продуктовий віжн в них поганий. Він може і сильний, але поганий, тому що роблять вони централізованний реєстр документів, який дуже вразливий до корупції та кібер-атак. Нам, як країні, треба навпаки. От ID-картки в цілому у вірному напрямку рухалися, а єдиний реєстр — це дуже-дуже погано. Якщо хочете дізнатися наочно чому — подивіться на ютубі розслідування Навального про те, хто його травив.
  3. Менеджмент в них дуже поганий. На надзвичайно тупу і надзвичайно небезпечну дірку вони відреагували максимально тупо: мовчанням. Це просто неприпустимо для будь-якої публічної компанії, я вже не кажу про державі установи.
  4. Все, що робиться за кошти громадян для країни, повинно робитись з відкритим кодом з відкритою ліцензією. Тому що, по-перше, це наш софт, ми за нього заплатили, і не треба його від нас ховати. По-друге, це справа національної безпеки: мати не security through obscurity, а публічний контроль цієї самої безпечності ПО.

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

(@ tg)

Слухайте, провтикав взагалі написати, я пішов сьогодні в гості на стрім до Вови Рожкова @full_of_hatred. Тож якщо вам сьогодні ввечері немає чого робити, через 7 хвилинок ось тут: https://www.youtube.com/watch?v=2gwt1T9DjGk

(@ tg)

Написав статтю місяць тому і забув опублікувати, це капець. :) Кароч історія в тому, що показування HTML’ю користувачу після того, як він нажав кнопку “назад” - це не дуже тривіальна операція. З реактом історія була у тому, щоб заново відрендерити йому те, на що урл вказує, а без реакту… без реакту можна або зберігати верстку десь, або заново ходити на сервер. Друге робить HTMx, а перше робить TwinSpark: https://solovyov.net/blog/2021/history-snapshotting-in-twinspark-js/

(@ tg)

Рік тому написав я пост про те, як перемикаю різні розкладки клавіатури. Років 15 тому я користувався капслоком, який клацав між англ та рос розкладками. Українська у такому випадку, вочевидь, страждала. А кілька років тому я відкрив для себе Karabiner, і зараз по натисканню лівого команда вмикається англійська, правого - російська, а правого альту - українська.

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

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

(@ tg)

Macbook Air M1

Я вже четвертий місяць підряд терпів і не купляв новий макбук з процом м1 з двох причин: по-перше, я купив прошку 13 з нормальною клавою влітку, тож трішечки жаба давить, а по-друге, ходять чутки «у третьому кварталі буде про 14 з м2». Але кілька днів тому я відчув, що терпець мій вже вривається і я не можу так далі жити.

А практика каже, що якщо дуже хочеться, то треба купляти, навіть якщо логіка проти. :) Тож я плюнув і купив ейр на 8 озу і 512 ссд. 8 через те, що 16 настільки дорожче, що зелена тварюка аж хрипить, ну і хай там що, а я цілюся на прошку. Тож потерплю, плюс ніякі ідеї, докери та інше ненаситне я не юзаю. А 512 (а не 256) — щоб був повноцінний проц/відео, а не огризки з одним відключенним ядром. :)

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

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

Тепер в мене CLJS білд збирається не 9.5, а 6.3 секунди. Але це покращення в 30% не дає реального розуміння, наскільки швидше працює інтерфейс. Я такий довольний, шо капець, ггг. Тепер під час стрімів не буде мені волати у вухо і підпалювати пальці. :)

(@ tg)

Перекладення інтерфейсу програм історично робилося за допомогою функцій, якій ти даєш на вхід ключ (скажімо, 3232 чи index-page.welcome-banner), а вони під час роботи програми йдуть у словничок (напевно, в якийсь файл, що лежить рядом), і беруть справжню строку (типу Привіт, %s) — у яку потім щє підставляють змінні.

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

Висновок: переїжджайте на геттекст, якщо ви ще ні, досить з підходами 80-х жити. :)

(@ tg)

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

Але це не пригода. Пригода те, що в кінці я його припаркував, закинув Степанів у багажник і ми поїхали додому. А через чотири години я згадав, що я його просто поставив на підножку, навіть замок не зачинив. Ну, думаю, капець… Почитав хелп: якщо не здаси впродовж 12 годин, то штраф 10к, а якщо впродовж 24, то це вважається крадіжкою і коштує 15к. Не знаю, чи додатково, мені що так, що так не подобається.

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

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

(@ tg)

Те, що у програмуванні все на соплях тримається — звично всім, хоча й дратує трішки. Люди, буває, собі програми на Хаскелі пишуть, щоб гарантувати, що воно працює, типизація там, все інше — а потім воно виходить у реальний світ, йому приходять реальні дані, і всі гарантії розвалюються, тому що хтось той JSON збирає в 1С і забуває екранувати лапки у строках.

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

Але увесь цей стрімінговий сетап, особливо якщо використовувати опенсорсні/безкоштовні рішення, типу OBS та obs.ninja, Streamlabs, і таке інше, воно взагалі дуже складне, незрозуміле і ламається так хитро, що в мене опускаються руки. Ну тобто вчора в Роми, якого я підключив через ніндзю, дублювався звук мікрофона із затримкою (тобто відлуння). Чому - хоч вбийте, я не знаю. Взагалі те, як я ловив його звук - це смішно, і я навіть не хочу писати сюди подробиці, тому що йшов він зовсім не разом з відео (ррррррр). Хочеться якогось рішення простіше. :))

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

Хух, наче пару випустив, можна піти підкинути кілька разів малу, чи ще щось продуктивне зробити. 😁

(@ tg)

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

Ось тут: https://www.youtube.com/watch?v=uNF7QmFiQaw

(@ tg)

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

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

І ось приходить нотіфікашка, що кабель їде, а паралельно в месенджер олх з 15 фоток подібного змісту, і з вимірами ємності, etc…

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

Осьо він, якщо вдруг знадобиться (не реклама, я просто вражений максимально): https://instagram.com/goodcable

(@ tg)

(@ tg)

(@ tg)

(@ tg)

(@ tg)

(@ tg)

(@ tg)

Вчора з Ромою Лютіковим та Єгором Львівським у рамках конфи React Fwdays обговорювали, чи потрібен реакт, і як бути з тим, що він усюди (посилання не даю, бо воно за пейволом). А ще за тиждень до того мали схожу розмову у Клабхаузі.

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

Тож у наступний четвер, 1 квітня, о 19 годині за Києвом, приходьте послухати, чому ми викидуємо React, та що буде замість нього (спойлер: TwinSpark, але ви напевно і так це знали). УВАГА: все це зовсім не жарт!

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

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

Посилання на відео: https://www.youtube.com/watch?v=uNF7QmFiQaw

(@ tg)

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

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

Ну ок, дістав я справжній Андроїд, хоч ноут не реве. Але в adb logcat все пусто, ніякі дебагери не коннектяться, щось там якихось тулз познаходив і одна каже “я так не вмію, це надто старий реакт”. Дивлюся — так і є, з 2018 ніяких апдейтів, 0.58. Добре, думаю, давай я тебе на останній хлам оновлю, підуть якись помилки компіляції, якось воно буде.

Так і сталося, і я навіть був готовий, що в мене буде пригорати, але це можна йобу датися, насправді. Мало того, що в самого React Native такий churn коду та апі. Це я через три релізи реакти стрибнув і воно оре що те не те і то не так. Так щє й змінилися всі плагіни для Babel’я. А без нього ніяк. React Native - на Flow, треба компіляти. Половина бібліотек на тайпскрипті некомпільовані і ти повинен компіляти сам. Але й вся апка написана з синтаксисом, який якби ще не стандартний для жс-двигуна всередині реакту. Тобто щє якийсь плагін.

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

А потім починається, кожна ліба не вміє новий реакт, тож оновлюй і їх. І кожна ліба — це найспеціальніша у світі квітка, яка вважає, що окрім неї нічого не буває. Тож вони одне й те саме то перейменують, то переміщають між різними модулями, а в мене один хєр undefined is not a function, can't access variable of undefined. Хто тут андефайнед, підійміть руки?! Як тебе скотиняко знайти серед модуля на кілька сотень рядків?!!

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

Але ж не повинно так бути, якого біса воно таке все крихке? В мене тепер чітке відчуття, що ми зі своїм фронтом на ClojureScript’і як в якомусь інкубаторі сидимо…

А як в вас життя, нічого за останній час не нападало? :)

(@ tg)

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

І тіки що був біля банкомату і до мене дішла проста істина: спробував телефон туди тицьнути і так і є, воно працює! :)

Ото вже прогрес, тепер можна ті картки взагалі не носити, кайф!

Аваль взагалі активно хайрить, навіть он Аліменкова заманили туди. Цікаво, чи вийде в них привести себе в порядок?

(@ tg)

Не забули? Через годинку приходьте послухати мене, або покоментувати чи навіть задати питання :)

https://youtu.be/ggjQnfC2Xts

(@ tg)

Кілька років тому я подивився офігезний доклад Гіла Тене (це CTO Azul Systems, виробника кастомного і крутого JVM) про затримку — latency — зі StrangeLoop. Ця розповідь трішечки відкрила мені очі на те, що дуже велика кількість показників, які ми дивимось на роботі, це ті ж самі лаги з кваки. :) І коли тебе бісить те, що через нестабільний пінг ти з рельси не можеш попасти в жодну скакучу ціль, то це те ж саме відчуття, коли ти висиш на лінії в колл-центрі, або чекаєш, коли ж там вже посилочка приїде.

І одна частина цієї розповіді була про те, що на перший погляд здається, що 50 перцентиль затримки - це те, що відчувають 50% твоїх клієнтів, а 95 перцентиль - це те, що відчувають (негативно) 5% твоїх клієнтів. Але це зовсім не так! Якщо в нас поганий 95 перцентиль, то це значить, що з кожних ста запитів до сервера 5 будуть поганими. І якщо сесія клієнта складається з 20 запитів до сервера, то статистично всі клієнти відчують повільний сервіс.

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

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

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

Отак чувак, який займається розробкою віртуальної машини з дуже низькими затримками, допомагає нам розібратися у поведінці нормальних покупців. :) Якщо комусь недостатньо подробиць, то ось сама його розповідь: https://www.youtube.com/watch?v=lJ8ydIuPFeU

(@ tg)

На HN сьогодні новина: оцінка Zapier зараз 5 мільярдів доларів. Якщо хтось не чув цієї назви, то це платформа для автоматизації, типу «коли на цей ємейл прийде аттач, збережи його у дропбокс і додай нагадування у календар оплатити всі рахунки в дропбоксі».

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

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

Тож я пішов почитати коменти і один попався дуже прикольний, у відповідь на «я навіть оцінити такі суми не можу»:

— Я дивлюся на мільярд як на (дуже приблизно) половину круїзного лайнеру, або як на половину казіно на Стріпі у Лас-Вегасі. Тож Zapier це як казіно з пришвартованним лайнером.

Дуже візуально, прям можна усвідомити. 🤣

(@ tg)

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

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

А потім один з айосників — sancta simplicitas — використав у інтерфейсі системний перемикач. Типу вимкнено — чоловік, увімкнув — жінка.

Полагодити полагодили, а досі трішки соромно)

(@ tg)

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

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

Тож я вирішив, що треба робити те, що більше подобається людям: розмовляти, хєхє. Українською!

Тож ввечері у наступний четвер спробую це зробити, на дуже гарячу тему “Чому ж все-таки Clojure”. :) Заодно може й відповім на ті питання, на які тиждень тому скаржився: https://youtu.be/ggjQnfC2Xts

План такий: ви заздалегідь задаєте питання (чи голосуєте) ось тут — https://app.sli.do/event/bkgq9myy

Тож ставте нагадування і приходьте! Я сюди, авжеж, напишу за годинку-дві, але ви все одно поставте нагадування, щоб мені приємно було. :)

Мало не забув! Якщо у вас є ідеї, яку б тему мені розповісти, то скажіть у коментах (чи то у приват, whatever), а то я собі список зробив, але він мене якось не надихає.

(@ tg)

Як родилася мала у квітні, я почав іноді дивитися ютуб — коли її прикачуєш поспати, читати важкувато буває. :) І один з каналів, який нормально зайшов, це “ім. Т. Г. Шевченка”, де брати Капранови розповідають про історію України. Один брат, насправді, інший за кадром тусується. Доволі цікаво розповідають, насправді, але є один момент, який мене непокоїть.

Вони парять тему, що козаки і русини (русини як жителі української частини Київської Русі) — це два різних народи. По-перше, воно у відео трішки за вуха притягнуто, по-друге, суперечить всьому, що тільки можна знайти на поверхні, по-третє, виходить, що Хмельниччина - це загарбницька війна козаків за території Речі Посполитої, на якій жили русини? Weird shit.

Але я якось подивувався і вирішив, що то “художник так бачить”, буває, хоча відоси їх став дивитися з меншим бажанням і трішки більш критично… Аж тут згадав, що в них є “Мальована історія України”, а мені щось хочеться бумажне почитати. Знайшов її на vsiknygy, а там є перші кілька сторінок.

Хто мене знає особисто, зрозуміє, що пропустити печатне слово мені важко. :) З мобільним якось простіше стало, а раніше я написи на банках у туалеті читав декілька разів підряд, бо шо робити, ггг. Тож я їх прочитав і тут — https://vsiknygy.com.ua/upload/iblock/ff1/ff1cfd0b464e835b265014ef2a698b39.jpg — наприкінці сторінки “легендарна “Велесова книга”. 🤦

Що там нам Вікіпедія каже: “літературний фальсифікат, створений в XIX або більш імовірно XX столітті.” Це дуже відома липа і я не можу збагнути, як таке можно парити? То вони і для відео такі самі джерела беруть? :(

Зашквар такий шо в мене шось пригоріло)))

(@ tg)

Подивився відео про те, що значить при зйомці відео 10-bit 4:2:2 і трішечки приголомшений.

10 біт трішки відрізняється від того, як воно в компах. Колись треба було вмикати в настройках дісплею 24 біти, то це у відео-термінах 8-бітний колір, по 256 значень на кожен з ргб. А 10 біт у термінах вінди то 30-бітний, по 1024 значення на кожен з компонентів, тобто 1 мільярд відтінків. Ну це все просто.

А то 4:2:0 (як звичайно) і 4:2:2 (як в модних камерах) це було для мене сюрпризом. Значить так:

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

Тобто при нормальних умовах, в нас відео 8 біт 4:2:0, і це значить що колір є тільки в двох з восьми пікселей.

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

А ось і відео: https://youtu.be/prlQCQHLz8o

Капець.

(@ tg)

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

Зараз на вольві, вочевидь, АКПП (які ще й набагато кращіми за минулі роки стали), світло завжди на автоматі, постійно юзаю адаптивний круїз (щоб само гальмувало, якщо хто попереду висунувся), та й все таке інше. При цьому я сьогодні замість зробити музику тихіше скинув 10 кмч на круїзі, та декілька разів задумувався, що там з двірниками зробити (щоб заднє скло помити). Я пам‘ятаю близько 3 тисяч хоткеїв ємаксу (чи скіки там, ну більше десяти так точно), а тут прям треба замислюватися.

Коли мені було 20 і в голові було пустіше, та й функцій в машині втричі менше - в повороті непокоїло щоб і передача правильна була, і траекторія красива, і все таке інше. А зараз… зараз хочеться, щоб я тільки про поворот думав у момент повороту, а різні штуки нехай самі працюють, і передачі клацають, і вікна труть, і шо там щє, на 20 градусів цельсія дмуть. І взагалі, чого це ще немає автоматичного миття скла, нащо я ото смикаю постійно?!

Це я про шо взагалі? Про контрол фріків! Мав розмову за кложу з двома різними людьми, між собою незнайомими. Вони себе, вочевидь, впізнають, але я їм обом в очі сказав те саме, що тут пишу, тож маю надію, що сильно не засмутяться. No offence plz, я дуже намагаюся ці приклади використати для викарбовування думок, а не щоб вас публічно в обличчя потикати. Тим більш навряд чи хтось вас впізнає. :)

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

В другого схоже занепокоєння: коли ти в імперативній мові пишеш якусь операцію над масивом, ти бачиш очима, що це цикл, це в тебе O(n), щось там про пам’ять розумієш. А в функціональному програмуванні (чи там в кложі зокрема) в тебе якісь map/reduce, якісь хитрі функції, нічого ти не бачиш і не відчуваєш. Мало того, що map та reduce такі самі цикли (така сама навичка, як і складність в імперативних мовах бачити), так щє й та “зрозуміла мова” - то Python, де казна-що коїться з точки зору перформансу та пам’яті. Я б куди більше переймався за наслідування класів, яке робить життя невитерпно невизначенним (недетермінованим, якщо ви наполягаєте).

І я ось думаю, що це за спори/питання? Ну вони ж зовсім не про мінуси кложи, ні про суть різниці між функціональними та імперативними мовами… Вони про якісь зрозумілі проблеми, за які можна вчепитися? Ну типу я можу придумати, що це може бути проблемою, то напевно це проблема?

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

(@ tg)

Я дуже люблю всякі цікаві лінгвістичні факти і тільки що згадав один дуже прикольний. В англійскій мові є декілька шарів лексики. Найпростіший приклад - це те, що корову вони називають cow - це з древньо-германського kwon (корова). А яловичину називають beef, це від давньо-французського buef (корова). Це сталося через захват норманами Англії в 11 сторіччі, через що всі пани, які їли м’ясо, розмовляли французською, а всі селяни, які цих тваринок ростили - англійською.

Або ж line/order, теж схожа історія - просте слово і “на понтах”. :) Поверх цього всього ще є лексика напряму з латини, на кшталт respect, яка з праць церковників та вчених заїхала, і відчувається ще вище рівнем за надбання з французьскої. Якщо продовжувати лінію (pun intended) line/order, з латини це sequence.

Пішов перевірив, чи корова/яловичина/говядина не схожа на ситуацію в Англії, і наче ні, не схоже. А яловичина та говядина розрізняються тому, що спочатку яловичина — це було м’ясо ялової, тобто безплідної чи некорисної корови, а говядина — будь-якої говяди (тобто корови).

(@ tg)

Мій син спілкується як диктор ОРТ. Маріанна різні макарони складає у шафу, а Степан тоном кримінальної хроніки: «МАМА ОТІ МАКАРОНИ ЩО ТИ ПОКЛАЛА ПЕРШИМИ МИ БУДЕМО ЇСТИ НА ОБІД МАМА ТИ ЧУЛА МАМА ОТІ ЩО ПЕРШИМИ ТИ ЧУЛА МАМА ТІЛЬКИ ЇХ».

Наче хоче, щоб ця думка в підсвідомості засіла. Гипнотизер малий. Смішно, але й ще трішки втомлює. Але й смішно)))

(@ tg)

Вова вчора написав есе про Gear Aquisition Syndrome і я подумав, що в мене є якийсь його прояв, але трішки іншого вигляду. Коли ми робили ремонт у квартирі, можна було піти і купити яку-небудь техніку, тому що вся вона +- адекватна. Але ні, в мене була табличка з переліком всього, що треба купити, моделями, на які я дивлюся, і різними характеристиками для порівняння.

Останнє — це найскладніше, що ж порівнювати? Типу коли купляєш щось знайоме, як от диск в комп’ютер, то просто знаєш, що там важливо. А коли це пралка? Дупля не відбиваю, що там порівнювати. Не відбивав, точніше. :)) Йдеш на wirecutter, і там вони пояснюють, чому рекомендують що вони там рекомендують — і з того можна зрозуміти, які ж критерії.

У найгірших випадках стається як зі стримінгом , де ми з Сєвою потім з’ясовували, чи можна зробити виробництво юсб-камер . У найкращих — як з гітарою, де я трішки попитав навкруги, трішки подумав що я від неї хочу, і загалом на вибір потратив всього 2-3 години. :))

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

(@ tg)

Поїхали сім‘єю у відпуску до Плаю. Це курорт біля траси Київ-Чоп, за Сколе. Вони себе позиціонують як гірськолижний, але суто за лижами сюди їхати аж з Києва не варто - два підйомники і чотири спуски не роблять ніякої конкуренції Буковелю. :)

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

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

Норм, кароч, мені сподобалося. :)

(@ tg)

Всім привіт, насправді! :) Я щось поки не розумію різниці у медіа з блогом, якщо чесно - я підписан на 3 чи 4 канали і всі вони постять величезні пости такі пророблені досить помітно. :)

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

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

(@ tg)

Коли я писав TwinSpark, однією з ідей була code locality: так, щоб в момент читання коду можна було прям на елементі побачити все, що він тут збирається робити. По-простому — я хотів мати у верстці елементівonclick="hide()", щоб не треба було ходити в інший файл (або купу їх), як з jQuery. В реакті воно так і є, прям у JSX ти пишеш що має відбутися на кліку.

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

Так з’явилися екшени ts-action. Ідея така: є тригер екшенів ts-trigger, за замовчуванням це click (або submit для форми), є ціль ts-target, за замовчуванням це сам елемент, де все трапляється, і є строка екшенів виду class+ loading, delay 1s, remove. Коми розділяють екшени, перше слово — це назва екшену, всі інші передаються просто строками — це вже робота кожного екшену вирішити що з тим робити.

Екшен або виконується одразу (синхронно), або може повернути проміс, і тоді увесь механізм його чекає. Це дозволяє зробити щось на кшталт class+ fade, wait transitionend, remove, де .fade вмикає якийсь цсс-перехід на елементі, і після завершення того елементу все вбивається. Краса!

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

Тож я з реальнім інтересом слідкую за проектом https://hyperscript.org, де Карсон (автор Intercooler.js та HTMx) намається щось розвивати у тому ж напрямку, але з більшою експресивністю. Одна штука, що дратує — це HyperTalk або AppleScript направленість, вони роблять все це дуже схожим на нормальну англійську мову, з різними опціональними штуками. Я досить багато возився з AppleScript і знаю що це потім дуже складно вивчати і розбирати, тож я б волів би бачити тупішу формальнішу граматику.

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

(@ tg)

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

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

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

Тож я вирішив спробувати вести канал, куди можна бути писати думки широкого профілю. :)) Щє й українську потреную, до сраки той охват аудиторії. ;)

(@ tg)