Bite the Byte
2.7K subscribers
24 photos
1 video
246 links
Соловйов здорової людини!

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

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

Без реклами
Download Telegram
Анонси Клаудфлера за останні роки виглядають дуже цікаво — наче вони планують підрізати Амазон. Точніше не так, воно виглядало так раніше, а у цьому році вони прямо його підрізали. :)

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

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

Супер круто все роблять, дуже цікаво спостерігати.
Колапс

За останній тиждень подивилися новий реліз Суспільного, про розвал Совку, ГКЧП і таке інше. 7 серій хвилин по 40, більшою частиною інтерв'ю від різних цікавих людей, які тим чи іншим чином приймали участь у подіях — не буду їх перераховувати, дуже вже їх багато: журналісти, діаспора, чиновники тощо.

Я занадто малий, щоб пам'ятати, що там відбувалося — взагалі пам'ятаю дисонанс у голові класі в третьому-четвертому, коли в усіх книжках, де це може бути згадано — я любив читати "Детскую Энциклопедию" і щось таке риже в трьох томах — написано "живемо в найкращій страні у світі - СРСР", а у школі проскакує Україна. :)

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

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

Ну пре мене написання інструментів, що поробиш. :) Чи не більше, ніж власне написання текстів. 😁

Так от, я довго писав пости в телеграм у окремому редакторі, а потім копіював у телеграм руцями, але ж терпець уривається! 🤦‍♂️ А в Ulysses нещодавно вийшло оновлення: вони навчилися оновлювати пост у Wordpress і в Ghost. Апі вордпресу торкатися трохи неприємно, а ось у госта, думаю, подивлюся.

І що ви думаєте? Все вийшло! Зробив штуку — xapi cms (ну, кросс-апі, зрозуміло?). Це такий безголовий cms, який реалізує частину апі Ghost’a. Воно ще дуже рудиментарне, але головне працює. Виглядає це так:

• Авторизуєшся через гітхаб
• Воно видає тобі логін/пароль для Ulysses
• Додаєш в Ulysses як Ghost
• Ну все, можеш писати та публікувати

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

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

Це інсайт, до якого ми з Севою дійшли років з 10-15 тому: робити можна дуже багато чого, але ти не знаєш навіть про існування цього і в результаті втрачаєш час. Це «невідоме невідоме», на відміну від «відомого невідомого», про яке ти можеш піти почитати. Гарний приклад останнього — їзда на велосипеді, всі про неї знають, навіть якщо не всі вміють. Але от лижі... коли я почав працювати, чому ми з друзями не їздили покататися? Просто не знали, що це так просто — узяв і поїхав!

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

Інші його роздуми теж цікаві, але він графоман, тому радити дочитати до кінця важко, я сам не можу, хахаха. :)
Лечу у Голандію (що блін з цією темою? чому я їх не називаю країну Нідерландами? якийсь брейн демейдж; добре хоч літак у Амстер, реально Голандія), прям от сьогодні. А вчора правительство нідерландське (виправив тут) прийняло рішення перенести Україну з «безпечних» до «небезпечних» країн.

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

Поки сидів у таксі, вирішив уважно все перечитати, і воно каже:

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.

Фантастика. Ніхто у цьому світі не захищений від людей, які приймають складні зміни з сьогодні на завтра. 🤦‍♂️
Дратують люди, які вважають 80 символів неважливим обмеженням через недосконалість терміналів у древності (тут маються на увазі часи 30-50 років тому).

Це ж невимовно круте обмеження! Фасілітатор покращення якості коду! І все таке. Чому, запитає допитливий читач (ггг).

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

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

Ви можете згадати мої думки про поради, тож думайте самі. У сенсі думайте про те, як краще виконувати це правило. 😬
Нідерландська система поїздів наче зійшла зі сторінок науково-фантастичної книги. Яку ще писали років 60-70 тому, коли вірили, що людство може організуватися і побудувати логічне суспільство. :)

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

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

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

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

А ось я поважаю! Дуже стараюся приходити вчасно, і запізнююся тільки з поважних причин.

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

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

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

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

А от слово "Річ" роками не міг зрозуміти. Я розумію, що разом "Річ Посполита" — це "республіка", res publica, але ніде ніколи ніхто не пояснював значення цього слова. Ну як відібрало їм, чи що. Оце навіть якийсь час думав, що це термін типу "Січ", яке незрозуміло звідки взялося — мови розвиваються іноді дуже незрозумілими путями.

Ну і шо, колись воно набридло мені, і я пішов шукати. Спочатку пішов до Гугл Транслейту і він мені каже, так res — це ж річ. Сууупер, думаю, допоміг. Клац на англійську, а воно мені - thing. 🤦‍♂️ Отак і роздуплився, що на сучасну мову річ посполитанародна штука.
Трійко рочків тому всередині сайта Касти ми зробили цікаву (для мене) річ — закешували результати збирання товару по всій базі у тій самій базі.

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

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

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

Так ми жили аж до минулого тижня, коли вже вкінець задовбало, що в цього апі 99 процентиль - 300 мс під навантаженням. А тепер ми прожили перший день тижня чорної п‘ятниці з 99 процентилем у 130 мс! Непогано, га?

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

> Конфіг у цьому випадку — це типу залежність для прорахунку. Скажімо, хочеш відрендерити ім'я товару — то треба шаблон, значить від нього і будемо хеш рахувати.

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

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

