TGTGInsightаналитика telegramLIVE / telegram public index
К списку каналов
The channel has no name! avatar

TGINSIGHT CHAT

The channel has no name!

@codev0s

Технологии

Канал фронтендера. Пишу про свой опыт, и взгляды на разработку. AlmatyJS co-org. Зарабатываю на JS. Заглядываюсь на Clojure. Мечтаю перекатиться в бэкенд. Учусь на магистратуре на Software Engineering. tw: _codev0 gh: codev0 Фидбэк сюда @codev0

Подписчики102Текущее число подписчиков
Постов197Проиндексировано постов
Охват1,735Просмотры последних постов
Последние посты

Последние посты

Стр. 9 из 17 · 197 постов

Опубликован 22 окт.

React Forget Status Update React Forget презентовали почти 2 года назад , но с тех пор про него ничего не было слышно. На столько ничего, что на реддите даже появился пост Did the React team forget the React Forget compiler? в который пришёл один из разработчиков и рассказал в чём сложность разработки и почему это занимает столько времени. Он же выступил пару недель назад на React India с докладом Statically analysing react components for fun and profit, в котором чуть подробней рассказал тоже самое, что и на реддите. А два дня назад ещё двое ребят выступили на React Advanced. И вот этот доклад прям интересный! Во-первых, показали как выглядит внутренний playground для разработки (что-то в духе бабеля и тайпскрипта). Т.е. React Forget действительно существует и работает. Во-вторых, поделились опытом использования в Quest Store (приложение для VR-шлема): — смена табов стала работать на 150% быстрее — загрузка страницы на 4-12% быстрее — показали на сколько ре-рендер приложения становится эффективне (см. скрины) В-третьих, рассказали, что react forget обкатывают и в инстаграме. Т.к. это веб, то здесь появлется вопросы производительности, на которые сейчас ищут ответы: — в результате компиляции кода становится больше, как это сказывается на старте приложения? Как сильно? На сколько этим можно пожертвовать? — из-за повсеместной мемоизации увеличивается потребление памяти. Как с этим справляются дешевые андроид смартфоны? В-четвёртых, немного прояснили таймлайн разработки: 1. Proof of concept 2. Работающий компайлер (в большинстве случаев) 3. Тестирование в нескольких продуктах — мы сейчас находимся здесь 4. Релиз во всех продуктах Meta 5. Публичный релиз В-пятых, подтвердили что ультимативная цель — избавиться от всех API с мемоизацией: useMemo, memo, useCallback. В-шестых, рассказали, что сейчас React Forget существует в качестве Babel плагина, но потенциально его будет легко (или не очень) перенести на другие инструменты. P.S. Fun fact: пост про React Forget самый популярный в канале, 11к просмотров.

158 views

Опубликован 18 окт.

В последнее время нравится использовать Warp Terminal вместо iTerm/Alacrity. Написан на Rust. AI ассистент. Интерфейс похожий на чат. https://www.youtube.com/watch?v=1YZLPJ5X18k&t=2s

149 views

Опубликован 18 окт.

Вышел ReactQuery 5. Не то чтобы я рад этому, на мой взгляд есть SWR. Просто информация. https://twitter.com/TkDodo/status/1714262102305632643

135 views

Опубликован 18 окт.

DefinitelyTyped is a monorepo! DefinitelyTyped только что стал полноценным монорепозиторием на основое pnpm! В DefinitelyTyped хранятся все пакеты в @types организации. Если пакет не поставляет типы сам, то всегда можно прислать пул-реквест в этот репозиторий и установить пакет отдельно (так делает, например, react с его @types/react). Масштаб впечатляет — 8710 пакетов в одном репозитории! Это миграции посвящены аж три поста: 1. What is DefinitelyTyped, and is it a monorepo? — как был устроен репозиторий и какие проблемы были до миграции. 2. Speeding up pnpm — название говорит само за себя. Естественно, при таком объёме всплывают не очень эффективные алгоритмы. Особенно круто, что показан процесс профилирования. 3. DefinitelyTyped is a monorepo! — как теперь всё устроено, какие проблемы сохранились (или появились) и что дальше. Монументальная работа и огромный, в том числе и маркетинговый, успех для pnpm!

122 views

Опубликован 14 окт.

