Ладно, напишу шо думаю. Як на мене, то це все виглядає так, що більшості проєктам треба HTML і трохи JS. Але тому шо за роки досягнень та маркетингу всі пересіли на React, плюс Vercel пушить непотрібну складність, то є запит на щось модернове і просте.
Але люди вже звикли к отаким типу фулстек фреймворкам, де в тебе і бекенд з серверним рендерингом і роутер і дата фетчинг і клієнт і все це інтегровано. Тому хочеться щоби було комплексне і просте рішення.
Тому повертаючись до React. Keep calm і продовжуйте робити на ньому те, для чого він був створений — виключно клієнтські високо-інтерактивні застосунки. Саме в таких проєктах декларативність UI допомагає не загрузнути у складності. А для лендосів і конструкторів з формочками воно не треба.
В моїй роботі мало що змінилось за роки використання реакту, хіба що хуки прийшли, але і ними я мало користуюсь, бо для нетривіальних проєктів краще підходить стейт менеджер. З усіх апішок доданих за останні роки я майже нічого не використовую. І це не заважає будувати такі апки як https://pitch.com/ та https://whimsical.com/
Найкраще що дав реакт — це декларативний UI
Але люди вже звикли к отаким типу фулстек фреймворкам, де в тебе і бекенд з серверним рендерингом і роутер і дата фетчинг і клієнт і все це інтегровано. Тому хочеться щоби було комплексне і просте рішення.
Тому повертаючись до React. Keep calm і продовжуйте робити на ньому те, для чого він був створений — виключно клієнтські високо-інтерактивні застосунки. Саме в таких проєктах декларативність UI допомагає не загрузнути у складності. А для лендосів і конструкторів з формочками воно не треба.
В моїй роботі мало що змінилось за роки використання реакту, хіба що хуки прийшли, але і ними я мало користуюсь, бо для нетривіальних проєктів краще підходить стейт менеджер. З усіх апішок доданих за останні роки я майже нічого не використовую. І це не заважає будувати такі апки як https://pitch.com/ та https://whimsical.com/
Найкраще що дав реакт — це декларативний UI
👍16❤2
Давайте розкажу вам про всілякі performance штуки.
Нещодавно дивився як в ClojureScript прискорити деякі операції в іммутабельних векторах. Вектор це типу масив, але усі операції на ньому створюють новий вектор і під капотом він імплементований як дерево з 32 нодами в кожній гілці. Отут можна більш детально почитати про імплементацію векторів https://hypirion.com/musings/understanding-persistent-vector-pt-1
Як порівняти два таких вектори? Типу зробити
Замість того, щоб використовувати загальний механізм (тут це ітератор), можна спеціалізувати код для порівняння двох векторів і використати деталі імплементації вектору щоб прискорити операцію порівняння. По суті можна пройтись по дереву, порівнюючи його гілки (масиви по 32 елементи). Так як вектор імутабельний, його гілки теж імутабельні. Тому порівняння пари гілок в більшості випадків можна робити по посиланню, а коли гілки відмінні по посиланню, то перевірити їх глибоким обходом.
Таким чином worst case виграш по швидкості виходить близько 30%, що дуже непогано.
Ще одна штука. Є в нас вектор
У реальному коді конвертація векторів у chunked seq відбувається доволі часто. Я помітив, що порівняння вектору з chunked seq повільніше ніж порівняння двох векторів між собою. Виявилось що як і у випадку з векторами, порівняння відбувається лінійниим перебором. А так як chunked seq тримає в собі оригінальний вектор, то задача оптимізації цього випадку по суті зводиться знов до порівняння двох векторів через спеціалізацію коду під цей випадок.
Тут результати бенчмарку показали приріст у швидкості операції від 300% до 500%.
Здавалося б що це непотрібні мікро оптимізації, але коли вони робляться у самій мові програмування чи її стандартній бібліотеці, то всі користувачі мови автоматично отримують покращення при цьому не сплачуючи за це ні центу.
Також це хороший приклад того, як на перших порах можна зробити працююче рішення на абстракціях і пізніше покращити конкретні кейси через спеціалізацію алгоритму на більш низькому рівні. В таких випадках точкове ускладнення коду цілком виправдане.
Нещодавно дивився як в ClojureScript прискорити деякі операції в іммутабельних векторах. Вектор це типу масив, але усі операції на ньому створюють новий вектор і під капотом він імплементований як дерево з 32 нодами в кожній гілці. Отут можна більш детально почитати про імплементацію векторів https://hypirion.com/musings/understanding-persistent-vector-pt-1
Як порівняти два таких вектори? Типу зробити
[1 2 3] == [1 2 3]. По класиці — це пройтись по кожному елементу і порівняти їх. Це реалізовано через ітератор, порівнюємо кожні наступні значення поки не знайдемо пару відмінних значень it1.next() == it2.next(). Аллокація ітератору і виклик його методів займає час і пам'ять. Але є інший спосіб.Замість того, щоб використовувати загальний механізм (тут це ітератор), можна спеціалізувати код для порівняння двох векторів і використати деталі імплементації вектору щоб прискорити операцію порівняння. По суті можна пройтись по дереву, порівнюючи його гілки (масиви по 32 елементи). Так як вектор імутабельний, його гілки теж імутабельні. Тому порівняння пари гілок в більшості випадків можна робити по посиланню, а коли гілки відмінні по посиланню, то перевірити їх глибоким обходом.
Таким чином worst case виграш по швидкості виходить близько 30%, що дуже непогано.
Ще одна штука. Є в нас вектор
[1 2 3 4 5 6 7 8], і ми робимо йому (drop v 4) щоб видалити перші 4 значення. Під капотом насправді оригінальний вектор не змінюється, а огортається в тип даних ChunkedSeq (послідовність значень розбита на групи) і трекає позицію з якою ця послідовність починається. Якщо ми дропнули перші 4 значення у векторі, то chunked seq буде починати вичитувати значення з індексу 4 у оригінальному векторі.У реальному коді конвертація векторів у chunked seq відбувається доволі часто. Я помітив, що порівняння вектору з chunked seq повільніше ніж порівняння двох векторів між собою. Виявилось що як і у випадку з векторами, порівняння відбувається лінійниим перебором. А так як chunked seq тримає в собі оригінальний вектор, то задача оптимізації цього випадку по суті зводиться знов до порівняння двох векторів через спеціалізацію коду під цей випадок.
Тут результати бенчмарку показали приріст у швидкості операції від 300% до 500%.
Здавалося б що це непотрібні мікро оптимізації, але коли вони робляться у самій мові програмування чи її стандартній бібліотеці, то всі користувачі мови автоматично отримують покращення при цьому не сплачуючи за це ні центу.
Також це хороший приклад того, як на перших порах можна зробити працююче рішення на абстракціях і пізніше покращити конкретні кейси через спеціалізацію алгоритму на більш низькому рівні. В таких випадках точкове ускладнення коду цілком виправдане.
Hypirion
Understanding Clojure's Persistent Vectors, pt. 1
Ever wondered how Clojure's persistent vector actually works? This is part 1 of a blog series which aims to explain them.
👍21🤯2
Прийшов час збирати ваші донати на пластик для друку бімб для ЗСУ. За останні три місяці ми надрукували виробів на 750кг
Гроші на банці закінчуються, а вже треба купляти пластик. Цього місяця ми ще й розширили команду друкарів.
Тому як завжди, буду вдячний за допомогу та поширення 👉 https://send.monobank.ua/jar/8TTMjgaRFy
Гроші на банці закінчуються, а вже треба купляти пластик. Цього місяця ми ще й розширили команду друкарів.
Тому як завжди, буду вдячний за допомогу та поширення 👉 https://send.monobank.ua/jar/8TTMjgaRFy
🔥20❤4👏1
Хтось шукає роботу розробником (веб та/або мобайл)? Знайомим у медичний стартап треба людина для розробки mvp. Пишіть в коментах, передам контакт.
доречі класна штука за кермом — це включити chatgpt у голосовому режимі і обговорювати свої штуки з ним поки кудись їдеш, працює дуже класно в дорозі
я іноді використовую його як туристичний гайд, питаю про населені пункти які проїзжаю
кльово було б інтегрувати в нього геолокацію та камеру переднього/заднього виду )
я іноді використовую його як туристичний гайд, питаю про населені пункти які проїзжаю
кльово було б інтегрувати в нього геолокацію та камеру переднього/заднього виду )
❤18🔥14👍6
Записав вам відосік про хату в селі і роботи за перший місяць після придбання. Поки шо там все на етапі розгрібання наслідків житя минулих власників за останні 50 років.
https://www.youtube.com/watch?v=fVyLALBLuUc
https://www.youtube.com/watch?v=fVyLALBLuUc
YouTube
Шось про хату в селі, ч.1, про хату та ділянку
- 00:00 про хату
- 02:22 стан даху
- 03:43 опалення
- 04:04 про бур'ян та сміття
- 06:33 свердловина на воду
- 07:27 комунікації
- 09:33 стан фундаменту
- 02:22 стан даху
- 03:43 опалення
- 04:04 про бур'ян та сміття
- 06:33 свердловина на воду
- 07:27 комунікації
- 09:33 стан фундаменту
🔥26👍7👏1
якщо ще не купили хату, можете пограти в симулятор реставрації мазанки ))
https://store.steampowered.com/app/2642760/Back_to_Hearth/?l=ukrainian
https://store.steampowered.com/app/2642760/Back_to_Hearth/?l=ukrainian
Steampowered
Back to Hearth on Steam
Step into a quiet, abandoned Ukrainian village, left empty after the Calamity. In this short, meditative, and melancholic journey, you’ll rekindle the hearths of deserted homes, restoring warmth and hope to the families who once lived here.
😁8🔥4👍1
Так, а кого ви по будівництву дивитесь? Я поки шо вивчаю відоси оцього пана https://www.youtube.com/@TerekhovO
👍7
This media is not supported in your browser
VIEW IN TELEGRAM
Нагадую вам про збір на корча Т5 для мого товариша та його побратимів з fpv підрозділу в 1 бригаді ТРО
Маємо 200 тис з 420. Буду вдячний за допомогу донатом та поширенням 👉 https://send.monobank.ua/jar/8czBpeXpDu
Маємо 200 тис з 420. Буду вдячний за допомогу донатом та поширенням 👉 https://send.monobank.ua/jar/8czBpeXpDu
❤9
в мене є невеличкий англомовний канал де я в основному викладаю відоси по кложурі
на конфі я розказував як в кложурі за допомогою макросів можна робити програми які самі себе компілюють, в оцьому відосі розказую про щось подібне https://www.youtube.com/watch?v=OVBmq7fmBrI
на конфі я розказував як в кложурі за допомогою макросів можна робити програми які самі себе компілюють, в оцьому відосі розказую про щось подібне https://www.youtube.com/watch?v=OVBmq7fmBrI
YouTube
Using ClojureScript compiler to improve developer experience
Learn how to leverage ClojureScript's analyzer to improve developer experience for your macro library users
🔥21👍3
класний допис про SSA (single static assignment) — техніка прдеставлення коду в оптимізуючих компіляторах
https://mcyoung.xyz/2025/10/21/ssa-1/
https://mcyoung.xyz/2025/10/21/ssa-1/
mcyoung.xyz
Why SSA? · mcyoung
👍2