solovyov.net

Bite the Byte (uk)

Blog (en)

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

Є така штука, як 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)