Safari class fields implementation is buggy: part two, Tt edition Я уже рассказывал о том, как сафари не очень хорошо (мягко говоря) дружит с замыканиями в class fields. И вот, спустя полгода, мы снова здесь. Long time no see как говорится! В прошлый четверг я закончил миграцю с Jest на Vitest в последнем нашем проекте (про наш опыт можно почитать тут), всё протестил и выкатил в прод. На следующей день пришла жалоба от пользователя «форма поиска исчезает в сафари 15— ничего не работает». При этом я форму эту не трогал даже близко. Весело! Для начала пошли в BrowserStack чтобы посмотреть что ж там в 15 сафари происходит (какая же гениальная система обновлений у сафари, боже, я никогда это не пойму). В 15 сафари мы ничего не могли воспроизвести около часа, хотя у тестировщика разок получилось. Решили ради интереса попробовать сафари 14, который мы не поддерживаем — и сразу же воспроизвелось, причём стабильно. Увидели «ReferenceError: Tt is not defined». В этот раз проблемное место нашли сразу же, т.к. такая переменная была одна на весь бандл. Ну в общем всё тоже самое: class field, замыкание, вспомнили что в 15 сафари проблема иногда воспроизводилась, а иногда не особо. Но как так вышло, что мы чиним ту же проблему, что и полгода назад? А всё просто — проблема та же, но в другом проекте! Понятно, что это чинится использованием babel/plugin-proposal-class-properties, но почему всё сломалось? Если поменялся результат билда, то очевидно, что обновилась какая-то транизитивная зависимость (зависимость зависимости зависимости зависимости, ну вы знаете). В yarn.lock смотреть было бесполезно, т.к. дифф очень большой. Решил сравнить мастер с веткой через yarn info. yarn info --recursive --name-only выводит плоский список зависимостей с их версиями: ├─ @adobe/css-tools@npm:4.3.1 ├─ @ampproject/remapping@npm:2.2.1 ├─ @aviasales/analytics@npm:4.0.7 и т.д. В дифе помимо кучи других пакетов, я увидел caniuse-lite и @babel/compat-data, а именно их использует @babel/preset-env, чтобы решить нужно трансформировать ту или иную фичу. Начиная с 7.22.6 в @babel/compat-data указано, что class properties поддерживаются в iOS 14.5, а до этого было указано что в iOS 15, т.е. с Safari 15 сдаунгрейдили поддержку до Safari 14.1. Напомню, без багов эта фича работает начиная с Safari/iOS 16. Что ж, тут вроде всё понятно. А что с caniuse-lite? Его использует browserslist, чтобы получить браузеры, которые мы хотим поддерживать. В конфиге у нас было указано defaults, last 2 years, not ie > 0, not ie_mob > 0, chrome >= 94. Сравнил вывод yarn dlx browserslist и увидел, что из поддерживаемых браузеров исчез сафари 14, т.к. ему исполнилось больше двух лет. Получается, что к проблеме мог привести апдейт babel/compat-data и caniuse-lite в любых комбинациях: по отдельности и вместе. А кто их обновил? Ну, в общем-то я, когда устанавливал vitest и пару зависимостей к нему. Мы используем yarn dedupe, чтобы в рамках SemVer использовалась только одна библиотека. При установке и babel/compat-data, и caniuse-lite зарезолвились на последнюю версию и всё сломалось! Этой проблемы можно было бы избежать, если yarn dedupe умел бы в другие стратегии, но пока что только latest. Ну и напоследок: что сделали, чтобы такого больше не случалось? 1. Явно включили babel/plugin-proposal-class-properties. 2. Посмотрели, что пользователи 14 сафари приносят нам 1% деняк и явно указали safari >= 14 в конфиге браузерслиста. 3. Через resolutions явно установили browserslist и caniuse-lite в единственных экземплярах, чтоб прозрачно контролировать процесс обновления. А что там с ишью? А ишью в бабеле так и висит без изменений…

137 views

Опубликован 10 окт.

🚀 Состоялся релиз Lit 3.0. В посте детали. Интересен тем что из лабс вышла интеграция с реактом. И конечно же сигналы в качестве эксперимента.

128 views

Опубликован 29 сент.

