Чем дольше занимаюсь разработкой, тем дольше удивляюсь, почему не все разработчики пишут TDD.
Это ведь настолько сильно упрощает разработку.
Мне очень нравится этот подход, как раз потому что есть возможность сначала посидеть подумать, а как вообще функция должна себя вести в разных ситуациях.
А потом почти не думая, реализовать конкретное поведение. Я просто запускаю тесты и сверяю ожидания с реальностью. Еще и unit-тесты запускать гораздо легче и быстрее, чем потом проверять уже подключив функцию к интерфейсу.
Просто прикиньте, сколько кейсов нужно проверять после каждой правки. Конечно, я не удивлен, почему разработчики допускают столько багов в современном ПО — да тупо лень столько времени на ручное тестирование тратить.
Видел интересную ситуацию: в моей команде, команда QA возвращала фичу около 20 раз, с кучей тупых багов именно во фронтенде. Исправили один баг, сделали еще 3, и так по кругу.
Жесть
Это ведь настолько сильно упрощает разработку.
Мне очень нравится этот подход, как раз потому что есть возможность сначала посидеть подумать, а как вообще функция должна себя вести в разных ситуациях.
А потом почти не думая, реализовать конкретное поведение. Я просто запускаю тесты и сверяю ожидания с реальностью. Еще и unit-тесты запускать гораздо легче и быстрее, чем потом проверять уже подключив функцию к интерфейсу.
Просто прикиньте, сколько кейсов нужно проверять после каждой правки. Конечно, я не удивлен, почему разработчики допускают столько багов в современном ПО — да тупо лень столько времени на ручное тестирование тратить.
Видел интересную ситуацию: в моей команде, команда QA возвращала фичу около 20 раз, с кучей тупых багов именно во фронтенде. Исправили один баг, сделали еще 3, и так по кругу.
Жесть
👍31🤡9🤩4🔥2💅2❤1
Forwarded from Андруша пишет код
useless packages
Структурная типизация в js - это огромная удача для всего мира, так как мы можем использовать стандартные апи даже тогда когда их поддержки нет в рантайме в помощью полифиллов. Я считаю неплохой практикой поднимать у себя локальную копию https://polyfill.io, но много кто бандлит все полифилы к себе. Но есть проблема: если ты забандлил что-то, то иногда стоит удалять это из бандла, так как это уже не надо.
И вот тут начинаются проблемы: полифилы обычно не помечаются в npm как deprecated, из-за чего всякие outdated не будут вижжать, что надо выпилить пакет. Самый простой пример https://www.npmjs.com/package/object-assign. Эта штука уже давно существует у нас во ВСЕХ рантаймах, но 25 лямов скачиваний в неделю - это 25 лямов.
Я не видел решений, которые позволяют нам контролировать зависимости в этой части, так что решил сделать это сам:
Пакет, который покажет какие пакеты можно спокойно выпилить. Пример для моего текущего проекта на скриншоте в комментариях.
Из того что в планах сделать в ближайшее время:
- Оформить как нормальный опенсорс проект. Пока для MVP это делать лень
- Добавить как можно больше пакетов в https://github.com/XaveScor/cleanup-deps/blob/70e18fb0765206bac028beaa30664aea81b04971/src/deps.ts
- Добавить работу не только с нодой, но и с browserslist
Так же надеюсь, что будут энтузиасты, которые помогут пополнить список бесполезными пакетами, чтобы сделать этот мир чуток лучше.
Структурная типизация в js - это огромная удача для всего мира, так как мы можем использовать стандартные апи даже тогда когда их поддержки нет в рантайме в помощью полифиллов. Я считаю неплохой практикой поднимать у себя локальную копию https://polyfill.io, но много кто бандлит все полифилы к себе. Но есть проблема: если ты забандлил что-то, то иногда стоит удалять это из бандла, так как это уже не надо.
И вот тут начинаются проблемы: полифилы обычно не помечаются в npm как deprecated, из-за чего всякие outdated не будут вижжать, что надо выпилить пакет. Самый простой пример https://www.npmjs.com/package/object-assign. Эта штука уже давно существует у нас во ВСЕХ рантаймах, но 25 лямов скачиваний в неделю - это 25 лямов.
Я не видел решений, которые позволяют нам контролировать зависимости в этой части, так что решил сделать это сам:
npx cleanup-deps
Пакет, который покажет какие пакеты можно спокойно выпилить. Пример для моего текущего проекта на скриншоте в комментариях.
Из того что в планах сделать в ближайшее время:
- Оформить как нормальный опенсорс проект. Пока для MVP это делать лень
- Добавить как можно больше пакетов в https://github.com/XaveScor/cleanup-deps/blob/70e18fb0765206bac028beaa30664aea81b04971/src/deps.ts
- Добавить работу не только с нодой, но и с browserslist
Так же надеюсь, что будут энтузиасты, которые помогут пополнить список бесполезными пакетами, чтобы сделать этот мир чуток лучше.
🔥20👍9❤3
Forwarded from Effector news (Дима Zerꙫbias)
effector 23.0.0 Spacewatch
В этом релизе мы сконцентрировались на улучшении пользовательского опыта:
🔹Вывод сообщений об ошибках теперь включает в себя имя юнита
🔹Депрекейтнуты методы, которые путали людей — вместо forward и guard теперь используется sample
🔹Депрекейтнуты старые и неактуальные апи
🔹Введены отдельные типы для юнитов, которые можно вызывать, чтобы было проще организовывать архитектуру и показывать, что из публичного апи модуля/сервиса/команды можно использовать только для чтения, а что можно менять извне
🔹Часто используемые библиотеки добавлены в дефолты бабель-плагина
🔹Производительность ускорена до 10%
а так же сделано множество других улучшений, полный список изменений по ссылке, а так же на страницах релизов effector-react, effector-vue и effector-solid
Помимо этого, мы подготовили migration guide чтобы процесс обновления был проще
Спасибо за то, что пользуетесь эффектором 🥳
В этом релизе мы сконцентрировались на улучшении пользовательского опыта:
🔹Вывод сообщений об ошибках теперь включает в себя имя юнита
🔹Депрекейтнуты методы, которые путали людей — вместо forward и guard теперь используется sample
🔹Депрекейтнуты старые и неактуальные апи
🔹Введены отдельные типы для юнитов, которые можно вызывать, чтобы было проще организовывать архитектуру и показывать, что из публичного апи модуля/сервиса/команды можно использовать только для чтения, а что можно менять извне
🔹Часто используемые библиотеки добавлены в дефолты бабель-плагина
🔹Производительность ускорена до 10%
а так же сделано множество других улучшений, полный список изменений по ссылке, а так же на страницах релизов effector-react, effector-vue и effector-solid
Помимо этого, мы подготовили migration guide чтобы процесс обновления был проще
Спасибо за то, что пользуетесь эффектором 🥳
GitHub
Release effector Spacewatch 23.0.0 · effector/effector
Improvements
Introduce EventCallable, StoreWritable and UnitTargetable types to allow users to express and understand what could be updated or called directly and what could not. Now createStore r...
Introduce EventCallable, StoreWritable and UnitTargetable types to allow users to express and understand what could be updated or called directly and what could not. Now createStore r...
🔥15💩3 3
Перенес документацию из beta на effector.dev
Ссылки остались на beta. Редирект утром сделаю. А так, чтобы актуальные были
Ссылки остались на beta. Редирект утром сделаю. А так, чтобы актуальные были
🔥24 2👍1
Я на удивление часто начал пользоваться ast-grep
Очень удобно выискивать в проекте синтаксические конструкции.
Работает очень быстро.
Очень удобно выискивать в проекте синтаксические конструкции.
attach({ effect: $ }) найдет только такие варианты использованияattach({ source: $$$, $$$ }) найдет только те, где есть sourceРаботает очень быстро.
👍28🤔6😐2
Всем привет!
Мы запускаем 6-недельный интенсив по фронтенд-разработке.
Ведущие курса
Я — Сергей Сова и мой коллега Сергей Болтрукевич. У каждого из нас более 10 лет опыта работы в больших компаниях и стартапах, и мы готовы делиться этим опытом с вами.
На курсе вас ждёт
- от 20 до 40 видео с теорией
- еженедельные вебинары на разные темы
- кодревью пулл-реквестов
- оперативная поддержка в чате
В программе обучения
- от CI/CD и тестирования до теории продуктовой разработки
- техники планирования, инструменты и практика
- подходы к архитектуре
Изучим такие инструменты, как Effector, Atomic-Router, Feature-Sliced Design, Supabase.
И самое главное — вы на практике примените все полученные знания, создавая собственное приложение за эти 6 недель.
Курс не подойдет полным новичкам.
Необходимый минимум: базовое владение React и TypeScript.
Так как мы не сможем уделить время сотне человек, количество мест очень ограничено.
✈️ Если вы готовы присоединиться, просто напишите мне @sovasergey.
Укажите, что хотите записаться на курс, чтобы я мог быстрее ответить.
🕐 Мы организуем короткий звонок, на котором подробно расскажем о программе, какое приложение вы будете создавать и какие варианты оплаты есть.
Буду рад видеть вас на курсе!
☄️ 🍰 ⚛️
Мы запускаем 6-недельный интенсив по фронтенд-разработке.
Ведущие курса
Я — Сергей Сова и мой коллега Сергей Болтрукевич. У каждого из нас более 10 лет опыта работы в больших компаниях и стартапах, и мы готовы делиться этим опытом с вами.
На курсе вас ждёт
- от 20 до 40 видео с теорией
- еженедельные вебинары на разные темы
- кодревью пулл-реквестов
- оперативная поддержка в чате
В программе обучения
- от CI/CD и тестирования до теории продуктовой разработки
- техники планирования, инструменты и практика
- подходы к архитектуре
Изучим такие инструменты, как Effector, Atomic-Router, Feature-Sliced Design, Supabase.
И самое главное — вы на практике примените все полученные знания, создавая собственное приложение за эти 6 недель.
Курс не подойдет полным новичкам.
Необходимый минимум: базовое владение React и TypeScript.
Так как мы не сможем уделить время сотне человек, количество мест очень ограничено.
Укажите, что хотите записаться на курс, чтобы я мог быстрее ответить.
Буду рад видеть вас на курсе!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28👎20😁4🔥3🤬3❤2
Хороший пост о том, почему писать логику в компонентах это не самая хорошая затея. Жаль блог умер
https://kelin2code-mu.vercel.app/posts/stop-writing-logic-in-components
Но я скажу так, что есть ситуации когда использование rtk, swr, react-query довольно оправданы и заниматься вынесением логики из компонентов нет смысла:
1. Сайты визитки/лендинги/сборщики email/прочее
2. Интернет-магазины
3. Админки
Обычно всякие простецкие сайты могут позволить себе быть простыми: загрузили данные, показали, отправили очень простую форму, показали ответ сервера. То есть заморачиваться с логикой не нужно: её просто никакой нет.
В админках тоже хорошо работает логика в компонентах: ведь самое сложное это обработать конкретные данные и отправить на сервер. Тут как раз react-query с кешем хорошо ложится. Правда, я не понимаю зачем в админках люди используют next.js, но всё же.
А вот в приложениях: музыкальные плееры, обработка документооборота, почтовый клиенты, поиск авиабилетов, монтажные программы, и тому подобное, это уже приложения, суть которых в логике на клиентской части. Вот здесь и нужно отделять бизнес-логику от компонентов.
https://kelin2code-mu.vercel.app/posts/stop-writing-logic-in-components
Но я скажу так, что есть ситуации когда использование rtk, swr, react-query довольно оправданы и заниматься вынесением логики из компонентов нет смысла:
1. Сайты визитки/лендинги/сборщики email/прочее
2. Интернет-магазины
3. Админки
Обычно всякие простецкие сайты могут позволить себе быть простыми: загрузили данные, показали, отправили очень простую форму, показали ответ сервера. То есть заморачиваться с логикой не нужно: её просто никакой нет.
В админках тоже хорошо работает логика в компонентах: ведь самое сложное это обработать конкретные данные и отправить на сервер. Тут как раз react-query с кешем хорошо ложится. Правда, я не понимаю зачем в админках люди используют next.js, но всё же.
А вот в приложениях: музыкальные плееры, обработка документооборота, почтовый клиенты, поиск авиабилетов, монтажные программы, и тому подобное, это уже приложения, суть которых в логике на клиентской части. Вот здесь и нужно отделять бизнес-логику от компонентов.
👍33 12💯4❤2👎1🔥1
Я собираю материал для видео/поста/треда на тему хейта интерфейсов Apple.
Мне очень нравится реализация интерфейсов macOS, i*OS, и прочих. Но есть довольно много фич, которые сделаны очень криво или просто не доделаны.
Одна из таких это Stage Manager — полностью бесполезная вещь на маке. Мак это же многозадачная система. Для iPad может быть еще куда ни шло, но на маке???
Еще одна классная статья, разбирающая возможности для улучшения управления окнами. Да, я знаю, что есть всякие тайловые менеджеры окон в Linux, но это не то же самое. Может быть если развить их идеи, сделать красивый интерфейс управления, добавить поддержку тачпада, очевидности в UI, ну и штук для нейропроцессора, тогда это будет удобно.
https://okusov.ru/uluchshaem-ya-pridumal-novuyu-fichu-zones-dlya-macos
Я очень люблю красивые интерфейсы. Поэтому, лучше выберу красивый и чуть-чуть под себя допилю, нежели буду юзать страшный, но зато много чего умеющий интерфейс Linux/Unix систем. Поэтому, примеры показанные в статье, мне очень зашли.
На маке, я управляю окошками через rectangleapp.com. На данный момент мне более чем хватает его возможностей. Но если есть аналог Zones из статьи, который не лагает и умеет в тачпад + хоткеи, скиньте плиз.
Мне очень нравится реализация интерфейсов macOS, i*OS, и прочих. Но есть довольно много фич, которые сделаны очень криво или просто не доделаны.
Одна из таких это Stage Manager — полностью бесполезная вещь на маке. Мак это же многозадачная система. Для iPad может быть еще куда ни шло, но на маке???
Еще одна классная статья, разбирающая возможности для улучшения управления окнами. Да, я знаю, что есть всякие тайловые менеджеры окон в Linux, но это не то же самое. Может быть если развить их идеи, сделать красивый интерфейс управления, добавить поддержку тачпада, очевидности в UI, ну и штук для нейропроцессора, тогда это будет удобно.
https://okusov.ru/uluchshaem-ya-pridumal-novuyu-fichu-zones-dlya-macos
Я очень люблю красивые интерфейсы. Поэтому, лучше выберу красивый и чуть-чуть под себя допилю, нежели буду юзать страшный, но зато много чего умеющий интерфейс Linux/Unix систем. Поэтому, примеры показанные в статье, мне очень зашли.
На маке, я управляю окошками через rectangleapp.com. На данный момент мне более чем хватает его возможностей. Но если есть аналог Zones из статьи, который не лагает и умеет в тачпад + хоткеи, скиньте плиз.
❤5👎4🗿2
В комментариях к этому посту, вы можете вывалить всё, что вам не нравится в интерфейсах Apple:
- проблемные места в macOS, как можно улучшить, чего не хватает из других систем, что по вашему мнению сырое
- а также, все, что касается iPadOS, iOS, tvOS
- отдельно фич интеграции между этими системами.
Главное, не железные проблемы, именно софтовые.
Я довольно часто использую iPad как внешний монитор для мака. Невероятно радуюсь, что он может работать без провода (не долго конечно, из-за объема батареи, но все же).
Еще мне нравится, что можно поставить iPad рядом с маком и перетаскивать курсор на него из мака и печатать клавиатурой.
В общем, интеграция между устройствами очень крутая. Конечно, сырости хватает, но со временем становится гораздо лучше, что меня очень радует.
Пишите, что вас НЕ радует. С удовольствием почитаю.
- проблемные места в macOS, как можно улучшить, чего не хватает из других систем, что по вашему мнению сырое
- а также, все, что касается iPadOS, iOS, tvOS
- отдельно фич интеграции между этими системами.
Главное, не железные проблемы, именно софтовые.
Я довольно часто использую iPad как внешний монитор для мака. Невероятно радуюсь, что он может работать без провода (не долго конечно, из-за объема батареи, но все же).
Еще мне нравится, что можно поставить iPad рядом с маком и перетаскивать курсор на него из мака и печатать клавиатурой.
В общем, интеграция между устройствами очень крутая. Конечно, сырости хватает, но со временем становится гораздо лучше, что меня очень радует.
Пишите, что вас НЕ радует. С удовольствием почитаю.
❤6
Уже совсем скоро цифра 3 сменится на 4 в порядковом номере года.
Кто-то уже успел отметить, кто-то еще в ожидании. Лично у меня за этот год произошло много значимых изменений. Если у меня хватит сил и смелости, я расскажу о них здесь.
Хочу пожелать всем нам удачи в новом году, потому что всё остальное мы можем сделать сами.
С наступающим🎄
Кто-то уже успел отметить, кто-то еще в ожидании. Лично у меня за этот год произошло много значимых изменений. Если у меня хватит сил и смелости, я расскажу о них здесь.
Хочу пожелать всем нам удачи в новом году, потому что всё остальное мы можем сделать сами.
С наступающим
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🎄20❤9🎉2👎1
https://blog.rust-lang.org/2023/12/21/async-fn-rpit-in-traits.html
Вот это да, что таки заехало в rust 1.75.
Хорошее
Вот это да, что таки заехало в rust 1.75.
Хорошее
👎4👍3
Forwarded from Виталий и Платформа
Сейчас уже нет Настоящего Айкидо. В наше время айкидо называется, когда два чудака лупят друг друга пятками в челюсть или ломают друг другу суставы, или не знаю, чем они там ещё занимаются, не видел никогда.
А Настоящее Айкидо — оно было совсем другое. Оно заключалось в том, чтобы победить Неприятеля так, чтобы самому не сильно напрягаться. Для этого даже не обязательно с этим Неприятелем встречаться.
Вот скажем принесли вам в разработку макеты с Неведомой Фичей. Как её сделать — хз, нет понимания.
Приходит вам в голову мысль, как реализовать эту фичу с помощью Костылей. «Что поделать, инженерия — она такая», — думаете вы и берётесь за работу. В процессе к одному Костылю приходится прилепить ещё парочку и скрепить это для прочности подручными материалами. В общем, вы по ходу встречаете всё большие сложности и затем героически с ними боретесь. Получившееся решение громоздкое, хрупкое, но время на него уже потрачено, выкинуть жалко, да и в целом оно работает (почти всегда), так что что уж тут, оставляем.
Вроде бы вы и победили, но гаденько как-то, нет этого приятного ощущения, ради которого вы когда-то давно вообще этим всем начали заниматься. Это не Настоящее Айкидо.
Либо же вы ищете похожую задачу на Стэковерфлоу или спрашиваете у Чат-бота. И таким образом вы находите «Либу, которая решит все ваши проблемы». Правда помимо вашей задачи она решает ещё и парочку других проблем по пути, ну и тянет набор зависимостей на 500кб. Но это ладно, думаете вы, фичу-то надо сделать ещё вчера. «Ок, для временного решения сойдёт», — решаете вы и используете либу.
А потом, спустя год-другой нужно вам зависимости проекта обновить и вы находите эту либу, вспоминаете что к чему, хотите версию этой либы заодно поднять. Но либа уже заброшена владельцем и вообще новым Реактом не поддерживается. «Что поделать, надо выпиливать», — думаете вы и снова оказываетесь в самом начале.
Это не победа, Неприятель вас обхитрил, притворился побеждённым и вам снова нужно с ним сражаться. Это тоже не путь Настоящего Айкидо.
А как бы поступил Мастер Настоящего Айкидо? Он бы сел, подумал и вспомнил, что Браузер, для которого он пишет программу, уже и сам умеет в нужную фичу. И вот Мастер на митинге скажет «Это умеет Платформа», а потом возьмёт и напишет несколько строк кода, чтобы дёрнуть нужный браузерный API, закроет задачу и пойдёт пить чай. И его решение никогда не протухнет, ведь Платформа всегда обратно совместима.
Мастер Настоящего Айкидо прилагает большего всего сил, чтобы освоить базу, и затем стремится к применению усвоенных принципов. А когда ему приходит мысль, что ему всё ясно, то он говорит себе: «Этого недостаточно», и идёт дальше копать Базу. 🥷
А Настоящее Айкидо — оно было совсем другое. Оно заключалось в том, чтобы победить Неприятеля так, чтобы самому не сильно напрягаться. Для этого даже не обязательно с этим Неприятелем встречаться.
Вот скажем принесли вам в разработку макеты с Неведомой Фичей. Как её сделать — хз, нет понимания.
Приходит вам в голову мысль, как реализовать эту фичу с помощью Костылей. «Что поделать, инженерия — она такая», — думаете вы и берётесь за работу. В процессе к одному Костылю приходится прилепить ещё парочку и скрепить это для прочности подручными материалами. В общем, вы по ходу встречаете всё большие сложности и затем героически с ними боретесь. Получившееся решение громоздкое, хрупкое, но время на него уже потрачено, выкинуть жалко, да и в целом оно работает (почти всегда), так что что уж тут, оставляем.
Вроде бы вы и победили, но гаденько как-то, нет этого приятного ощущения, ради которого вы когда-то давно вообще этим всем начали заниматься. Это не Настоящее Айкидо.
Либо же вы ищете похожую задачу на Стэковерфлоу или спрашиваете у Чат-бота. И таким образом вы находите «Либу, которая решит все ваши проблемы». Правда помимо вашей задачи она решает ещё и парочку других проблем по пути, ну и тянет набор зависимостей на 500кб. Но это ладно, думаете вы, фичу-то надо сделать ещё вчера. «Ок, для временного решения сойдёт», — решаете вы и используете либу.
А потом, спустя год-другой нужно вам зависимости проекта обновить и вы находите эту либу, вспоминаете что к чему, хотите версию этой либы заодно поднять. Но либа уже заброшена владельцем и вообще новым Реактом не поддерживается. «Что поделать, надо выпиливать», — думаете вы и снова оказываетесь в самом начале.
Это не победа, Неприятель вас обхитрил, притворился побеждённым и вам снова нужно с ним сражаться. Это тоже не путь Настоящего Айкидо.
А как бы поступил Мастер Настоящего Айкидо? Он бы сел, подумал и вспомнил, что Браузер, для которого он пишет программу, уже и сам умеет в нужную фичу. И вот Мастер на митинге скажет «Это умеет Платформа», а потом возьмёт и напишет несколько строк кода, чтобы дёрнуть нужный браузерный API, закроет задачу и пойдёт пить чай. И его решение никогда не протухнет, ведь Платформа всегда обратно совместима.
Мастер Настоящего Айкидо прилагает большего всего сил, чтобы освоить базу, и затем стремится к применению усвоенных принципов. А когда ему приходит мысль, что ему всё ясно, то он говорит себе: «Этого недостаточно», и идёт дальше копать Базу. 🥷
👎27🔥8👍6❤5🌚4😁3
Я очень люблю разные инструменты для анализа знаний и принятия решений.
6 лет назад попробовал матрицу Эйзенхауэра. И по сей день исследую вопрос рационального применения своих ресурсов. Текущий статус: тревожное расстройство, выгорание. Но кажется, что это не связано с попытками использовать время эффективно.
Хочу поделиться целым набором очень полезных инструментов
https://untools.co/
6 лет назад попробовал матрицу Эйзенхауэра. И по сей день исследую вопрос рационального применения своих ресурсов. Текущий статус: тревожное расстройство, выгорание. Но кажется, что это не связано с попытками использовать время эффективно.
Хочу поделиться целым набором очень полезных инструментов
https://untools.co/
🔥15❤8🗿3👍1👎1