ljharb
Ситуация с ljharb продолжает быть веселее и веселее. Это тот чувак, который решил в доку свелта добавить поддержку ноды 0.4.
Вчера я пытался в очередной раз апнуть наш проект до eslint 9 и увидел, что eslint-plugin-import принадлежит как раз этому челобеку. Следовательно, по классике, этот плагин поддерживает eslint 2, node 4 и прочую некрофилию. А так же чувак попросту не добавляет поддержку flat config и eslint 9. И вот история в том, что игнор идёт уже больше года. В итоге появляется eslint-plugin-import-x: https://www.npmjs.com/package/eslint-plugin-import-x, который поддерживает только eslint 8/9, не имеет кучи говнозависимостей и пока поддерживается новым ментейнером.
Другая история происходит прямо сейчас про библиотеку traverse. Как легко догадаться, туда тоже пришёл ljharb. В итоге ша маемо, то маемо. Но благо, благодаря этому появилась библиотека neotraverse: https://www.npmjs.com/package/neotraverse, которая является форком оригинальной, но без всей этой дичи от нашего поциента.
В итоге, если хотите получить популярный проект, то алгоритм чуток прост:
1. Смотришь, в какой очередной утилитарный проект пришел ljharb и навернул секурности
2. Делаешь форк от прошлой версии без зависимостей, обзываешь neo/nano/x-оригинальное имя и публикуешь
3. Профит, благодарные юзеры благодарны на ровном месте, репутация локального спасителя экосистемы
Так шо велком, заработать лычку на популярной библиотеке сейчас как никогда просто.
Ситуация с ljharb продолжает быть веселее и веселее. Это тот чувак, который решил в доку свелта добавить поддержку ноды 0.4.
Вчера я пытался в очередной раз апнуть наш проект до eslint 9 и увидел, что eslint-plugin-import принадлежит как раз этому челобеку. Следовательно, по классике, этот плагин поддерживает eslint 2, node 4 и прочую некрофилию. А так же чувак попросту не добавляет поддержку flat config и eslint 9. И вот история в том, что игнор идёт уже больше года. В итоге появляется eslint-plugin-import-x: https://www.npmjs.com/package/eslint-plugin-import-x, который поддерживает только eslint 8/9, не имеет кучи говнозависимостей и пока поддерживается новым ментейнером.
Другая история происходит прямо сейчас про библиотеку traverse. Как легко догадаться, туда тоже пришёл ljharb. В итоге ша маемо, то маемо. Но благо, благодаря этому появилась библиотека neotraverse: https://www.npmjs.com/package/neotraverse, которая является форком оригинальной, но без всей этой дичи от нашего поциента.
В итоге, если хотите получить популярный проект, то алгоритм чуток прост:
1. Смотришь, в какой очередной утилитарный проект пришел ljharb и навернул секурности
2. Делаешь форк от прошлой версии без зависимостей, обзываешь neo/nano/x-оригинальное имя и публикуешь
3. Профит, благодарные юзеры благодарны на ровном месте, репутация локального спасителя экосистемы
Так шо велком, заработать лычку на популярной библиотеке сейчас как никогда просто.
👍23🤡6😁4💩4🔥2✍1💯1
Андруша пишет код
ljharb Ситуация с ljharb продолжает быть веселее и веселее. Это тот чувак, который решил в доку свелта добавить поддержку ноды 0.4. Вчера я пытался в очередной раз апнуть наш проект до eslint 9 и увидел, что eslint-plugin-import принадлежит как раз этому…
Ну и в продолжение. Узнайте заражен ли ваш пакет ljharb'ом https://voldephobia.rschristian.dev
😁20💩4🤡4🤔3❤1
Миграция.
Все мы принимаем плохие архитектурные решения. Это нормально, потому что требования к проекту постоянно меняются. И поэтому нужно уметь эффективно мигрировать с легаси на новые решения.
И идеальной ситуацией будет схема:
1. депрекейт фичи в миноре версии x
2. варнинг в версиях x+1,...,x+N-1
3. выпиливание фичи в версии x+N
В таком случае у пользователя есть возможность подготовиться к выпиливанию библиотеки максимально плавно. Такой схеме релизов следуют react, pnpm, Bazel, jest и многие другие.
Однако, зачастую бывает такое, что нужно заменить одно решение на другое. Причём изначальное решение используется в 100500 местах в проекте. К примеру: замена React.useCallback на useEvent. Мы проводим сейчас как раз такую миграцию. И тут основная проблема в трёх местах: нужно как-то донести новое правило до всех членов команды; нужно как-то на code review замену API; нужно как-то контролировать прогресс выпиливания, чтобы не оказаться в ситуации, что у нас будет 100500 одновременных миграций.
Сложность первой проблемы в том что миграции могут длиться годами, а это значит что в проект могут спокойно приходить новые люди. А значит и их нужно посвещать в таинство колдунства;
Вторая проблема же в том, что программисты тратят слишком много времени и сил на PR. И в итоге вместо реальной работы люди начинаются докапываться до кодстайла.
Мы выработали следующее решение этой задачи:
1. Пишем ESLint правило, которое запрещает использовать старое API;
2. Во все места с ESLint ошибками добавляем ignore комменты, которые отключают ESLint ошибку для конкретных строк
3. Добавляем над ignore комментом TODO коммент.
4. В следующий раз когда программист правит файл, то он может выпилить старое API на новое, заодно проверив функциональность логики
Добавить TODO и ignore комменты можно добавить простой командой:
В итоге мы можем легко контролировать количество TODO комментов в коде. Программист видит какой код устарел, так как TODO комменты выделяются в редакторах другим цветом. Легко находить TODO комменты в коде, чтобы постепенно выпиливать старую логику. А ESLint правило позволяет не давать плодить программисту устаревший код.
Одни плюсы, правда если только ты можешь написать ESLint правило
Все мы принимаем плохие архитектурные решения. Это нормально, потому что требования к проекту постоянно меняются. И поэтому нужно уметь эффективно мигрировать с легаси на новые решения.
И идеальной ситуацией будет схема:
1. депрекейт фичи в миноре версии x
2. варнинг в версиях x+1,...,x+N-1
3. выпиливание фичи в версии x+N
В таком случае у пользователя есть возможность подготовиться к выпиливанию библиотеки максимально плавно. Такой схеме релизов следуют react, pnpm, Bazel, jest и многие другие.
Однако, зачастую бывает такое, что нужно заменить одно решение на другое. Причём изначальное решение используется в 100500 местах в проекте. К примеру: замена React.useCallback на useEvent. Мы проводим сейчас как раз такую миграцию. И тут основная проблема в трёх местах: нужно как-то донести новое правило до всех членов команды; нужно как-то на code review замену API; нужно как-то контролировать прогресс выпиливания, чтобы не оказаться в ситуации, что у нас будет 100500 одновременных миграций.
Сложность первой проблемы в том что миграции могут длиться годами, а это значит что в проект могут спокойно приходить новые люди. А значит и их нужно посвещать в таинство колдунства;
Вторая проблема же в том, что программисты тратят слишком много времени и сил на PR. И в итоге вместо реальной работы люди начинаются докапываться до кодстайла.
Мы выработали следующее решение этой задачи:
1. Пишем ESLint правило, которое запрещает использовать старое API;
2. Во все места с ESLint ошибками добавляем ignore комменты, которые отключают ESLint ошибку для конкретных строк
3. Добавляем над ignore комментом TODO коммент.
4. В следующий раз когда программист правит файл, то он может выпилить старое API на новое, заодно проверив функциональность логики
Добавить TODO и ignore комменты можно добавить простой командой:
npx suppress-eslint-errors . --extensions=ts,tsx --parser=tsx --rules=no-restricted-syntax
В итоге мы можем легко контролировать количество TODO комментов в коде. Программист видит какой код устарел, так как TODO комменты выделяются в редакторах другим цветом. Легко находить TODO комменты в коде, чтобы постепенно выпиливать старую логику. А ESLint правило позволяет не давать плодить программисту устаревший код.
Одни плюсы, правда если только ты можешь написать ESLint правило
👍26💩4🤡3❤🔥1
пуштумастер
В небольших командах зачастую нет необходимости в том, чтобы выстраивать сложную систему прав. И зачастую всё выглядит очень просто:
- Делать PR и мержить можно всем
- Ментейнерам можно пушить в мастер, чтобы быстро реагировать на инциденты
Но иногда ментейнер может случайно запушить свою работу в мастер, так как, к примеру, забыл создать отдельную ветку на задачу.
Подобную проблему может решить проверка на имя ветки на стороне разработчика, чтобы пуши в мастер могли работать только с
В небольших командах зачастую нет необходимости в том, чтобы выстраивать сложную систему прав. И зачастую всё выглядит очень просто:
- Делать PR и мержить можно всем
- Ментейнерам можно пушить в мастер, чтобы быстро реагировать на инциденты
Но иногда ментейнер может случайно запушить свою работу в мастер, так как, к примеру, забыл создать отдельную ветку на задачу.
Подобную проблему может решить проверка на имя ветки на стороне разработчика, чтобы пуши в мастер могли работать только с
--no-verify. Добавьте следующий код к себе в прекоммит хук:
#!/bin/bash
current_branch="$(git branch --show-current)"
if [[ "master" == "$current_branch" ]]; then
echo "ERROR: local branch $current_branch is protected"
exit 1
fi
exit 0
👍18👎4💩3🤡3
Если шо, сильно не привязывайтесь к гитлабу
https://www.reuters.com/markets/deals/google-backed-software-developer-gitlab-explores-sale-sources-say-2024-07-17/
https://www.reuters.com/markets/deals/google-backed-software-developer-gitlab-explores-sale-sources-say-2024-07-17/
Reuters
Exclusive: Google-backed software developer GitLab explores sale, sources say
GitLab , a U.S. provider of cloud-based software development tools whose investors include Google parent Alphabet , is exploring a sale after attracting acquisition interest, according to people familiar with the matter.
💩8🤡4🤮2
Блеск и нищета опенсорса
Jest и Vitest - это лидирующие решения для юнит тестирования js/ts кода. Но вокруг них сложилась удивительная и непонятная для меня ситуация.
Давайте глянем на ESLint. Это решение максимально расширяемо. Его документация хорошо описана и существует множество плагинов, которые прекрасно расширяют его функциональность. И сообщество использует ESLint как раз за то, что он расширяем: каждый человек может написать свой плагин. И разработчики ESLint прислушиваются к тому что нужно сообществу.
А теперь давайте глянем на наших лидеров:
Что нам нужно от расширения jest/vitest. В 99% случаев нам понадобится написать собственный matcher. Это та штука, которая пишется
- У тебя есть только описание того как просто сделать expect.extend
- У тебя описывается как максимально примитивно добавить типы. У Playwright, к примеру, матчеры различаются в зависимости от того что ты передаёшь в expect. У vitest'a все матчеры находятся в единой помойке. Типизация тут помогает минимально.
- У тебя попросту нет доступа из матчеров к конфигу. Соврал, нет НОРМАЛЬНОГО доступа к конфигу.
И эту сиутацию я хочу рассмотреть.
Вот у меня есть задача: написать снепшотилку директорий. Не важно что это такое. Важно то, что мне нужно получать доступ к флагу
И делается это очень просто: никак. Точнее, никак это не описано в документации. Но зато нам даётся ссылка на jest плагин, который позволяет делать снепшоты: https://vitest.dev/guide/snapshot#image-snapshots. И тут может возникнуть мысль: "Эврика! В jest'e всё можно сделать, а vitest просто перенёс к себе эти решения".
Ну, часть вывода будет верна: Vitest перенёс решения. Но это не решения, а костыли. В jest так же ничего не описывается.
В итоге все кто пишут плагины к jest, тупо завязываются на внутренние апи. К примеру, флаг
Но, ничего не изменилось.
И это фигня. Часть апи, к примеру, лежит тупо в
Всё апи jest'a и vitest'a - это набор костылей, которые можно найти только с помощью метода тыка.
Итог: jest плюёт на расширяемость. Vitest занимается тем, что переносит костыли jest'a и так же плюёт на расширяемость. Так и живём.
Jest и Vitest - это лидирующие решения для юнит тестирования js/ts кода. Но вокруг них сложилась удивительная и непонятная для меня ситуация.
Давайте глянем на ESLint. Это решение максимально расширяемо. Его документация хорошо описана и существует множество плагинов, которые прекрасно расширяют его функциональность. И сообщество использует ESLint как раз за то, что он расширяем: каждый человек может написать свой плагин. И разработчики ESLint прислушиваются к тому что нужно сообществу.
А теперь давайте глянем на наших лидеров:
Что нам нужно от расширения jest/vitest. В 99% случаев нам понадобится написать собственный matcher. Это та штука, которая пишется
expect().ВОТ_ТУТ(). И в таком случае начинается веселье:- У тебя есть только описание того как просто сделать expect.extend
- У тебя описывается как максимально примитивно добавить типы. У Playwright, к примеру, матчеры различаются в зависимости от того что ты передаёшь в expect. У vitest'a все матчеры находятся в единой помойке. Типизация тут помогает минимально.
- У тебя попросту нет доступа из матчеров к конфигу. Соврал, нет НОРМАЛЬНОГО доступа к конфигу.
И эту сиутацию я хочу рассмотреть.
Вот у меня есть задача: написать снепшотилку директорий. Не важно что это такое. Важно то, что мне нужно получать доступ к флагу
-u, который в vitest позволяет понять хочет пользователь сравнить снепшоты или же обновить их.И делается это очень просто: никак. Точнее, никак это не описано в документации. Но зато нам даётся ссылка на jest плагин, который позволяет делать снепшоты: https://vitest.dev/guide/snapshot#image-snapshots. И тут может возникнуть мысль: "Эврика! В jest'e всё можно сделать, а vitest просто перенёс к себе эти решения".
Ну, часть вывода будет верна: Vitest перенёс решения. Но это не решения, а костыли. В jest так же ничего не описывается.
В итоге все кто пишут плагины к jest, тупо завязываются на внутренние апи. К примеру, флаг
-u - это простое выражение expect.getState().snapshotState._updateSnapshot === 'all'. И да, _updateSnapshot - это приватное поле. Приватное поле на уровне типов. И даже в 2019 году было issue, чтобы сделать апи нормальным: https://github.com/jestjs/jest/issues/8732Но, ничего не изменилось.
И это фигня. Часть апи, к примеру, лежит тупо в
global: https://github.com/americanexpress/jest-image-snapshot/blob/da49e578c9a02c50aa841d05ac64e9ffd4b725fd/src/index.js#L193Всё апи jest'a и vitest'a - это набор костылей, которые можно найти только с помощью метода тыка.
Итог: jest плюёт на расширяемость. Vitest занимается тем, что переносит костыли jest'a и так же плюёт на расширяемость. Так и живём.
vitest.dev
Next generation testing framework powered by Vite
👍22💩4🤡3🖕1
Понедельник. Ссылки
https://jser.dev/2023-06-19-how-does-usestate-work/
Как работает useState в реакте. Неплохо мне помогло в написании @signal_components. Я пытаюсь в качестве эксперимента затащить сигналы в реакт. А он активно вставляет костыли тем людям, которые хотят избегать ререндеров.
https://9to5google.com/2024/07/18/googl-links/
Гугл закрыл и этот проект
https://news.1rj.ru/str/workbeer/141
Как корректно делать шорткаты в вебе
https://publint.dev
https://arethetypeswrong.github.io/
Линтеры для package.json. Рекомендую почитать правила, которые они там проверяют. Можно узнать интересное о том как резолвятся пакеты.
https://zed.dev/blog/beta
Отличнейший редактор, теперь есть на Linux. У себя на маке я полностью заменил им sublime text. Всем рекомендую в случае, если требуется просто открыть файл и как-то поиграться с ним
https://x.com/lcasdev/status/1810696257137959018?s=46&t=ohIjgaVZLt6vr9X0nBz1jg
Хром, как неожиданно(нет), даёт гуглу эксклюзивные права на многие ваши метрики(CPU, GPU, RAM, etc) на своих сайтах.
https://news.1rj.ru/str/dotrubic/234
Как GPL руинит мир. Никогда не используйте у себя любую из форм GPL
https://jser.dev/2023-06-19-how-does-usestate-work/
Как работает useState в реакте. Неплохо мне помогло в написании @signal_components. Я пытаюсь в качестве эксперимента затащить сигналы в реакт. А он активно вставляет костыли тем людям, которые хотят избегать ререндеров.
https://9to5google.com/2024/07/18/googl-links/
Гугл закрыл и этот проект
https://news.1rj.ru/str/workbeer/141
Как корректно делать шорткаты в вебе
https://publint.dev
https://arethetypeswrong.github.io/
Линтеры для package.json. Рекомендую почитать правила, которые они там проверяют. Можно узнать интересное о том как резолвятся пакеты.
https://zed.dev/blog/beta
Отличнейший редактор, теперь есть на Linux. У себя на маке я полностью заменил им sublime text. Всем рекомендую в случае, если требуется просто открыть файл и как-то поиграться с ним
https://x.com/lcasdev/status/1810696257137959018?s=46&t=ohIjgaVZLt6vr9X0nBz1jg
Хром, как неожиданно(нет), даёт гуглу эксклюзивные права на многие ваши метрики(CPU, GPU, RAM, etc) на своих сайтах.
https://news.1rj.ru/str/dotrubic/234
Как GPL руинит мир. Никогда не используйте у себя любую из форм GPL
jser.dev
How does useState() work internally in React?
useState() is the only state hook that stores data and triggers updates.
👍9🤡3💩2
3rd party cookies
https://privacysandbox.com/news/privacy-sandbox-update/
Результат даже стал хуже. Гугл не справилась с выпиливанием наших любимых кук, поэтому хром в будущем БУДЕТ ДАВАТЬ ВЫБОР ПОЛЬЗОВАТЕЛЮ.
Из двух стульев с проблемами гугл решил выбрать оба. Никакой инфы нет, но теперь могу представить как теперь будет весело писать код. Теперь надо учитывать тупо оба случая.
Вот реально, как им в голову такие решения приходят?
https://privacysandbox.com/news/privacy-sandbox-update/
Результат даже стал хуже. Гугл не справилась с выпиливанием наших любимых кук, поэтому хром в будущем БУДЕТ ДАВАТЬ ВЫБОР ПОЛЬЗОВАТЕЛЮ.
Из двух стульев с проблемами гугл решил выбрать оба. Никакой инфы нет, но теперь могу представить как теперь будет весело писать код. Теперь надо учитывать тупо оба случая.
Вот реально, как им в голову такие решения приходят?
Privacy Sandbox
A new path for Privacy Sandbox on the web
In this July 2024 announcement, the Privacy Sandbox team shares an important update regarding third-party cookies in Chrome.
👍5😱4🤡4💩2
bun, внезапно, реально изменил мир.
Сегодня мне понадобилось написать скрипт околосреднего размера на ts. И это так впадлу настраивать на привычном стеке. А с помощью bun - всё просто:
и не нужно никакого tsc, ts-node, nodemon и прочей фигни. Оно просто работает.
Если вы не пробовали bun у себя, то, кмк, это ошибка. Всякую мелочь можно реально спокойно на него переводить.
И да, всё вышенарисованное появилось в ноде как раз благодаря бану
Сегодня мне понадобилось написать скрипт околосреднего размера на ts. И это так впадлу настраивать на привычном стеке. А с помощью bun - всё просто:
bun run index.ts --watch
и не нужно никакого tsc, ts-node, nodemon и прочей фигни. Оно просто работает.
Если вы не пробовали bun у себя, то, кмк, это ошибка. Всякую мелочь можно реально спокойно на него переводить.
brew install oven-sh/bun/bun
И да, всё вышенарисованное появилось в ноде как раз благодаря бану
👍28💩3🤡3❤1❤🔥1👏1🍾1
Покупка доменов, в современном мире, к сожалению, очень геморная вещь. Потому что не понятно кто тебя кинет, а кто нет.
К примеру, godaddy попросту украл домен моего знакомого @sergeysova, так как он паспортом не вышел.
Я сам лично пользуюсь namecheap.com и покупал reatom.dev именно там. Так как у них простейшая политика: если они не захотят с вами сотрудничать, то они попросту попросят вас увести свои домены от них куда-нибудь.
Автор effector.dev хостит свои домены на name.com и они тоже нормально относятся к своим клиентам.
Если же вы подумаете что-нибудь покупать, то трижды подумайте, чтобы идти на godaddy. Вам может повезти, но, увы, куче людей не повезло.
К примеру, godaddy попросту украл домен моего знакомого @sergeysova, так как он паспортом не вышел.
Я сам лично пользуюсь namecheap.com и покупал reatom.dev именно там. Так как у них простейшая политика: если они не захотят с вами сотрудничать, то они попросту попросят вас увести свои домены от них куда-нибудь.
Автор effector.dev хостит свои домены на name.com и они тоже нормально относятся к своим клиентам.
Если же вы подумаете что-нибудь покупать, то трижды подумайте, чтобы идти на godaddy. Вам может повезти, но, увы, куче людей не повезло.
👍11💩2🤡2😁1
Понедельник. Ссылки
https://2023.stateofreact.com/en-US
Результаты опроса. Из приятного: redux ненавидит 30% респондентов.
Советую прочитать этот опрос, так как это хороший способ обновить свои знания.
Плюс, из интересного: добавили комментарии. Их тоже советую глянуть.
К примеру, комментарий к useState
Ещё бы лайки-дизлайки к комментам добавить и будет идеально
https://news.1rj.ru/str/workbeer/151
setTimeout не такой уж и кроссплатформенный. Node работает чуток по-другому, в отличии от браузеров
https://github.com/nodejs/node/pull/53725
Привет bun. Нода пытается в запуск ts файлов.
https://github.com/public-apis/public-apis?tab=readme-ov-file
Список огромного количество открытых апи с разной информацией
https://2023.stateofreact.com/en-US
Результаты опроса. Из приятного: redux ненавидит 30% респондентов.
Советую прочитать этот опрос, так как это хороший способ обновить свои знания.
Плюс, из интересного: добавили комментарии. Их тоже советую глянуть.
К примеру, комментарий к useState
Not because i like it. just because it is default
Ещё бы лайки-дизлайки к комментам добавить и будет идеально
https://news.1rj.ru/str/workbeer/151
setTimeout не такой уж и кроссплатформенный. Node работает чуток по-другому, в отличии от браузеров
https://github.com/nodejs/node/pull/53725
Привет bun. Нода пытается в запуск ts файлов.
https://github.com/public-apis/public-apis?tab=readme-ov-file
Список огромного количество открытых апи с разной информацией
Stateofreact
State of React 2023
The 2023 edition of the annual survey about the latest trends in the React ecosystem.
👍10💩5🤡1
Прямо сейчас правительство в РФ решило взяться серьёзно за ютуб и начать его активно ломать.
И так как у меня в подписчиках достаточное количество россиян, то рекомендую ознакомиться с
https://habr.com/ru/articles/831846/
https://habr.com/ru/articles/832678/
Как минимум, чтобы отсрочить необходимость гонять видео через VPN. А так, существует только 1 нормальный способ обхода блокировок: на уровне роутера.
Древняя статья для древнего микротика: https://habr.com/ru/articles/549282/
Но для того чтобы понять принцип тунеллирования трафика по BGP в VPN - будет полезно.
И так как у меня в подписчиках достаточное количество россиян, то рекомендую ознакомиться с
https://habr.com/ru/articles/831846/
https://habr.com/ru/articles/832678/
Как минимум, чтобы отсрочить необходимость гонять видео через VPN. А так, существует только 1 нормальный способ обхода блокировок: на уровне роутера.
Древняя статья для древнего микротика: https://habr.com/ru/articles/549282/
Но для того чтобы понять принцип тунеллирования трафика по BGP в VPN - будет полезно.
Хабр
Я победил замедление YouTube
Привет, Хабр! Ухудшение работы YouTube стало поистине трагическим событием, которое прибило почти все загрузчики видео, но я нашел легальный способ улучшить ситуацию! Как починить оборудование Google,...
👍9💩2🤡2❤1
Понедельник. Ссылки.
Последнюю неделю-полторы я пишу свой сборщик для js/ts библиотек, поэтому и ссылки весьма специфичные
https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#signal
У
а) можно на 1 сигнал повесить сколько угодно подписок
б) не надо хранить и DOM ноду, и колбек, для того чтобы осуществить отписку
https://deno.com/blog/http-imports
Deno признал, что импорты через http урлы - это чуток путь не в православную сторону
https://github.com/sveltejs/rollup-plugin-svelte/issues/104
Не забывайте при написании package.json для библиотек экспортировать сам package.json. Он бывает нужным в неожиданных сценариях
https://2ality.com/2019/10/hybrid-npm-packages.html
Немного устаревшей доки как писать esm/cjs библиотеки корректно
https://blog.isquaredsoftware.com/2023/08/esm-modernization-lessons/
И как всё же их писать сложно
https://www.typenoscriptlang.org/docs/handbook/modules/appendices/esm-cjs-interop.html#library-code-needs-special-considerations
А так же нужно не забывать собирать 2 вида тайпингов, так как cjs и esm тайпинги у тайпскрипта не взаимозаменяемы
https://e18e.dev
ljharb гордился бы нами. Люди всерьёз задумались о размере пакетов. Надеюсь, что эта инициатива не заглохнет
https://storybook.js.org/blog/storybook-8-2/
И вот вам сразу практический пример как крупный проект начал думать о размере и удобстве работы с зависимостями
https://github.com/tc39/proposal-promise-try
Но не стоит считать, что ljharb абсолютное зло. Он так же делает и приятные для нас штуки
https://github.com/uBlockOrigin/uBlock-issues/wiki/About-Google-Chrome's-%22This-extension-may-soon-no-longer-be-supported%22
Manifest v3 в Хроме наступает. Походу, всё же вскоре случится
https://parceljs.org/getting-started/library/
Парсель внезапно имеет практически идеальную конфигурацию сборки для библиотек. "Практически" - потому что всё же package.json не генерится, а его приходится писать руками
Последнюю неделю-полторы я пишу свой сборщик для js/ts библиотек, поэтому и ссылки весьма специфичные
https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#signal
У
addEventListener оказывается есть возможность прокинуть abortSignal. Это куда удобнее для меня, так кака) можно на 1 сигнал повесить сколько угодно подписок
б) не надо хранить и DOM ноду, и колбек, для того чтобы осуществить отписку
https://deno.com/blog/http-imports
Deno признал, что импорты через http урлы - это чуток путь не в православную сторону
https://github.com/sveltejs/rollup-plugin-svelte/issues/104
Не забывайте при написании package.json для библиотек экспортировать сам package.json. Он бывает нужным в неожиданных сценариях
https://2ality.com/2019/10/hybrid-npm-packages.html
Немного устаревшей доки как писать esm/cjs библиотеки корректно
https://blog.isquaredsoftware.com/2023/08/esm-modernization-lessons/
И как всё же их писать сложно
https://www.typenoscriptlang.org/docs/handbook/modules/appendices/esm-cjs-interop.html#library-code-needs-special-considerations
А так же нужно не забывать собирать 2 вида тайпингов, так как cjs и esm тайпинги у тайпскрипта не взаимозаменяемы
https://e18e.dev
ljharb гордился бы нами. Люди всерьёз задумались о размере пакетов. Надеюсь, что эта инициатива не заглохнет
https://storybook.js.org/blog/storybook-8-2/
И вот вам сразу практический пример как крупный проект начал думать о размере и удобстве работы с зависимостями
https://github.com/tc39/proposal-promise-try
Но не стоит считать, что ljharb абсолютное зло. Он так же делает и приятные для нас штуки
https://github.com/uBlockOrigin/uBlock-issues/wiki/About-Google-Chrome's-%22This-extension-may-soon-no-longer-be-supported%22
Manifest v3 в Хроме наступает. Походу, всё же вскоре случится
https://parceljs.org/getting-started/library/
Парсель внезапно имеет практически идеальную конфигурацию сборки для библиотек. "Практически" - потому что всё же package.json не генерится, а его приходится писать руками
MDN Web Docs
EventTarget: addEventListener() method - Web APIs | MDN
The addEventListener() method of the EventTarget interface
sets up a function that will be called whenever the specified event is delivered to the target.
sets up a function that will be called whenever the specified event is delivered to the target.
👍14🔥3💩3🤡3
Когда-то давно я видел наборы в стиле "100500 ошибочных допущений о времени/ФИО/так_далее" и мне захотелось поделиться несколькими историями/заблуждениями, когда дефолты не работают.
Важный контекст: я не являюсь гражданином РФ и никогда им не был, но прожил около 6 лет с 2016 по 2022 год в Москве и Санкт-Петербурге как трудовой мигрант.
Не очень важная, но хотелка: не стесняйтесь ставить реакции. Вам ничего не стоит, а мне приятно.
Важное уточнение для всех нероссиян: далее я буду использовать российкую терминологию, так как она отличается от международной. Загранпаспорт==паспорт и паспорт==id-карта
Заблуждение/история №1: Российский номер телефона имеют только россияне.
(Скриншоты в комментариях)
Хочется сказать что это очевидно. Но, внезапно, нет. Не очевидно. Как минимум для техподдержки Яндекса.
Вчера я решил глянуть что предлагает рекламная сеть Яндекса для телеграм каналов и обнаружил, что Яндекс предлагает мне зарегистрироваться с моим уже бывшим номером телефона, хотя я отчётливо помнил, что я его менял на казахстанский. Оказалось, что Яндекс в какой-то момент открыл мне самостоятельно счёт в Яндекс.Банке и привязал туда мой российский номер телефона. На моё желание удалить номер я увидел простую вещь: хочешь что-то с ним сделать - пиши в техподдержку. Ну, бывает, я написал(скриншот 1). И я очень сильно удивился когда меня попросили предоставить паспорт(которого у меня нет из-за отсутствия гражданства) и сделать селфи, чтобы что-то там подтвердить. Напоминаю: документов у Яндекса об открытии счёта быть не может. Да, я работал в Яндексе, но счёта в Яндекс.Банке не открывал. Итог: диалог просто был завёршён со стороны техподдержки, так как я отказался делать фото. Не знаю был ли там человек или робот, но впечатление уже сильно попортилось.
Кстати, советую и вам проверить. Авось и у вас есть счёт в Яндекс.Банке, о котором вы не знаете.
Благо второй диалог(скриншот 2) был уже куда адекватнее. Без фото и прочих данных мне пообещали, что счёт закроют. И его закрыли, правда по СМС так и не уведомили, хотя пообещали.
Вывод: не все люди - россияне
=======
Заблуждение/история №2: Не все живущие в РФ - россияне
Во времена своего студенчества родители где-то раз в месяц присылали мне деньги на жизнь. Самый простой доступный способ был отправка денег всякими посредниками типа western union или "золотая корона". В итоге после получения денег у меня была какая-то наличка на руках, которую нужно как-то закинуть на банковский счёт для удобных операций.
В то время у Тинькофф не было банкоматов и единственным способом пополнения счёта я видел пополнение через салон сотовой связи. Я использовал разные салоны: мвидео, билайн, евросеть и другие, но абсолютно везде был один нюанс: для пополнения счёта нужно было предоставить паспорт гражданина РФ. Не знаю кто это придумывал и какая форма мотивации была у сотрудников салонов, но во всех случаях общение строилось так:
1) я показывал свои документы
2) минуты 3 мне доказывали что у меня должен быть российский паспорт, даже после моих слов, что у меня нет гражданства. Эта информация просто никак не принималась людьми
3) в итоге консультант смирялся, вбивал СВОИ данные и деньги поступали ко мне на счёт
Вывод: не все люди - россияне. Думайте, когда проектируете системы. Может быть ею захочет воспользоваться иностранец.
Важный контекст: я не являюсь гражданином РФ и никогда им не был, но прожил около 6 лет с 2016 по 2022 год в Москве и Санкт-Петербурге как трудовой мигрант.
Не очень важная, но хотелка: не стесняйтесь ставить реакции. Вам ничего не стоит, а мне приятно.
Важное уточнение для всех нероссиян: далее я буду использовать российкую терминологию, так как она отличается от международной. Загранпаспорт==паспорт и паспорт==id-карта
Заблуждение/история №1: Российский номер телефона имеют только россияне.
(Скриншоты в комментариях)
Хочется сказать что это очевидно. Но, внезапно, нет. Не очевидно. Как минимум для техподдержки Яндекса.
Вчера я решил глянуть что предлагает рекламная сеть Яндекса для телеграм каналов и обнаружил, что Яндекс предлагает мне зарегистрироваться с моим уже бывшим номером телефона, хотя я отчётливо помнил, что я его менял на казахстанский. Оказалось, что Яндекс в какой-то момент открыл мне самостоятельно счёт в Яндекс.Банке и привязал туда мой российский номер телефона. На моё желание удалить номер я увидел простую вещь: хочешь что-то с ним сделать - пиши в техподдержку. Ну, бывает, я написал(скриншот 1). И я очень сильно удивился когда меня попросили предоставить паспорт(которого у меня нет из-за отсутствия гражданства) и сделать селфи, чтобы что-то там подтвердить. Напоминаю: документов у Яндекса об открытии счёта быть не может. Да, я работал в Яндексе, но счёта в Яндекс.Банке не открывал. Итог: диалог просто был завёршён со стороны техподдержки, так как я отказался делать фото. Не знаю был ли там человек или робот, но впечатление уже сильно попортилось.
Кстати, советую и вам проверить. Авось и у вас есть счёт в Яндекс.Банке, о котором вы не знаете.
Благо второй диалог(скриншот 2) был уже куда адекватнее. Без фото и прочих данных мне пообещали, что счёт закроют. И его закрыли, правда по СМС так и не уведомили, хотя пообещали.
Вывод: не все люди - россияне
=======
Заблуждение/история №2: Не все живущие в РФ - россияне
Во времена своего студенчества родители где-то раз в месяц присылали мне деньги на жизнь. Самый простой доступный способ был отправка денег всякими посредниками типа western union или "золотая корона". В итоге после получения денег у меня была какая-то наличка на руках, которую нужно как-то закинуть на банковский счёт для удобных операций.
В то время у Тинькофф не было банкоматов и единственным способом пополнения счёта я видел пополнение через салон сотовой связи. Я использовал разные салоны: мвидео, билайн, евросеть и другие, но абсолютно везде был один нюанс: для пополнения счёта нужно было предоставить паспорт гражданина РФ. Не знаю кто это придумывал и какая форма мотивации была у сотрудников салонов, но во всех случаях общение строилось так:
1) я показывал свои документы
2) минуты 3 мне доказывали что у меня должен быть российский паспорт, даже после моих слов, что у меня нет гражданства. Эта информация просто никак не принималась людьми
3) в итоге консультант смирялся, вбивал СВОИ данные и деньги поступали ко мне на счёт
Вывод: не все люди - россияне. Думайте, когда проектируете системы. Может быть ею захочет воспользоваться иностранец.
👍12🤯10🤡4💩3❤🔥2🙏1💯1
Заблуждение/история №3: У людей может меняться ФИО.
В 2016 году в загранпаспорте у меня была фамилия+имя+отчество, с помощью которых я устроился на первую работу, и, следовательно, получил свой набор документов
В 2018 году я получил новый загран, в котором у меня уже были фамилия+имя. Отчества не было. И это прямо прибило все гос и частные органы в РФ. У меня сломались "пенсионный фонд", "тинькофф", "сбер" и моя компания, в которой я работал. И сломались по простой причине: они не подразумевали что у человека может смениться ФИО. До сих пор у меня в РФ для государства 2 личности: ФИО и ФИ. 2 разных человека. И это мне очень больно била при попытке устроиться на работу, так как всякие СНИЛСы и прочее попросту не подходили к моей "текущей личности". В итоге каждый работодатель просто плевал на несоответствия и вроде как штрафов не получал.
Вывод: ФИО может меняться без ведома государства
=====
Заблуждение/история №4: У людей может меняться номер паспорта
По этой же причине у меня сменился и номер паспорта в 2018 году. В итоге у меня сломались госуслуги РФ. Не сказать что они мне как-то сильно нужны, но это всё равно забавно. И причина проста: документы, указанные в СНИЛС не совпадают с данными паспорта. А без этих двух сущностей иностранцу не зарегистрироваться на госуслугах РФ. И РФ не особо дружелюбно к людям, которые хотят изменить данные у них. В итоге я плюнул и решил жить без доступа к такому великому сервису как госуслуги РФ
Вывод: Не только ФИО, а вообще любые данные человека могут измениться без ведома государства.
=====
Ко всем разработчикам у меня только одна просьба: при проектировании сервисов попробуйте не забыть о том, что в вашем государстве живут не только ваши сограждане, но и другие люди.
В 2016 году в загранпаспорте у меня была фамилия+имя+отчество, с помощью которых я устроился на первую работу, и, следовательно, получил свой набор документов
В 2018 году я получил новый загран, в котором у меня уже были фамилия+имя. Отчества не было. И это прямо прибило все гос и частные органы в РФ. У меня сломались "пенсионный фонд", "тинькофф", "сбер" и моя компания, в которой я работал. И сломались по простой причине: они не подразумевали что у человека может смениться ФИО. До сих пор у меня в РФ для государства 2 личности: ФИО и ФИ. 2 разных человека. И это мне очень больно била при попытке устроиться на работу, так как всякие СНИЛСы и прочее попросту не подходили к моей "текущей личности". В итоге каждый работодатель просто плевал на несоответствия и вроде как штрафов не получал.
Вывод: ФИО может меняться без ведома государства
=====
Заблуждение/история №4: У людей может меняться номер паспорта
По этой же причине у меня сменился и номер паспорта в 2018 году. В итоге у меня сломались госуслуги РФ. Не сказать что они мне как-то сильно нужны, но это всё равно забавно. И причина проста: документы, указанные в СНИЛС не совпадают с данными паспорта. А без этих двух сущностей иностранцу не зарегистрироваться на госуслугах РФ. И РФ не особо дружелюбно к людям, которые хотят изменить данные у них. В итоге я плюнул и решил жить без доступа к такому великому сервису как госуслуги РФ
Вывод: Не только ФИО, а вообще любые данные человека могут измениться без ведома государства.
=====
Ко всем разработчикам у меня только одна просьба: при проектировании сервисов попробуйте не забыть о том, что в вашем государстве живут не только ваши сограждане, но и другие люди.
👍12🤬3💩3🤡2❤🔥1🤯1🙏1🥴1
raycast
До последнего времени мне было абсолютно фиолетово на какой ОС сидеть. Главное, чтобы задачи лучше всего выполнялись.
Проект работает лучше всего под линуксом? Буду сидеть под линуксом. Винда? Без проблем. Макось? И эта железка есть.
Это всё обеспечивалось тем, что у всех трёх ОС можно построить примерно одинаковое окружение: запускаешь терминал, в нём fish+tmux и работаешь как тебе привычно.
Но около 2 месяцев назад схема дала слабину. Потому что есть https://www.raycast.com.
Напомню свою позицию по работе с устройствами: поиск превыше всего. https://news.1rj.ru/str/xavescor_code/73
И рейкаст - это прямо идеальное продолжение этого подхода.
Если говорить вкратце: то это поисковая строка с возможностью расширения. И плагины есть практически на любой вкус.
И теперь у меня жизнь выглядит примерно так:
- Нужно что-то найти? Ищем через рейкаст в гугле или duckduckgo
- Нужно что-то объяснить? Делаем запрос через рейкаст к чатгпт
- Нужно написать маме о чём-то? Открываю чат с мамой через рейкаст через плагин к whatsapp(Плагина, делающего интеграцию с телегой, увы, нет)
- Нужно что-то перевести на другой язык? Верно. Плагин к google translate
- Нужно написать коллеге в slack? Открываешь чат с коллегой напрямую через raycast
- Хочется включить кондиционер? Плагин к home-assistant.io тоже есть в рейкасте.
Преимущество рейкаста в том, что в комьюнити есть куча поехавших, которые сделали плагины практически к чему угожно. И это всё БЕСПЛАТНО. Тебе не нужен никакой другой интерфейс для поиска кроме поиска raycast.
Кроме того raycast исправляет тупые косяки макоси:
- Есть window manager
- Есть буфер обмена с историей
- Есть возможность править менюбар
И вот, увы, я снова привязан к макоси, так как рейкаст настолько удобен, что жить без него боль
До последнего времени мне было абсолютно фиолетово на какой ОС сидеть. Главное, чтобы задачи лучше всего выполнялись.
Проект работает лучше всего под линуксом? Буду сидеть под линуксом. Винда? Без проблем. Макось? И эта железка есть.
Это всё обеспечивалось тем, что у всех трёх ОС можно построить примерно одинаковое окружение: запускаешь терминал, в нём fish+tmux и работаешь как тебе привычно.
Но около 2 месяцев назад схема дала слабину. Потому что есть https://www.raycast.com.
Напомню свою позицию по работе с устройствами: поиск превыше всего. https://news.1rj.ru/str/xavescor_code/73
И рейкаст - это прямо идеальное продолжение этого подхода.
Если говорить вкратце: то это поисковая строка с возможностью расширения. И плагины есть практически на любой вкус.
И теперь у меня жизнь выглядит примерно так:
- Нужно что-то найти? Ищем через рейкаст в гугле или duckduckgo
- Нужно что-то объяснить? Делаем запрос через рейкаст к чатгпт
- Нужно написать маме о чём-то? Открываю чат с мамой через рейкаст через плагин к whatsapp(Плагина, делающего интеграцию с телегой, увы, нет)
- Нужно что-то перевести на другой язык? Верно. Плагин к google translate
- Нужно написать коллеге в slack? Открываешь чат с коллегой напрямую через raycast
- Хочется включить кондиционер? Плагин к home-assistant.io тоже есть в рейкасте.
Преимущество рейкаста в том, что в комьюнити есть куча поехавших, которые сделали плагины практически к чему угожно. И это всё БЕСПЛАТНО. Тебе не нужен никакой другой интерфейс для поиска кроме поиска raycast.
Кроме того raycast исправляет тупые косяки макоси:
- Есть window manager
- Есть буфер обмена с историей
- Есть возможность править менюбар
И вот, увы, я снова привязан к макоси, так как рейкаст настолько удобен, что жить без него боль
Raycast
Raycast - Your shortcut to everything
A collection of powerful productivity tools all within an extendable launcher.
👍21💯6🤡4💩3
Понедельник. Ссылки.
https://npmgraph.js.org/?q=smartbundle
Тул, чтобы глянуть граф зависимостей в библиотеке. Хороший тул для того чтобы принимать решение стоит ли брать либу или нет
https://eslint.org/blog/2024/08/eslint-v9.9.0-released/
Поддержка тайпскрита из коробки становится стандартом. Спасибо, bun
https://vercel.com/blog/how-google-handles-javanoscript-throughout-the-indexing-process
Очередная рекламная статья от верцела, где они доказывают, что SPA индексируются. Но, читая статью, держите в голове, что гугл говорит что для полной индексации необходимо отдавать HTML. И никак иначе.
https://minutestomidnight.co.uk/blog/leaving-the-web-industry/
Грустная история о том как навыки могут устаревать. Учитесь на чужих ошибках, чтобы не оказаться на обочине рынка.
https://nodejs.org/en/blog/release/v22.6.0#experimental-network-inspection-support-in-nodejs
Нода разогналась и не перестаёт удивлять новыми фичами. Теперь, можно исследовать сетевые запросы, а не только играться с точками останова
https://bundle.js.org
Хороший сервис, чтобы посмотреть что именно прилетит к вам в бандл, если вы напишете те или иные импорты
https://x.com/sanxiaozhizi/status/1805585053550100901
Если вы генерите d.ts, а tsc по-вашему мнению тормозит, то появилось решение, которое работает быстрее. Как минимум по информации в твите
https://www.rainsberger.ca/blog/50-docs-tips-in-50-days/
50 советов от автора документации Astro. Очень рекомендую, так как считаю документацию Astro одной из лучшей среди технических документаций
https://news.1rj.ru/str/it_diva_offical/410
Как подготовиться к публичному выступлению. Так же рекомендую этот канал, так как он делает весьма хорошие материалы по тому как вести свой карьерный путь
=====
Ну и главное. РЕКЛАМА. Реклама себя. Провожу консультации и не только по всему что связано и не очень с фронтендом. Подробнее: https://news.1rj.ru/str/xavescor_meetings_logs/6
https://npmgraph.js.org/?q=smartbundle
Тул, чтобы глянуть граф зависимостей в библиотеке. Хороший тул для того чтобы принимать решение стоит ли брать либу или нет
https://eslint.org/blog/2024/08/eslint-v9.9.0-released/
Поддержка тайпскрита из коробки становится стандартом. Спасибо, bun
https://vercel.com/blog/how-google-handles-javanoscript-throughout-the-indexing-process
Очередная рекламная статья от верцела, где они доказывают, что SPA индексируются. Но, читая статью, держите в голове, что гугл говорит что для полной индексации необходимо отдавать HTML. И никак иначе.
https://minutestomidnight.co.uk/blog/leaving-the-web-industry/
Грустная история о том как навыки могут устаревать. Учитесь на чужих ошибках, чтобы не оказаться на обочине рынка.
https://nodejs.org/en/blog/release/v22.6.0#experimental-network-inspection-support-in-nodejs
Нода разогналась и не перестаёт удивлять новыми фичами. Теперь, можно исследовать сетевые запросы, а не только играться с точками останова
https://bundle.js.org
Хороший сервис, чтобы посмотреть что именно прилетит к вам в бандл, если вы напишете те или иные импорты
https://x.com/sanxiaozhizi/status/1805585053550100901
Если вы генерите d.ts, а tsc по-вашему мнению тормозит, то появилось решение, которое работает быстрее. Как минимум по информации в твите
https://www.rainsberger.ca/blog/50-docs-tips-in-50-days/
50 советов от автора документации Astro. Очень рекомендую, так как считаю документацию Astro одной из лучшей среди технических документаций
https://news.1rj.ru/str/it_diva_offical/410
Как подготовиться к публичному выступлению. Так же рекомендую этот канал, так как он делает весьма хорошие материалы по тому как вести свой карьерный путь
=====
Ну и главное. РЕКЛАМА. Реклама себя. Провожу консультации и не только по всему что связано и не очень с фронтендом. Подробнее: https://news.1rj.ru/str/xavescor_meetings_logs/6
npmgraph.js.org
npmgraph - NPM Dependency Diagrams
Graph / visualize of npm dependencies
👍22💩2🤡2🗿1
Webstorm 2024.2
Вышел новый мажор. И самая главная новость на текущий момент: НЕ ОБНОВЛЯЙТЕСЬ.
Проверено не только на мне, а ещё и на коллегах.
Не знаю что они там сделали, но явно отдел тестирования профукал все полимеры.
Проблема а) github copylot плагин не совместим с этой версией. И самое тупое - он не отключается. Он работает. И походу, в WS все плагины работают последовательно. Так как в случае падения копайлота у вас замирает абсолютно всё: перестают работать все анализы. webstorm показывает ошибку? Ну, эта ошибка будет отображаться ещё 15 секунд, пока гитхаб плагин не упадёт.
Проблема б) тайпскрипт автокомплит тупо перестал работать. На любой автокомплит WS вам попросту выплёвывает всё, что он сумел найти в проекте. И всё продолжается нереальными тормозами.
Проблема в) проблемы не уходят даже если отключить копайлот и тайпскрипт, и даже если перезапустить IDE c очисткой кеша, и даже если удалить IDE и поставить с нуля. Фиг знает что это, но что-то не зависящее от проектов.
И так же дежурное напоминание: у jetbrains toolbox есть дежурная функция "откатиться на предыдущую версию". Это работает прекрасно, так как при установке новой версии старые не удаляются. Новая версия IDE просто устанавливается в соседнюю директорию. Уже обновились и такие же проблемы? Откатывайтесь спокойно и ждите второго сервиспака. Не обновлялись? Подождите как минимум 2024.2.1. Пока уж точно рано.
А ченжлоги? Ну вот она, положила https://blog.jetbrains.com/webstorm/2024/08/webstorm-2024-2/
Есть file based routing, запуск TS файлов и обновление внутреннего рантайма. Звучит, может быть вкусно, но не с такими проблемами.
Вышел новый мажор. И самая главная новость на текущий момент: НЕ ОБНОВЛЯЙТЕСЬ.
Проверено не только на мне, а ещё и на коллегах.
Не знаю что они там сделали, но явно отдел тестирования профукал все полимеры.
Проблема а) github copylot плагин не совместим с этой версией. И самое тупое - он не отключается. Он работает. И походу, в WS все плагины работают последовательно. Так как в случае падения копайлота у вас замирает абсолютно всё: перестают работать все анализы. webstorm показывает ошибку? Ну, эта ошибка будет отображаться ещё 15 секунд, пока гитхаб плагин не упадёт.
Проблема б) тайпскрипт автокомплит тупо перестал работать. На любой автокомплит WS вам попросту выплёвывает всё, что он сумел найти в проекте. И всё продолжается нереальными тормозами.
Проблема в) проблемы не уходят даже если отключить копайлот и тайпскрипт, и даже если перезапустить IDE c очисткой кеша, и даже если удалить IDE и поставить с нуля. Фиг знает что это, но что-то не зависящее от проектов.
И так же дежурное напоминание: у jetbrains toolbox есть дежурная функция "откатиться на предыдущую версию". Это работает прекрасно, так как при установке новой версии старые не удаляются. Новая версия IDE просто устанавливается в соседнюю директорию. Уже обновились и такие же проблемы? Откатывайтесь спокойно и ждите второго сервиспака. Не обновлялись? Подождите как минимум 2024.2.1. Пока уж точно рано.
А ченжлоги? Ну вот она, положила https://blog.jetbrains.com/webstorm/2024/08/webstorm-2024-2/
Есть file based routing, запуск TS файлов и обновление внутреннего рантайма. Звучит, может быть вкусно, но не с такими проблемами.
😱16💩8🤡3😁2🤓2❤1⚡1💯1
Forwarded from Work & Beer Balance
Постоянно гуглю этот тип, так что решил обронить его тут.
Полезная вещь для дебага, позвоялет "развернуть" сложный тип. Ну то-есть выводит конечный тип после всех дженериков юнионов и тп.
Если совсем просто - вместо
Бонус контент:
чтобы тс вам в ошибках не обрезал тип через ... надо включить
Полезная вещь для дебага, позвоялет "развернуть" сложный тип. Ну то-есть выводит конечный тип после всех дженериков юнионов и тп.
Если совсем просто - вместо
SomeGeneric<SomeOtherGeneric, AnotherGeneric<API["some"]>> получаем структуру из js примитивов/**
* Debugging type that will display a fully resolved type
* in Intellisense instead of just the type aliases
*
* @type {T} The type to expand out
*/
type ExpandRecursively<T> = T extends (...args: infer A) => infer R
? (...args: ExpandRecursively<A>) => ExpandRecursively<R>
: T extends object
? T extends infer O
? { [K in keyof O]: ExpandRecursively<O[K]> }
: never
: T
type Expand<T> = T extends (...args: infer A) => infer R
? (...args: A) => R
: T extends object
? T extends infer O
? { [K in keyof O]: O[K] }
: never
: T
Бонус контент:
чтобы тс вам в ошибках не обрезал тип через ... надо включить
noErrorTruncation в tsconfig👍23😨14🤡2🔥1💩1
Девтулзы
Девтулзы в браузере стали неотъемлемой частью веба, так как без отладчика ты не можешь написать никакую нормальную программу.
И так исторически сложилось, что "стандартом" стал Chrome devtools protocol, который не сказать что хорошо описан без костылей может использоваться везде.
Оказывается, 4 года назад крупные игроки начали разрабатывать стандартный девтул протокол: WebDriver BiDi(https://w3c.github.io/webdriver-bidi/)
В итоге о его поддержке на данный момент заявили:
- Firefox https://fxdx.dev/deprecating-cdp-support-in-firefox-embracing-the-future-with-webdriver-bidi/
- Chrome https://developer.chrome.com/blog/webdriver-bidi
- Puppeteer https://pptr.dev/webdriver-bidi
- Selenium https://www.selenium.dev/documentation/webdriver/bidi/
- WebdriverIO https://webdriver.io/docs/api/webdriverBidi/
- BrowserStack https://developer.chrome.com/blog/webdriver-bidi-support-in-browserstack
Пока не известно, но, по-моему мнению будет в Сафари.
И отказались имплементировать, внезапно, Playwright. https://github.com/microsoft/playwright/issues/30237
И, одна из причин, как оказалось https://github.com/microsoft/playwright/issues/30237#issuecomment-2225500478
Позиция плейрайта, прямо говоря, максимально ущербная, но будьте готовы что в будущих версиях будет что-то ломаться, так как Playwright не хочет идти на стандартные решения.
Ну, ljharb хотя бы деньги получает за свои пакеты.
Девтулзы в браузере стали неотъемлемой частью веба, так как без отладчика ты не можешь написать никакую нормальную программу.
И так исторически сложилось, что "стандартом" стал Chrome devtools protocol, который не сказать что хорошо описан без костылей может использоваться везде.
Оказывается, 4 года назад крупные игроки начали разрабатывать стандартный девтул протокол: WebDriver BiDi(https://w3c.github.io/webdriver-bidi/)
В итоге о его поддержке на данный момент заявили:
- Firefox https://fxdx.dev/deprecating-cdp-support-in-firefox-embracing-the-future-with-webdriver-bidi/
- Chrome https://developer.chrome.com/blog/webdriver-bidi
- Puppeteer https://pptr.dev/webdriver-bidi
- Selenium https://www.selenium.dev/documentation/webdriver/bidi/
- WebdriverIO https://webdriver.io/docs/api/webdriverBidi/
- BrowserStack https://developer.chrome.com/blog/webdriver-bidi-support-in-browserstack
Пока не известно, но, по-моему мнению будет в Сафари.
И отказались имплементировать, внезапно, Playwright. https://github.com/microsoft/playwright/issues/30237
И, одна из причин, как оказалось https://github.com/microsoft/playwright/issues/30237#issuecomment-2225500478
Pavel is also creator of CDP.Позиция плейрайта, прямо говоря, максимально ущербная, но будьте готовы что в будущих версиях будет что-то ломаться, так как Playwright не хочет идти на стандартные решения.
Ну, ljharb хотя бы деньги получает за свои пакеты.
👍10🤡3💩2
Цифровизация курильщика или почему я не люблю государство
Может быть это моя выборочность мышления, где я хорошие вещи считаю за норму и не замечаю, а на плохих - акцентирую внимание и бешусь, но я за свою жизнь сделал один вывод: Государство - это самый неэффективный инструмент по превращению денег в продукты, но, увы, либертарианство не работает.
Я проживаю в Казахстане и тут же у меня открыто ИП, поэтому я должен взаимодействовать с государством в момент отчитывания и уплаты налогов. Это нормально и везде так. И ты можешь подать все декларации в цифровом режиме, и даже не обязателен бухгалтер. Но сложности начинаются в тот момент, когда ты хочешь взаимодействовать с этой машиной.
Давайте я опишу как в Казахстане оцифровали отчёты по налогам. Всё просто: дословно перенесли аналоговый процесс в цифру. Не думая. Хотя вру, постарались сделать удобно, но об этом позже.
В общем, у тебя есть 910 форма(см. прикрепленное изображение), которую нужно заполнить какими-то значениями. И, в чём-то автоматизация стала умной: там даже заполнились ФИО и мой ИИН. Жизнь стала чуток проще. Нам и нужны компьютеры, чтобы максимально упрощать нашу жизнь. Одобряю.
Но хочу обратить внимание на пункт 6: первоначальная/очередная/дополнительная/...
Знаете что это? Это, грубо говоря, способы обработки декларации. Я понимаю зачем это нужно было в аналоговом мире - для того, чтобы упростить жизнь всем: государству, людям, бухгалтерам. Подаёшь начальную? Государство видит, что ты раньше не подавался. Очередную? Видит, что твои данные уже были. Дополнительную? Ну, тут тебе жизнь упрощена по-максимуму. Просто вбей дельты ТОЛЬКО в нужные поля. А остальные оставь пустыми. Так и тебе гемориться меньше, и государству вносить коррекций меньше, так как они сразу видны. И так далее.
Т.е. каждый пункт нёс какую-то теоретическую пользу.
Что поменялось с цифровизацией? Угадали, ничего. Только формы отсылаются в цифре, не более.
- Нам правда нужно в цифре отличать начальную форму от очередной? Государство не знает посылал ли я формы раньше? Это нельзя вычислить самостоятельно? Реально в 2024 году есть резон напрягать человека в этом различии.
- Нам правда нужно в цифровую эру иметь "дополнительный" режим? Чтобы ты как дебил высчитывал дельты? А если ты ошибся пару раз и у тебя 1-2 дополнительных формы? То в таком случае ты как дебил должен высчитывать дельту между отосланным состоянием(форма + все отправленные дельты) и нужным? Ну нахрена, если у нас есть компьютеры, которые сами могут это сделать.
В идеальном мире достаточно было бы просто одной формы. А далее компьютер пусть сам всё считает. Делегирование и компьютеры открыли нам великий мир, где ты можешь заниматься реально важными вещами, а всякую фигню будут делать металлические мешки.
К примеру, у меня робот-пылесос убирает всю квартиру в максимальном режиме каждый день. Затраты на его обслуживание 1$ в месяц. Всё, пусть хоть по 2 часа всё у меня дома вылизывает. Вообще не проблема. И цифровизация должна как раз понимать что дешевле сделать роботу, а что человеку, чтобы упрощать жизнь человеку. Потому что оптимизации аналогового мира не подразумевали, что у нас будет такой вычислитель, который очень сложные для людей операции будет выполнять за наносекунды.
А по поводу удобства, которое я упомянул в начале: эти дебилы запихнули валидацию в форму, чтобы упростить жизнь. Некоторые значения обязаны быть больше нуля. И в итоге доп. форму ты подать не можешь. Потому что валидация была рассчитана только на основной режим. А о том что кто-то будет делать коррекцию никто не подумал.
Может быть это моя выборочность мышления, где я хорошие вещи считаю за норму и не замечаю, а на плохих - акцентирую внимание и бешусь, но я за свою жизнь сделал один вывод: Государство - это самый неэффективный инструмент по превращению денег в продукты, но, увы, либертарианство не работает.
Я проживаю в Казахстане и тут же у меня открыто ИП, поэтому я должен взаимодействовать с государством в момент отчитывания и уплаты налогов. Это нормально и везде так. И ты можешь подать все декларации в цифровом режиме, и даже не обязателен бухгалтер. Но сложности начинаются в тот момент, когда ты хочешь взаимодействовать с этой машиной.
Давайте я опишу как в Казахстане оцифровали отчёты по налогам. Всё просто: дословно перенесли аналоговый процесс в цифру. Не думая. Хотя вру, постарались сделать удобно, но об этом позже.
В общем, у тебя есть 910 форма(см. прикрепленное изображение), которую нужно заполнить какими-то значениями. И, в чём-то автоматизация стала умной: там даже заполнились ФИО и мой ИИН. Жизнь стала чуток проще. Нам и нужны компьютеры, чтобы максимально упрощать нашу жизнь. Одобряю.
Но хочу обратить внимание на пункт 6: первоначальная/очередная/дополнительная/...
Знаете что это? Это, грубо говоря, способы обработки декларации. Я понимаю зачем это нужно было в аналоговом мире - для того, чтобы упростить жизнь всем: государству, людям, бухгалтерам. Подаёшь начальную? Государство видит, что ты раньше не подавался. Очередную? Видит, что твои данные уже были. Дополнительную? Ну, тут тебе жизнь упрощена по-максимуму. Просто вбей дельты ТОЛЬКО в нужные поля. А остальные оставь пустыми. Так и тебе гемориться меньше, и государству вносить коррекций меньше, так как они сразу видны. И так далее.
Т.е. каждый пункт нёс какую-то теоретическую пользу.
Что поменялось с цифровизацией? Угадали, ничего. Только формы отсылаются в цифре, не более.
- Нам правда нужно в цифре отличать начальную форму от очередной? Государство не знает посылал ли я формы раньше? Это нельзя вычислить самостоятельно? Реально в 2024 году есть резон напрягать человека в этом различии.
- Нам правда нужно в цифровую эру иметь "дополнительный" режим? Чтобы ты как дебил высчитывал дельты? А если ты ошибся пару раз и у тебя 1-2 дополнительных формы? То в таком случае ты как дебил должен высчитывать дельту между отосланным состоянием(форма + все отправленные дельты) и нужным? Ну нахрена, если у нас есть компьютеры, которые сами могут это сделать.
В идеальном мире достаточно было бы просто одной формы. А далее компьютер пусть сам всё считает. Делегирование и компьютеры открыли нам великий мир, где ты можешь заниматься реально важными вещами, а всякую фигню будут делать металлические мешки.
К примеру, у меня робот-пылесос убирает всю квартиру в максимальном режиме каждый день. Затраты на его обслуживание 1$ в месяц. Всё, пусть хоть по 2 часа всё у меня дома вылизывает. Вообще не проблема. И цифровизация должна как раз понимать что дешевле сделать роботу, а что человеку, чтобы упрощать жизнь человеку. Потому что оптимизации аналогового мира не подразумевали, что у нас будет такой вычислитель, который очень сложные для людей операции будет выполнять за наносекунды.
А по поводу удобства, которое я упомянул в начале: эти дебилы запихнули валидацию в форму, чтобы упростить жизнь. Некоторые значения обязаны быть больше нуля. И в итоге доп. форму ты подать не можешь. Потому что валидация была рассчитана только на основной режим. А о том что кто-то будет делать коррекцию никто не подумал.
👍9💩7🤡5😁1😱1