⭐️ Тут сведены идеи применения AI, точнее LLMок в разработке программного обеспечения. Что они делают хорошо 🟢, что удовлетворительно 🟧, а что вообще плохо 🛑 🟢 Анализ больших объемов данных, которые человеку сложно внимательно обработать ∙ логов и стектрейсов ∙ memory dumps ∙ dependency trees ∙ git blame 🟢 Портирование: ∙ с одной версии фреймворка или библиотеки на другую ∙ с одного языка на другой ∙ с одной СУБД на другую ∙ с одной OS на другую или поддержка нескольких 🟢 Боты и тулинг для автоматизации обработки кодовой базы и репозиториев: ∙ применение стиля ∙ применение чеклиста изменений ∙ поиск уязвимостей в кодовой базе ∙ маркировка commits, pull requests, issues ∙ расстановка тегов по коммитам и т.д. ∙ автоматизация закрытия тасков, майлстоунов ∙ поиск дубликатов кода, тасков, или перелинковка связанных ∙ аудит объемов работы, качества, сбор статистики ∙ предложения для рефакторинга ∙ поддержание консистентности кодовой базы и стиля ∙ создание спеки стиля кода по примерам кода или кодовой базе проекта ∙ предложение метрик для оценки кода и вычисление этих метрик 🟢 Написание текстов: ∙ подготовка CHANGELOG, HOW TO, Q&A ∙ генерация документации по коду ∙ реверс-инжиниринг кода в ТЗ ∙ поиск отличий между ТЗ, кодом, доками ∙ преобразование между форматами данных, например json, csv, pdf, sql, txt 🟢 Управление проектами ∙ оценка трудоемкости разработки, времени и денег ∙ оценка возможности распараллеливания разработки ∙ поиск слабых мест и выявление проблем в сметах, планах, ТЗ ∙ предложения по оптимизации бизнес-процессов ∙ сбор данных для подготовки принятия решений 🟢 Программирование ∙ алгоритмические задачи, подбор и реализация алгоритмов ∙ портирование, перевод и транспиляция между языками программирования ∙ преобразование между class и prototype в JavaScript ∙ оптимизация по заданному критерию: cpu, ram, i/o, lines, читаемость, сложность, etc. ∙ объяснение кода ∙ генерация примеров использования библиотек или абстракций ∙ ревью пул реквестов ∙ генерация юниттестов, системных тестов ∙ генерация конфигураций ∙ настройка CI/CD ∙ генерация SQL запросов ∙ генерация API, CRUD, формочек ∙ генерация моделей, структур, DTO, схем данных, классов, jsdoc ∙ преобразование моделей между разными синтаксисами ∙ синхронизаций структуры базы данных, схем, моделей, форочек ∙ генерация тайпингов и заголовочных файлов как .h, .d.ts ∙ подготовка контрактов и описание интерфейсов для интеграции систем ∙ генерация парсеров, конвертеров, по примерам входных и выходных форматов данных ∙ генерация валидаторов данных и валидаторов контрактов 🟧 Задачи, которые LLMки делают, но не всегда качественно и с проблемами ∙ терпимо конвертирует код между парадигмами: ООП, процедурное и структурное программирование ∙ гораздо хуже конвертирует между ООП и ФП ∙ асинхронное программирование и задачи с доступом к состоянию из разных мест ∙ олимпиадное программирование ∙ подготовка шаблонов и примеров приложений/проектов ∙ выбор зависимостей ∙ выбор СУБД, языков программирования, платформ, тулинга ∙ концептуальный код, демонстрирующий идею и делающий ее понятнее для многих 🛑 Что плохо решается при помощи LLMок ∙ системное программирование ∙ платформенный код, код библиотек, фреймворков ∙ новые и прорывные технологические решения, которые негде подсмотреть ∙ большинство новых нетипичных задач, когда в интернете мало примеров кода ∙ архитектура систем и структура приложений, даже при наличии множества примеров

163 views

Опубликован 29 сент.

https://twitter.com/mckaywrigley/status/1707101465922453701

163 views

Опубликован 28 сент.

Вышла про версия Console Ninja.

111 views

Опубликован 22 сент.

142 views

Опубликован 22 сент.

Blazingly Fast ⚡️

151 views

Опубликован 13 сент.

🔥Flutter Talks #1 42 Meetups и наши друзья из DAR University рады пригласить вас на наш первый митап по направлению Dart/Flutter. Встречаемся 23-го сентября в 11:00, слушаем доклады, общаемся и кушаем пиццу. Адрес: Байзакова 280, пространство SmartPoint, зал Freedom. Список спикеров будет доступен уже в ближайшее время. Темы вас точно заинтересуют. Участие бесплатное, регистрация доступна по ссылке — Google Forms. Важно: количество мест ограничено, не откладывайте регистрацию в долгий ящик. @flutter_talks

176 views
12•••7891011•••1617