The channel has no name!
111 subscribers
57 photos
1 video
103 links
Канал фронтендера. Пишу про свой опыт, и взгляды на разработку. AlmatyJS co-org.

Зарабатываю на JS. Заглядываюсь на Clojure. Мечтаю перекатиться в бэкенд. Учусь на магистратуре на Software Engineering.

tw: _codev0
gh: codev0

Фидбэк сюда @codev0
Download Telegram
Hi Barbie!
Нашел отклик своих наблюдений о жизни и жизненной позиции с этой статьей.

> Везение IV — очень персонально, оно приходит именно к Вам (даже если Вы его не ищете) из-за того, *кем* Вы являетесь и *что* Вы делаете. Из-за Ваших хобби, уникальных характеристик вашего характера и т.д. У Навала Равиканта есть классный пример на эту тему. Допустим, что Вы лучший дайвер своего региона и кто-то в Вашей местности нашел сокровище на дне озера. Тогда он придет к Вам за помощью и его удача станет Вашей удачей.

Надо действовать, становиться лучше, и один момент везение случиться.
Нужно всегда разделять прикладной и системный код (это минимум два слоя реальности), как и роли программистов, описал подробнее.

🧑‍💻 Прикладной программист пишет продуктовый код, занимается моделированием предметной области и автоматизацией процессов в ней. Прикладному программисту нужно знать node.js как инструмент, его возможности, концепции, преимущества и недостатки, но не нужно глубоко погружаться в код платформы, не нужно строить прослойку между node.js и прикладным кодом, не нужно изобретать фреймворки (внутри продукта), изобретать обобщенные инструменты и библиотеки, не имеющие отношение к предметной области. Если это происходит, то он выполняет две роли - системную и прикладную, они должны быть максимально отделены: отдельные репозитории, отдельное рабочее время и должность, отдельные цели и задачи. Чтобы писать системные вещи смотри вопросы в следующем разделе.

👨‍🔧 Системный (платформенный) программист пишет код, не связанный с предметной областью: фреймворки, сетевые протоколы, транслятор, компиляторы, интерпретаторы, библиотеки, занимается вещами, которые могут быть переиспользованы в сотнях и тысячах разных проектов. Это называется производство средств производства. Систем программисту нужно знать node.js гораздо глубже, не только, его возможности, концепции, преимущества и недостатки, но и недокументированные возможности и даже баги, особенности платформы, которые очень редко используются, потому, что он строит прослойку между node.js и прикладным кодом, а прослойка эта позволяет делать прикладной код более абстрактным и приближенным к предметной области.
Maybe algorithms aren’t the best way to interview. And sure, maybe you don’t use a lot of them in the job constantly. But the reality it that, there is a secret handshake to get into a very good paying job. Learn the handshake, right?

By ThePrimeagen https://frontendmasters.com/courses/algorithms/
Сегодня, во время беседы, вспомнил про этот выпуск подкаста UfoStation. Мне он откликнулся жизненной позицей гостя. Если сейчас вам сложно понять что же делать в профессии дальше, то рекомандую послушать мнение и историю Николая.

https://ufostation.mave.digital/ep-17
🔥1
Скандал в мире JS.

Популярная библиотека Turbo, для построения SPA лайк приложений на основе шаблонов на сервере, в восьмой мажорной версии выпиливает TS. Мотивы описал DHH в блоге Hey. PR с изменениями тут. Отдельно можно выделить коментарии, пример на скриншоте.
Пруф возможности состояния гонки в асинхронном программировании на JavaScript https://github.com/HowProgrammingWorks/RaceCondition/tree/master/JavaScript
Say Goodbye to dotenv

И вот, начиная с 20.6.0, в ноду встроена поддержка dotenv конфигов.
Конфиг явно передаётся через флаг --env-file:

node --env-file=config.env index.js

До этого всегда приходилось использовать motdotla/dotenv.
👍3
Forwarded from Flutter Talks
🔥 Flutter Talks #1

42 Meetups и наши друзья из DAR University рады пригласить вас на наш первый митап по направлению Dart/Flutter.

Встречаемся 23-го сентября в 11:00, слушаем доклады, общаемся и кушаем пиццу.

Адрес: Байзакова 280, пространство SmartPoint, зал Freedom.

Список спикеров будет доступен уже в ближайшее время. Темы вас точно заинтересуют.

Участие бесплатное, регистрация доступна по ссылкеGoogle Forms.

Важно: количество мест ограничено, не откладывайте регистрацию в долгий ящик.

@flutter_talks
🔥1
Blazingly Fast ⚡️
Вышла про версия Console Ninja.
⭐️ Тут сведены идеи применения 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ок
∙ системное программирование
∙ платформенный код, код библиотек, фреймворков
∙ новые и прорывные технологические решения, которые негде подсмотреть
∙ большинство новых нетипичных задач, когда в интернете мало примеров кода
∙ архитектура систем и структура приложений, даже при наличии множества примеров
🚀 Состоялся релиз Lit 3.0.
В посте детали. Интересен тем что из лабс вышла интеграция с реактом. И конечно же сигналы в качестве эксперимента.
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 в единственных экземплярах, чтоб прозрачно контролировать процесс обновления.

А что там с ишью? А ишью в бабеле так и висит без изменений…
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!
Вышел ReactQuery 5.

Не то чтобы я рад этому, на мой взгляд есть SWR. Просто информация.

https://twitter.com/TkDodo/status/1714262102305632643