P.S. А ще ми у п‘ятницю півтори години паршиво працювали, але це еластік винуватий — товари себе відчували мов живі. І це зовсім інша історія. :)
Слухайте шо! Ми з fwdays записали перший подкаст, де я ведучій! ☺️ Тож історія така: вибирати технології насправді дуже важко, їх дуже багато, вони різноманітні, а оцінити плюси і мінуси потребує багато часу. Тож іноді доводиться вгадувати, а у більшості випадків взагалі просто брати щось знайоме, хоч може і неоптимальне.

Як це виглядає: звемо якусь авторитетну людину і обговорюємо з нею технології, вподобання, роздуми на тему і таке інше у пошуках бажаного, але досить міфічного Right Tool For the Job. :-)

Велкам послухати RTFJ #1 з Андрієм Листочкиним! ⚡️
Raycast

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

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

• запустити програму шорткатом
• перемістити вікно шорткатом (заміна SizeUp фактично)
• переключити розкладку клавіатури (у парі з Karabiner-Elements)

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

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

Тіки однієї речі не вистачає — вміння показувати напис великими літерами, те що Альфред по ⌘ ⏎ робить. Чи можна якийсь нормальний екстеншен написати, чи може показати симпатичний напис — це занадто складно для джаваскріпта?.. :)
‍DOU опубліковали інтерв'ю зі мною, так що можна піти подивитися, якщо цікаво. :) Причому вони зробили і текстову версію, але вона дуже скорочена, типу там більше факти, ніж роздуми. Мені здається, що послухати буде цікавіше, ніж почитати. :)

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

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

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

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

Зняв куртку, проліз туди, і пішов собі на сервер дивитися. Приєднав екран, а там скрінсейвер консольний фрі, де демон літає туди-сюди, висить. Бутнув, значить, воно завелось, і пішов собі назад. :)
Давайте трохи за результати 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-го була нудною. Чого, власне, ми й прагнули. ☺️
Є така штука, як Cloudflare Workers. Це спосіб задеплоїти джаваскрипт на серверах в клаудфлерівські точках присутності. Ну типу AWS Lambda, тільки для тих, хто хоче зробити небагато і швидко. Точно кружляють навколо традиційних авсів і хочуть взяти їх в оточення. :) Але я не про те.

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

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

• Компіляція дуже довга, paste.in.ua, який ну дуже простий сервіс — вміє хттп, жсон та маркдаун, а замість БД там файли, бо драйвер к sqlite я не зміг зібрати — компілюється він кілька хвилин, на стандартному варіанті Github Actions — 8 хвилин!
• Компіляція, на жаль, змінює те, що відбувається. Грааль не може зкомпілювати все і приходиться трохи підганяти під нього поведінку. Є загалом прийнятні штуки: відсутність рефлексії, відсутність дій на верхньому рівні неймспейсів (бо вони при компіляції виконуються), але є й речі, які я не можу сформулювати. Просто реально перший раз зібрати все — це купа спроб з пошуками помилок у гуглі й експериментів. Той же самий драйвер бд я так і не зміг зібрати.
• Спало на думку, що до скомпільованого бінарника не приєднатися реплом, але у такому середовищі, як serverless cloud function worker (чи можна ще слово сюди додати? Чи я вже всі хайпові терміни заюзав? :)) — воно не дуже має сенс.

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

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

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

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

Чи це життя взагалі?! Якісь люди з Чехії подумали так само і зробили сайт, якій вміє з QR-коду сгенерувати файлик для Wallet'у. Скануєш QR-код сертифікату, або завантажуєш його скриншот, і отримуєш pkpass. Відкрив — і тепер за подвійним натисканням на бокову кнопку ховається той сертифікат.

Не треба розблокувати айфон, шукати потім дію, чекати поки її швидкісні сервери дадуть відповідь, чекати розблокування (чи навпаки?)... Все локально сидить в айфоні.

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

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

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

Значит, попри купу самоіронії, порівняння з усілякими мурахами та бджілками, і таке інше, людство — доволі круте. :)
Пару тижнів тому Марцин написав пост, про те, як він переписав asciinema-player з ClojureScript на Rust + WASM. В результаті в нього бандл став у 4 рази менший і швидкість виросла у 50 разів.

Це дуже крутий результат! Але дуже цікаво чому, і чи не має тут історії про те, що не треба використовувати CLJS взагалі? 😁

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

А у vt-clj відбувається неподобство, зі здоровезних масивів даних (ну як здоровезних, width*height терміналу, ггг) генерувалися нові такі самі — думаю, що GC браузерів просто захлинався від такого нахабства. Тут навіть structural sharing занадто багато не допоможе. У цьому місці йому б треба було взяти ArrayBuffer, і перестати мучити худобу. :)) Але! Треба сказати, що я приємно здивований кількістю кода на расті, і пов'язую це з тим, що йому вже не прийшлося експериментувати з імплементацією, як у кложі.

Інша велика зміна, яку він зробив — проміняв ReactJS на SolidJS. Каже, що набагато швидше, ніж реакт. Може, я не дуже в темі. Але що він робив до цього - використовував Reagent. Це дуже ергономічний і дуже неефективний врапер навколо реакту. Найбільша його проблема — він не компілює хікап ([:div "smth"]) у виклики реакту, і робить це у рантаймі.

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

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

Позаминулої суботи ми записували новий випуск подкасту (spoiler alert!) з Ромою Лютіковим і прийшли до несподіваного визначення: Clojure — це паразит. Причому паразит у квадраті! От дивіться.

По-перше, в кложі немає своє платформи, так? Вона працює або на JVM, або на .NET, або на JS, або он там на підході ClojureDart, щоби Flutter можна було нормальною мовою писати. Це ж одна з основних ціннісних пропозицій кложі!

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

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