TIL в exports для тайпингов можно задавать версию ts. https://github.com/DefinitelyTyped/DefinitelyTyped/blob/bd28a854c712dd45cd6e224a1571d2395e91dcf3/types/react/package.json#L9
Возможно, для костылей при переходе между версиями ts'а пригодится
Возможно, для костылей при переходе между версиями ts'а пригодится
👍2💩2💅1
Недавно у нас в команде были споры по поводу кодстайла(да, в 2023 году). Нашёл хорошую статью по поводу этой проблемы https://typenoscript-eslint.io/linting/troubleshooting/formatting/
typenoscript-eslint.io
What About Formatting? | typenoscript-eslint
We recommend against using ESLint for formatting.
💩2💅1
Сегодня у меня возникла микрозадачка: проверить как работает библиотека "qs" на некоторых корнеркейсах, чтобы иметь возможность выпилить её в пользу URLSearchParams.
Оказывается, в npm на странице любой библиотеки есть кнопочка "try on runkit". После чего можно играть с библиотекой как тебе хочется. Очень удобно
Оказывается, в npm на странице любой библиотеки есть кнопочка "try on runkit". После чего можно играть с библиотекой как тебе хочется. Очень удобно
👍3💩2🎉1
Андруша пишет код
Сегодня у меня возникла микрозадачка: проверить как работает библиотека "qs" на некоторых корнеркейсах, чтобы иметь возможность выпилить её в пользу URLSearchParams. Оказывается, в npm на странице любой библиотеки есть кнопочка "try on runkit". После чего…
Так же посоветовали аналог https://www.val.town/
💩2💯1
https://www.youtube.com/watch?v=4B2Nbxrz-Uw
Вполне неплохое видео, чтобы понять реактивность.
Сразу предупреждаю, что надо фильтровать в голове все обидки и "аксиомы", которые толкает автор. Но в остальном - неплохой воркшоп
Вполне неплохое видео, чтобы понять реактивность.
Сразу предупреждаю, что надо фильтровать в голове все обидки и "аксиомы", которые толкает автор. Но в остальном - неплохой воркшоп
YouTube
Препарируем Effector и находим родовые травмы
Столько обещаний, но..
- Линейная бизнес-логика превращается в лапшу.
- Много бойлерплейта с ручным приводом.
- Деградация производительности по мере роста приложения.
- Нестабильная работа при возникновении исключения.
- Легко допустить конфликт инвариантов…
- Линейная бизнес-логика превращается в лапшу.
- Много бойлерплейта с ручным приводом.
- Деградация производительности по мере роста приложения.
- Нестабильная работа при возникновении исключения.
- Легко допустить конфликт инвариантов…
✍2💩2🦄1
Иногда нужно передать файл с одной машины на другую, но нет доступа по ssh, из-за чего scp нельзя использовать. Если не слишком параноики, то можно использовать https://transfer.sh. Очень удобная штука
А если же параноик, то никто не мешает зашифровать файл перед загрузкой на их сервис.
А если же параноик, то никто не мешает зашифровать файл перед загрузкой на их сервис.
🔥4💩2💅1
Последнее время часто люди спрашивают школу, через которую РЕАЛЬНО можно научиться фронту с нуля. Такое, внезапно, есть: rs.school.
Бесплатно, долго, через труд. Но я рекомендую, так как у людей нет цели выкачать из вас деньги. Всё на энтузиазме.
Так же если захочется поменторить, то там всегда требуются менторы. Рекомендую. Тоже хороший опыт. Только советую не брать много людей. 2-3 оптимально. Больше - будете просто умирать от нагрузки
Бесплатно, долго, через труд. Но я рекомендую, так как у людей нет цели выкачать из вас деньги. Всё на энтузиазме.
Так же если захочется поменторить, то там всегда требуются менторы. Рекомендую. Тоже хороший опыт. Только советую не брать много людей. 2-3 оптимально. Больше - будете просто умирать от нагрузки
🔥4💩2👍1💅1
Двухминутка ненависти
Если вашему проекту хотя бы год и ваша команда занималась только "фигак-фигак и в продакшен", то наиболее вероятно, что ваши зависимости находятся в печальном состоянии. Потому что кроме кода, который пишете вы, существует код, который пишут другие люди и который вы используете: от бабеля и еслинта, и до какой-нибудь ui библиотеки, которая улетает на клиент.
Сейчас почти во всех популярных менеджерах пакетах есть команда outdated:
npm yarn@classic yarn@3 pnpm
И эта штука показывает насколько ваш внутренний код отстаёт от внешнего. К примеру, наше текущее отставание находится на скриншоте.
Если вашему проекту хотя бы год и ваша команда занималась только "фигак-фигак и в продакшен", то наиболее вероятно, что ваши зависимости находятся в печальном состоянии. Потому что кроме кода, который пишете вы, существует код, который пишут другие люди и который вы используете: от бабеля и еслинта, и до какой-нибудь ui библиотеки, которая улетает на клиент.
Сейчас почти во всех популярных менеджерах пакетах есть команда outdated:
npm yarn@classic yarn@3 pnpm
И эта штука показывает насколько ваш внутренний код отстаёт от внешнего. К примеру, наше текущее отставание находится на скриншоте.
💩3❤2👎1💅1
Андруша пишет код
Двухминутка ненависти Если вашему проекту хотя бы год и ваша команда занималась только "фигак-фигак и в продакшен", то наиболее вероятно, что ваши зависимости находятся в печальном состоянии. Потому что кроме кода, который пишете вы, существует код, который…
Контролировать все пакеты актуальными очень сложно, особенно когда этим никто не занимался. К примеру, у нас этим серьёзно не занимались как минимум год, и мы уже получили такое отставание.
Решение простое: каждое утро лично ты выполняй у себя на проекте команду outdated и обновляй любую зависимость. Желательно красную или же deprecated, если у вас такие есть в проекте.
К примеру, за 2 месяца почти ежедневных вмешательств красная часть стала меньше раза в 2. Ещё 3-4 месяца и, надеюсь, что от красного можно будет избавиться совсем.
Небольшой совет: не пытайся любой ценой обновить зависимость. Возможно, есть другая красная, в которой breaking change - это обновление версии ноды. Не закапывайся. Чем проще произойдёт обновление - тем лучше.
P.S. Текущее красное пятно тяжко обновить из-за того, что мы модифицировали их содержимое, но это уже другая история, которая решается другими методами.
Решение простое: каждое утро лично ты выполняй у себя на проекте команду outdated и обновляй любую зависимость. Желательно красную или же deprecated, если у вас такие есть в проекте.
К примеру, за 2 месяца почти ежедневных вмешательств красная часть стала меньше раза в 2. Ещё 3-4 месяца и, надеюсь, что от красного можно будет избавиться совсем.
Небольшой совет: не пытайся любой ценой обновить зависимость. Возможно, есть другая красная, в которой breaking change - это обновление версии ноды. Не закапывайся. Чем проще произойдёт обновление - тем лучше.
P.S. Текущее красное пятно тяжко обновить из-за того, что мы модифицировали их содержимое, но это уже другая история, которая решается другими методами.
💩2💅1
А ещё телега требует премиум, если хочешь длинное сообщение накатать. Больше 1024 символов? Ха. Плати
💩2💅1
https://codingfantasy.com/games/css-grid-attack/play
Игра, в которой можно изучить как работают css-гриды. А так же там куча других игр, которые посвящены программированию
Игра, в которой можно изучить как работают css-гриды. А так же там куча других игр, которые посвящены программированию
Codingfantasy
Play Grid Attack – CSS Game to learn CSS Grid
Learn css grid in a fun and interesting way that works better than boring courses, by playing CSS game!
👍2💩2💅1
Андруша пишет код
Контролировать все пакеты актуальными очень сложно, особенно когда этим никто не занимался. К примеру, у нас этим серьёзно не занимались как минимум год, и мы уже получили такое отставание. Решение простое: каждое утро лично ты выполняй у себя на проекте…
Логичным вопросом после https://news.1rj.ru/str/xavescor_code/14 будет: а зачем вообще это делать, если всё работает? Нода прекрасно держит обратную совместимость, npm репозиторий иммутабельный. Весь код будет работать в будущем спокойно.
Оно-то так. Но увы, перестанет работать программист. Сейчас поясню:
- Пример первый. egov.kz Электронное правительство Республики Казахстан. Angular@1. Это сверхактивно развивающийся проект, аудитория которого больше 5М пользователей. Но первый ангуляр приводит к тому, что внутреннюю кодовую базу попросту больно поддерживать. Нет ни библиотек, ни программистов на рынке, ни развития тулинга. Я общаюсь с ребятами оттуда и оничуток на стену от боли лезут.
- Пример второй. nextjs.org. Основной фреймворк для реакта. Это активно развивающийся проект с двумя неприятными нюансами. Первый - они спокойно ломают обратную совместимость в патчах(не минорах и тем более не мажорах). Но это фигня, кмк, так как с этим жить можно. Ну, почитаешь issues и найдёшь решение. Страшно другое. На сайте есть документация ТОЛЬКО для последней версии. Отстал на пару мажорных версий? Ну, удачи тебе. Будет весело.
- Пример третий. nestjs.com По сравнению с next - тут чуть получше, есть версионирование доки. Но есть 1 нюанс: перейдите по ссылке на migration guide https://github.com/nestjs/nest/releases/tag/v9.0.0. И тут начнётся веселуха, потому что вы попадёте на migration guide с v9 на v10, а не v8->v9. Справедливости ради, он всё же существует. Но они сломали ссылки.
Все эти 3 примера - это проекты с огроменным финансированием, которые не умеют в примитивные вещи. А если у гигантов не получается соблюдать базовый DX, то что говорить о мелюзге? Там вообще всё плохо будет. По этой причине лучше пытаться держать актуальным проект сейчас, а не пытаться через 5-10 лет обновить это устаревшее поделие. Возможно, его будет проще переписать с нуля.
Оно-то так. Но увы, перестанет работать программист. Сейчас поясню:
- Пример первый. egov.kz Электронное правительство Республики Казахстан. Angular@1. Это сверхактивно развивающийся проект, аудитория которого больше 5М пользователей. Но первый ангуляр приводит к тому, что внутреннюю кодовую базу попросту больно поддерживать. Нет ни библиотек, ни программистов на рынке, ни развития тулинга. Я общаюсь с ребятами оттуда и они
- Пример второй. nextjs.org. Основной фреймворк для реакта. Это активно развивающийся проект с двумя неприятными нюансами. Первый - они спокойно ломают обратную совместимость в патчах(не минорах и тем более не мажорах). Но это фигня, кмк, так как с этим жить можно. Ну, почитаешь issues и найдёшь решение. Страшно другое. На сайте есть документация ТОЛЬКО для последней версии. Отстал на пару мажорных версий? Ну, удачи тебе. Будет весело.
- Пример третий. nestjs.com По сравнению с next - тут чуть получше, есть версионирование доки. Но есть 1 нюанс: перейдите по ссылке на migration guide https://github.com/nestjs/nest/releases/tag/v9.0.0. И тут начнётся веселуха, потому что вы попадёте на migration guide с v9 на v10, а не v8->v9. Справедливости ради, он всё же существует. Но они сломали ссылки.
Все эти 3 примера - это проекты с огроменным финансированием, которые не умеют в примитивные вещи. А если у гигантов не получается соблюдать базовый DX, то что говорить о мелюзге? Там вообще всё плохо будет. По этой причине лучше пытаться держать актуальным проект сейчас, а не пытаться через 5-10 лет обновить это устаревшее поделие. Возможно, его будет проще переписать с нуля.
Telegram
Андруша пишет код
Контролировать все пакеты актуальными очень сложно, особенно когда этим никто не занимался. К примеру, у нас этим серьёзно не занимались как минимум год, и мы уже получили такое отставание.
Решение простое: каждое утро лично ты выполняй у себя на проекте…
Решение простое: каждое утро лично ты выполняй у себя на проекте…
👍6💩3❤1👎1🙈1💅1
Давайте поиграем в игру:
В опенсорс сообществе есть человек, который пилит огромное количество библиотек: https://www.npmjs.com/~sindresorhus
Около двух лет назад он понял, что commonjs мёртв и нужно поддерживать только esm: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
В итоге все его 1100+ библиотек обновились и теперь не могут запускаться в commonjs приложениях.
А теперь суть игры:
1. Переходим по https://www.npmjs.com/~sindresorhus
2. Выбираем любой пакет, у которого есть +- скачивания
3. Открываем владку Versions
4. Пытаемся понять на какой версии был переход на ESM-only
5. Если не смогли - то вы победили.
Пока я победить не смог
В опенсорс сообществе есть человек, который пилит огромное количество библиотек: https://www.npmjs.com/~sindresorhus
Около двух лет назад он понял, что commonjs мёртв и нужно поддерживать только esm: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
В итоге все его 1100+ библиотек обновились и теперь не могут запускаться в commonjs приложениях.
А теперь суть игры:
1. Переходим по https://www.npmjs.com/~sindresorhus
2. Выбираем любой пакет, у которого есть +- скачивания
3. Открываем владку Versions
4. Пытаемся понять на какой версии был переход на ESM-only
5. Если не смогли - то вы победили.
Пока я победить не смог
😁8💩2👍1💅1
Не держи внутри
В мире фронтенда нет вопроса более холиварного, чем то как управлять состоянием. Хочу немного подкинуть в него дров:
Любой UI состоит из двух вещей: из состояния и UI-рендера, который это состояние превращает в HTML и CSS.
Причём состояние можно грубо поделить на 2 части: корневое и зависимое. Попробую объяснить разницу на примере:
- корневое: jwt токен, который мы храним в куке
- зависимое: информация о пользователе, которую мы получаем по jwt токену с сервера.
Т.е. корневую часть состояния приложение может получить только от пользователя.
И теперь вопрос: почему бы не попытаться хранить максимум корневого состояния в URL?
Из плюсов:
- Если пользователь А захочет поделиться страницей, то его знакомый увидит страницу в максимально близком состоянии, которое открыто у пользователя А
- Урл един, а значит все стейт менеджеры смотрят в одно место. У нас возникает единый источник правды
К примеру, посмотрите как работает фильтрация товаров в маркетплейсах(к примеру, в Амазоне или Яндекс.Маркете) или в http://typenoscriptlang.org/play. Они все на каждый чих меняют урл и это сверхудобно как для пользователя, так и для разработчика
Но есть минус пока что:
- Нет кроссбраузерного способа подписаться на изменения урла. Пока есть https://developer.mozilla.org/en-US/docs/Web/API/Navigation/navigate_event, который поддерживается только хромом.
Так что увы, но это мечты о будущем, которое случится неизвестно когда. Хотя всегда можно заманкипатчить window.location и навесить туды своих интерестностей. Но об этом как-нибудь в другой раз.
В мире фронтенда нет вопроса более холиварного, чем то как управлять состоянием. Хочу немного подкинуть в него дров:
Любой UI состоит из двух вещей: из состояния и UI-рендера, который это состояние превращает в HTML и CSS.
Причём состояние можно грубо поделить на 2 части: корневое и зависимое. Попробую объяснить разницу на примере:
- корневое: jwt токен, который мы храним в куке
- зависимое: информация о пользователе, которую мы получаем по jwt токену с сервера.
Т.е. корневую часть состояния приложение может получить только от пользователя.
И теперь вопрос: почему бы не попытаться хранить максимум корневого состояния в URL?
Из плюсов:
- Если пользователь А захочет поделиться страницей, то его знакомый увидит страницу в максимально близком состоянии, которое открыто у пользователя А
- Урл един, а значит все стейт менеджеры смотрят в одно место. У нас возникает единый источник правды
К примеру, посмотрите как работает фильтрация товаров в маркетплейсах(к примеру, в Амазоне или Яндекс.Маркете) или в http://typenoscriptlang.org/play. Они все на каждый чих меняют урл и это сверхудобно как для пользователя, так и для разработчика
Но есть минус пока что:
- Нет кроссбраузерного способа подписаться на изменения урла. Пока есть https://developer.mozilla.org/en-US/docs/Web/API/Navigation/navigate_event, который поддерживается только хромом.
Так что увы, но это мечты о будущем, которое случится неизвестно когда. Хотя всегда можно заманкипатчить window.location и навесить туды своих интерестностей. Но об этом как-нибудь в другой раз.
www.typenoscriptlang.org
TS Playground - An online editor for exploring TypeScript and JavaScript
The Playground lets you write TypeScript or JavaScript online in a safe and sharable way.
🔥5💩3👍2🤷♂1❤1👎1🎃1
Тут недавно проскочила новость об очередном раскулачивании компании.
https://www.bbc.com/news/business-66790608
TLDR. Гугл за счёт андроида заставлял производителей железок устанавливать свой поиск, а это вредит конкуренции.
Но подобное происходит не только в Штатах. В Европе тоже активно наседают на гугл https://www.reuters.com/technology/eu-courts-wed-ruling-record-44-bln-google-fine-may-set-precedent-2022-09-14/
Если ситуация выгорит, то это создаст такой нехилый прецедент, так как гугл обязывает производителей не только пихать свой поиск на первый экран, а так же предустанавливать Chrome и прочие свои приложения.
В итоге хром и прочие могут пойти лесом как это было с IE и MS в 2012 году https://en.wikipedia.org/wiki/Microsoft_Corp._v._Commission.
И может оказаться так, что основным браузером на телефончиках через лет 5 будет MS Edge, а не хром.
P.S. В 2017 году было 1в1 такое же дело Яндекс против Гугла в РФ, но тогда люди с дерьмом сожрали Яндекс. Интересно, будет ли переобувка?) https://ru.wikipedia.org/wiki/Дело_Google_в_ФАС
https://www.bbc.com/news/business-66790608
TLDR. Гугл за счёт андроида заставлял производителей железок устанавливать свой поиск, а это вредит конкуренции.
Но подобное происходит не только в Штатах. В Европе тоже активно наседают на гугл https://www.reuters.com/technology/eu-courts-wed-ruling-record-44-bln-google-fine-may-set-precedent-2022-09-14/
Если ситуация выгорит, то это создаст такой нехилый прецедент, так как гугл обязывает производителей не только пихать свой поиск на первый экран, а так же предустанавливать Chrome и прочие свои приложения.
В итоге хром и прочие могут пойти лесом как это было с IE и MS в 2012 году https://en.wikipedia.org/wiki/Microsoft_Corp._v._Commission.
И может оказаться так, что основным браузером на телефончиках через лет 5 будет MS Edge, а не хром.
P.S. В 2017 году было 1в1 такое же дело Яндекс против Гугла в РФ, но тогда люди с дерьмом сожрали Яндекс. Интересно, будет ли переобувка?) https://ru.wikipedia.org/wiki/Дело_Google_в_ФАС
BBC News
Google antitrust trial: Tech giant denies abusing power to gain monopoly
In a landmark trial brought by the US government, the tech giant denies using illegal practices to gain a monopoly.
👍2💩2🙈1
У меня есть привычка немного волонтёрить в чатах с новичками, потому что бывает такое, что мне самому нужна помощь по работе.
Но проблема в том, что 99%(оценочное суждение) вопросов выглядят как: "я вот написал код, он должен работать, но не работает". И почему-то люди не умеют обрабатывать такие ситуации.
Поэтому вот вам инструкция, как решать такие проблемы:
1. найдите 100% рабочий по вашему мнению кусок кода, который можно безболезненно удалить из программы
2. Удаляйте его
3. Смотрите результат.
Если программа стала работать как вы ожидаете, то проблема в удалённом вами фрагменте. Постарайтесь вынести этот кусок кода в отдельный модуль и возвращайтесь к пункту 1.
Если программа продолжает работать не так как вы ожидаете, то значит, что непонятка осталась в неудалённом коде. Возвращайтесь к пункту 1 и продолжайте пока не найдёте проблему.
В итоге после этого цикла у вас есть маленький кусочек кода, в котором есть проблема.
Если вы поняли в чём проблема, то супер. Исправляйте её, покрывайте тестами, так как другие люди не хуже и не лучше вас. Помогите им в будущем. Плюс PR станет читать куда проще.
Если вы не понимаете в чём проблема, то выносите этот пример в какую-нибудь песочницу, к примеру, в http://jsfiddle.net и только ПОСЛЕ этого идите в чат за помощью.
Ваши скриншоты огромного полотна редко когда помогают найти проблему. А вот код, с которым можно поиграться и поэкспериментировать - вполне.
Как говорится: формулирование проблемы - это половина решения проблемы.
#база
Но проблема в том, что 99%(оценочное суждение) вопросов выглядят как: "я вот написал код, он должен работать, но не работает". И почему-то люди не умеют обрабатывать такие ситуации.
Поэтому вот вам инструкция, как решать такие проблемы:
1. найдите 100% рабочий по вашему мнению кусок кода, который можно безболезненно удалить из программы
2. Удаляйте его
3. Смотрите результат.
Если программа стала работать как вы ожидаете, то проблема в удалённом вами фрагменте. Постарайтесь вынести этот кусок кода в отдельный модуль и возвращайтесь к пункту 1.
Если программа продолжает работать не так как вы ожидаете, то значит, что непонятка осталась в неудалённом коде. Возвращайтесь к пункту 1 и продолжайте пока не найдёте проблему.
В итоге после этого цикла у вас есть маленький кусочек кода, в котором есть проблема.
Если вы поняли в чём проблема, то супер. Исправляйте её, покрывайте тестами, так как другие люди не хуже и не лучше вас. Помогите им в будущем. Плюс PR станет читать куда проще.
Если вы не понимаете в чём проблема, то выносите этот пример в какую-нибудь песочницу, к примеру, в http://jsfiddle.net и только ПОСЛЕ этого идите в чат за помощью.
Ваши скриншоты огромного полотна редко когда помогают найти проблему. А вот код, с которым можно поиграться и поэкспериментировать - вполне.
Как говорится: формулирование проблемы - это половина решения проблемы.
#база
jsfiddle.net
JSFiddle - Code Playground
JSFiddle - Test your JavaScript, CSS, HTML or CoffeeScript online with JSFiddle.
🍌3👍2💩2🔥1
Код пишут тоже люди
Урок сегодняшнего дня для меня, что любые разрабы либ, даже из крупных компаний типа Microsoft, могут делать дичь.
Я потратил 4 часа, из-за того, что playwright с его проектами не мержит глубоко конфиги в своих же проектах(возможность внутри тестов задать разные конфиги). Только поверхностно. Контринтуитивно ли это? Ну, да. Но так и живём.
Урок №2: если console.log не выводит сообщение, то возможно что не раннер подавляет stdout, а функция с логом просто не вызывается.
Нужно мыслить тупее и не додумывать.
P.S. если кто-нибудь сделает такой PR, то буду благодарен. Потому что поведение ужасное.
Урок сегодняшнего дня для меня, что любые разрабы либ, даже из крупных компаний типа Microsoft, могут делать дичь.
Я потратил 4 часа, из-за того, что playwright с его проектами не мержит глубоко конфиги в своих же проектах(возможность внутри тестов задать разные конфиги). Только поверхностно. Контринтуитивно ли это? Ну, да. Но так и живём.
Урок №2: если console.log не выводит сообщение, то возможно что не раннер подавляет stdout, а функция с логом просто не вызывается.
Нужно мыслить тупее и не додумывать.
P.S. если кто-нибудь сделает такой PR, то буду благодарен. Потому что поведение ужасное.
👍3💩2🌭1