Никогда, НИКОГДА, НИ-КАГ-ДА не называйте переменные именами апих из глобального скоупа.
Сегодня я потратил часов 5 выясняя из стектрейса на 2 страницы(Не стебусь, реально 2) почему у меня в fetch нет метода catch.
Угадали? Верно, потому что fetch - это имя переменной, а не функция из globalThis. Вот зла не хватает, когда подобное видишь.
Назови человек переменную fetchFx, я бы не перелопачивал исходники jsdom и ещё 3 библитек, которые используются в тестах.
Поберегите психическое здоровье своих коллег из команды. Они знают где вы живёте.
Сегодня я потратил часов 5 выясняя из стектрейса на 2 страницы(Не стебусь, реально 2) почему у меня в fetch нет метода catch.
Угадали? Верно, потому что fetch - это имя переменной, а не функция из globalThis. Вот зла не хватает, когда подобное видишь.
Назови человек переменную fetchFx, я бы не перелопачивал исходники jsdom и ещё 3 библитек, которые используются в тестах.
Поберегите психическое здоровье своих коллег из команды. Они знают где вы живёте.
😁14❤1👍1🤬1🤮1
Не думай о хорошем
Прошла неделя с момента кривого ютуба(https://news.1rj.ru/str/xavescor_code/44) и я начинаю подозревать, что мартышки повсюду. Потому что зачем планировать то как код будет работать в нештатной ситуации? Внезапно, код может упасть или ещё что-то подобное. К примеру, еикто в тестах не думает насколько удобно работать с упавшим тестом. А поэтому никто не чистит за собой ресурсы.
Если вы в тестах не пишите
при работе с ресурсами, то у вас проблемы. Потому что иначе у вас ресурсы будут утекать. Есть, конечно, https://github.com/tc39/proposal-explicit-resource-management, но когда оно появится?
Прошла неделя с момента кривого ютуба(https://news.1rj.ru/str/xavescor_code/44) и я начинаю подозревать, что мартышки повсюду. Потому что зачем планировать то как код будет работать в нештатной ситуации? Внезапно, код может упасть или ещё что-то подобное. К примеру, еикто в тестах не думает насколько удобно работать с упавшим тестом. А поэтому никто не чистит за собой ресурсы.
Если вы в тестах не пишите
const finalizers = [];
try {
doSmth();
} finally {
finalizers.forEach(f => f());
}
при работе с ресурсами, то у вас проблемы. Потому что иначе у вас ресурсы будут утекать. Есть, конечно, https://github.com/tc39/proposal-explicit-resource-management, но когда оно появится?
Telegram
Андруша пишет код
Когда у меня в очередной раз отваливается сафари с утечкой памяти на ютубе мне всегда хочется посмотреть на тех людей, кто говорит, что фронт - это просто и любая макака справится.
Походу в гугле только макаки и работают.
Для воспроизведения достаточно…
Походу в гугле только макаки и работают.
Для воспроизведения достаточно…
👍2
За последние 3 дня я столкнулся с двумя ситуациями:
- gulp.watch - штука которая смотрит за ФС, но, внезапно, криво размонтируется в тестах. Из-за чего в 3 из 4 случаев у меня тесты падают в случайном месте. Просто из-за кривого размонтирования. Никогда не чистите так за собой. https://github.com/XaveScor/gulp/blob/dad4fde180bdeeaa8da0de9c8cd3598af97ea67b/test/watch.mjs#L44
- Работа с сетью - аналогичная штука. Но тут ситуация серьёзнее. Из-за того что некоторые веб сервисы могут быть недоступны, то приходится навешивать retry. Из-за чего при падении теста код не доходит до освобождения ресурсов и на всё время прогонки тестов я получаю утечку. Из-за чего тесты опять же выпадают в ООМ или в другую ошибку.
Не будь макакой - думай и о плохом.
- gulp.watch - штука которая смотрит за ФС, но, внезапно, криво размонтируется в тестах. Из-за чего в 3 из 4 случаев у меня тесты падают в случайном месте. Просто из-за кривого размонтирования. Никогда не чистите так за собой. https://github.com/XaveScor/gulp/blob/dad4fde180bdeeaa8da0de9c8cd3598af97ea67b/test/watch.mjs#L44
- Работа с сетью - аналогичная штука. Но тут ситуация серьёзнее. Из-за того что некоторые веб сервисы могут быть недоступны, то приходится навешивать retry. Из-за чего при падении теста код не доходит до освобождения ресурсов и на всё время прогонки тестов я получаю утечку. Из-за чего тесты опять же выпадают в ООМ или в другую ошибку.
Не будь макакой - думай и о плохом.
👍2
Forwarded from © Как его там… (Dmitry Remezov)
#tip
В TS variadic functions можно выражать через tuple
Раньше для типизации функции с переменным количеством аргументов нужно было писать километровые портянки перегрузок.
С энных версий (уже довольно давно) у нас есть типизация таплов и рекурсивные типы, не пишите портянки.
В TS variadic functions можно выражать через tuple
Раньше для типизации функции с переменным количеством аргументов нужно было писать километровые портянки перегрузок.
С энных версий (уже довольно давно) у нас есть типизация таплов и рекурсивные типы, не пишите портянки.
👍7👀1
Андруша пишет код
Давайте поиграем в игру: В опенсорс сообществе есть человек, который пилит огромное количество библиотек: https://www.npmjs.com/~sindresorhus Около двух лет назад он понял, что commonjs мёртв и нужно поддерживать только esm: https://gist.github.com/sindr…
Синдерхорнус продолжает ультовать.
https://sindresorhus.com/blog/goodbye-nodejs-buffer
95% статьи я поддерживаю. Там описаны супер граммотные идеи. К примеру: в еслинте запрещаем использование нодового Buffer, чтобы потом постепенно переписать на стандарт. Но блин, его кардинальность "ломаем обратку в либах" - это нечто.
Хотя, форкнув галп, я всё больше и больше понимаю Хорнуса. Апихи ноды спроектированы оочень плохо. Всё в ноде, что не покрыто стандартами от W3C сделаны чужими для хищников. Но об этом чуть позже.
https://sindresorhus.com/blog/goodbye-nodejs-buffer
95% статьи я поддерживаю. Там описаны супер граммотные идеи. К примеру: в еслинте запрещаем использование нодового Buffer, чтобы потом постепенно переписать на стандарт. Но блин, его кардинальность "ломаем обратку в либах" - это нечто.
Хотя, форкнув галп, я всё больше и больше понимаю Хорнуса. Апихи ноды спроектированы оочень плохо. Всё в ноде, что не покрыто стандартами от W3C сделаны чужими для хищников. Но об этом чуть позже.
Sindresorhus
Goodbye, Node.js Buffer
It's time to move from Buffer to Uint8Array.
👀2
https://dev.to/muhammadazfaraslam/highlight-on-the-new-features-of-next-js-14-config-2023-4lbe
Главное впечатление от прошедшей конфы некста на фото.
Всё время люди работали над разделением зон ответственности и упрощении каждой из частей, а тут на - всё в перемешку. Мало того, что альфа версию реакта используют. Мало того, что используют недокументированные возможности реакта. А тут ещё и такая дичь. Nextjs - становится, если не стал, очень большой занозой.
Главное впечатление от прошедшей конфы некста на фото.
Всё время люди работали над разделением зон ответственности и упрощении каждой из частей, а тут на - всё в перемешку. Мало того, что альфа версию реакта используют. Мало того, что используют недокументированные возможности реакта. А тут ещё и такая дичь. Nextjs - становится, если не стал, очень большой занозой.
👍7🆒3🦄3🥰1
Для меня, как для фронтенд разработчика, очень просто воспринимать компании на рынке:
- Apple - делает отличные ноутбуки для моей работы. Но ужастные для домашнего использования
- Google - прекрасный ютуб, который мне помог своими видео в начале моей карьеры. Остальными сервисами не пользуюсь
- JetBrains - отличные IDE на любой вкус
и так далее.
Но в этом списке есть одна компания, которая одновременно несёт добро в этот мир, которое сделано максимально через задницу.
Это компания Microsoft. По какой-то непонятной причине сотрудники этой компании живут так, как будто завтра апокалипсис.
1. Давай глянем как MS покупает компании. Например: В 2020 году купила npmjs.com. Хорошая новость? Да, npm начал конкурировать с ярном и, сейчас, с pnpm. Одни плюсы. Но публичную деятельность npm решили вести максимально дибильно. После покупки все анонсы(blog.npmjs.org) падают в блог гитхаба. Пробовали ли вы что-то искать в блоге гитхаба? Это просто неиндексируемая помойка из всего что принадлежит MS. Пользоваться этим стало на порядок менее удобно. Аналогично произошло с Mono(опенсорс рантайм для дотнета).
2. Давай посмотрим как MS ведёт разработку своих языков: C#, F#, TypeScript. Знаете что у них общего? У них нет общей спецификации. И если у C# есть хотя бы дельты, благодаря которым можно жить, то у остальной двойки полная задница - ты не можешь просто реализовать компилятор этих языков. До войны JetBrains делилась какой ад им приходится проходить, чтобы понять что есть в тайпскипте: https://www.youtube.com/watch?v=qddYQL5-rZY. Спойлер: они читают все исходники, потому что других мест для получения информации нет.
3. MS и опенсорс = ❤. Ну, вроде и так. Начиная с .Net Core Майки очень много вещей вынесли на общее обозрение. Но в чём может быть тут косяк? Ну... К примеру, если ты запрещаешь использовать опенсорсный дебаггер к дотнету вне своих продуктов. https://github.com/dotnet/core/issues/505
- Apple - делает отличные ноутбуки для моей работы. Но ужастные для домашнего использования
- Google - прекрасный ютуб, который мне помог своими видео в начале моей карьеры. Остальными сервисами не пользуюсь
- JetBrains - отличные IDE на любой вкус
и так далее.
Но в этом списке есть одна компания, которая одновременно несёт добро в этот мир, которое сделано максимально через задницу.
Это компания Microsoft. По какой-то непонятной причине сотрудники этой компании живут так, как будто завтра апокалипсис.
1. Давай глянем как MS покупает компании. Например: В 2020 году купила npmjs.com. Хорошая новость? Да, npm начал конкурировать с ярном и, сейчас, с pnpm. Одни плюсы. Но публичную деятельность npm решили вести максимально дибильно. После покупки все анонсы(blog.npmjs.org) падают в блог гитхаба. Пробовали ли вы что-то искать в блоге гитхаба? Это просто неиндексируемая помойка из всего что принадлежит MS. Пользоваться этим стало на порядок менее удобно. Аналогично произошло с Mono(опенсорс рантайм для дотнета).
2. Давай посмотрим как MS ведёт разработку своих языков: C#, F#, TypeScript. Знаете что у них общего? У них нет общей спецификации. И если у C# есть хотя бы дельты, благодаря которым можно жить, то у остальной двойки полная задница - ты не можешь просто реализовать компилятор этих языков. До войны JetBrains делилась какой ад им приходится проходить, чтобы понять что есть в тайпскипте: https://www.youtube.com/watch?v=qddYQL5-rZY. Спойлер: они читают все исходники, потому что других мест для получения информации нет.
3. MS и опенсорс = ❤. Ну, вроде и так. Начиная с .Net Core Майки очень много вещей вынесли на общее обозрение. Но в чём может быть тут косяк? Ну... К примеру, если ты запрещаешь использовать опенсорсный дебаггер к дотнету вне своих продуктов. https://github.com/dotnet/core/issues/505
YouTube
Эволюция TypeScript: язык и IDE (Андрей Старовойт, старший разработчик WebStorm)
TypeScript продолжает набирать популярность и осуществлять мечту JavaScript-разработчиков о языке с развитой системой типов и знакомым синтаксисом.
Я расскажу, как развивалась система типов в TypeScript и как это повлияло на то, какие возможности в поддержке…
Я расскажу, как развивалась система типов в TypeScript и как это повлияло на то, какие возможности в поддержке…
❤3
Так чего же я пригорел? Да от пункта #2. Typenoscript прекрасный язык, которым невозможно пользоваться полноценно, так как весь опыт передаётся только из уст в уста. Так же как и 20тыс. лет до нашей эры.
Простая задача: нужно затипизировать обёртку над либой отправки запросов: https://www.typenoscriptlang.org/play?#code/C4TwDgpgBACghgJzgWwM5QLxQN4CgoFQISpgD2AdqhACrgQBcUA5AFaqXNQA+LARgBsyfZgG5cAX1y5QkKAFk4AawgAlCAEcAriWDrgWhBTqQAPOtKVqJiAD5MUC+Sq16UCAA9gECgBN0bBwUzPiEAPxQqMAIAJYUAOahBExOVq5ynt5+AYLCXEmEBBEAQkJ8UAWFTBQQAG4QCOK4vhAAxgKI0ABmWhStwDGUUMjKapo6UQAUYEzwSGgAlEyKKurauvqGxvSmcyioANrMxJYuNswAurZNrVbAUB4OI6vjupPYJ87W9EyBnBILURQAD0wMi0TiiVuVHuICeozWE2A70+aRsv1yIgBQNBUFKwiAA
Как исправить, чтобы вывод типов работал верно?Для этого тебе надо знать, что нужно зафиксировать тип аргумента с помощью дженерика `foo<T extends Params>(arg: T)` и тогда можно будет работать с конкретным типом, а не с его общим описанием. https://www.typenoscriptlang.org/play?#code/C4TwDgpgBACghgJzgWwM5QLxQN4CgoFQISpgD2AdqhACrgQBcUA5AFaqXNQA+LARgBsyfZgG5cAX1y5QkKAFk4AawgAlCAEcAriWDrgWhBTqQAPOtKVqJiAD5MUC+Sq16UCAA9gECgBN0bBwUzPiEAPxQqMAIAJYUAOahBExOVq5ynt5+AYLCXEmEBBEAQkJ8UAWFTBQQAG4QCOK4vhAAxgKI0ABmWhStwDGUUMjKapo6UaYw7l4+-rCIKKi2ABRgTDAAlEyKKurauvqGxvRTANrMxJYuNswAurZNrVbAUB4OI3vjuivYV87WehMQKcCSbURQAD0kMi0TiiWeVFeIA+o32E2Av3+aRswNyIjBEOhUFKwiAA
Откуда это узнать? Ну, поспрашивай. Чо, впервые что ли? Может система типов и мощная, но черезчур черезжопная.
Простая задача: нужно затипизировать обёртку над либой отправки запросов: https://www.typenoscriptlang.org/play?#code/C4TwDgpgBACghgJzgWwM5QLxQN4CgoFQISpgD2AdqhACrgQBcUA5AFaqXNQA+LARgBsyfZgG5cAX1y5QkKAFk4AawgAlCAEcAriWDrgWhBTqQAPOtKVqJiAD5MUC+Sq16UCAA9gECgBN0bBwUzPiEAPxQqMAIAJYUAOahBExOVq5ynt5+AYLCXEmEBBEAQkJ8UAWFTBQQAG4QCOK4vhAAxgKI0ABmWhStwDGUUMjKapo6UQAUYEzwSGgAlEyKKurauvqGxvSmcyioANrMxJYuNswAurZNrVbAUB4OI6vjupPYJ87W9EyBnBILURQAD0wMi0TiiVuVHuICeozWE2A70+aRsv1yIgBQNBUFKwiAA
Как исправить, чтобы вывод типов работал верно?
Откуда это узнать? Ну, поспрашивай. Чо, впервые что ли? Может система типов и мощная, но черезчур черезжопная.
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.
🤡2💯1
Новый State of React: https://stateofreact.com/en-US
Подобный опрос маловероятно что поможет авторам реакта, в отличии от state of js или state of css, на которые смотрят разработчики спек, так как реакт что-то и пилит внутри, но версия 18.2.0 уже почти полтора-два года с нами без изменений.
Но все state of * - прекрасный способ держать руку на пульсе того, что происходит в тусовке той или иной технологии. Так что даже если разрабы реакта не смотрят на результаты, то всё равно этот опрос стоит пройти. Как минимум чтобы не пропустить что-то мимо себя.
Подобный опрос маловероятно что поможет авторам реакта, в отличии от state of js или state of css, на которые смотрят разработчики спек, так как реакт что-то и пилит внутри, но версия 18.2.0 уже почти полтора-два года с нами без изменений.
Но все state of * - прекрасный способ держать руку на пульсе того, что происходит в тусовке той или иной технологии. Так что даже если разрабы реакта не смотрят на результаты, то всё равно этот опрос стоит пройти. Как минимум чтобы не пропустить что-то мимо себя.
👍5🤡4💩1
https://blog.cloudflare.com/post-mortem-on-cloudflare-control-plane-and-analytics-outage/
Тут тихой сапой мистер Интернет показал классику: ты можешь быть самым-самым крутым, но уборщица, нанятая за копейки, порушит всю инфраструктуру.
Из хорошего: ребята не скрываются и публично показывают в чём не правы.
Из идиотизма:
- О, у нас 3 ДЦ, но мы тестить на оффлайн будем только 2 из них. А один - ну и тестировать смысла нет. Всё равно всё ляжет.
- Они как-то смогли получить Tier III сертификацию на этот сервак
- Почти половина статьи является обсасыванием какие поставщики электичества идиоты, а не CF построили кривую архитектуру.
До потери Яндексом дата центра в Финляндии, Яша каждую неделю устраивали учения по отстреливанию одного ДЦ, при котором для пользователя должно измениться НИЧЕГО. Весь Яндекс должен иметь возможность жить на 3х датацентах из четырёх. И каждое учение было неплохим таким стрессом. Не особо помню, но вроде как они проводились все по вторникам(не уверен в корректности памяти) каждую неделю, поэтому можете не удивляться, что сервисы Яндекса в основном падали в эту дату. Можете проверить новости)
Но только где Яндекс и где Cloudflare?
Ну ладно, зато новость для того, чтобы проснуться, хорошая. Не ожидаешь подобного от людей, на которых буквально держится весь интернет
Тут тихой сапой мистер Интернет показал классику: ты можешь быть самым-самым крутым, но уборщица, нанятая за копейки, порушит всю инфраструктуру.
Из хорошего: ребята не скрываются и публично показывают в чём не правы.
Из идиотизма:
- О, у нас 3 ДЦ, но мы тестить на оффлайн будем только 2 из них. А один - ну и тестировать смысла нет. Всё равно всё ляжет.
- Они как-то смогли получить Tier III сертификацию на этот сервак
- Почти половина статьи является обсасыванием какие поставщики электичества идиоты, а не CF построили кривую архитектуру.
До потери Яндексом дата центра в Финляндии, Яша каждую неделю устраивали учения по отстреливанию одного ДЦ, при котором для пользователя должно измениться НИЧЕГО. Весь Яндекс должен иметь возможность жить на 3х датацентах из четырёх. И каждое учение было неплохим таким стрессом. Не особо помню, но вроде как они проводились все по вторникам(не уверен в корректности памяти) каждую неделю, поэтому можете не удивляться, что сервисы Яндекса в основном падали в эту дату. Можете проверить новости)
Но только где Яндекс и где Cloudflare?
Ну ладно, зато новость для того, чтобы проснуться, хорошая. Не ожидаешь подобного от людей, на которых буквально держится весь интернет
The Cloudflare Blog
Post mortem on the Cloudflare Control Plane and Analytics Outage
Beginning on Thursday, November 2, 2023 at 11:43 UTC Cloudflare's control plane and analytics services experienced an outage. Here are the details
👍4🤡2💩1
Страшно, очень страшно мы не знаем что это такое
Самая страшная штука для джунских собесов - это попытка узнать "зачем та или иная щтука нужна". К примеру, "зачем нужен О(N)?"(Поклонники Демидовича, сорян, не про вас. Вам респект).
Я уверен что вы спокойно скажете сколько времени будет выполняться
Чуток отвечёмся: какого кода вы практически никогда не видите в своих редакторах? Что 99% времени свёрнуто и зачастую никто руками не пишет? Верно, импорты.
И как люди спрашивают на собесах "что происходит когда ты вводишь урл в браузере и нажимаешь Enter?", я так же спрошу: "Что происходит в программе, когда вы пишете import или require?"
Ответ:выполняется абсолютно весь код, включая все реэкспорты(даже те которые не нужны), который подключается в текущий модуль. И чем больше там кода, тем дольше будет происходить инициализация приложения.
По этой причине реэкспорты внутри приложений - это зло. По этой причине написание юнит тестов поверх тяжёлых штук - это зло. По этой же причине забивать на граф зависимостей в приложении - это зло. Потому что внезапно может оказаться, что из-за одного криво написанного импорта все тесты в приложении начинают работать не 10s на всё, 250s на всё после чего жить становится невозможно.
Поэтому в PR'ах не стоит забивать на безобидный
Самая страшная штука для джунских собесов - это попытка узнать "зачем та или иная щтука нужна". К примеру, "зачем нужен О(N)?"(Поклонники Демидовича, сорян, не про вас. Вам респект).
Я уверен что вы спокойно скажете сколько времени будет выполняться
new Map().set(), Array.prototype.filter, Array.prototype.sort. И это правильно, потому что надо понимать как работает твоя платформа, чтобы писать простой и предсказуемый код. Чуток отвечёмся: какого кода вы практически никогда не видите в своих редакторах? Что 99% времени свёрнуто и зачастую никто руками не пишет? Верно, импорты.
И как люди спрашивают на собесах "что происходит когда ты вводишь урл в браузере и нажимаешь Enter?", я так же спрошу: "Что происходит в программе, когда вы пишете import или require?"
Ответ:
По этой причине реэкспорты внутри приложений - это зло. По этой причине написание юнит тестов поверх тяжёлых штук - это зло. По этой же причине забивать на граф зависимостей в приложении - это зло. Потому что внезапно может оказаться, что из-за одного криво написанного импорта все тесты в приложении начинают работать не 10s на всё, 250s на всё после чего жить становится невозможно.
Поэтому в PR'ах не стоит забивать на безобидный
import {} from 'large_module'. Возможно, эта строка в случайном месте сломает вам весь CI лучшем случае, и продакшен в худшем.👍10💩1
https://eslint.org/blog/2023/10/deprecating-formatting-rules/
Ещё чуть-чуть и вопрос автоформатирования кода будет решён. Ну, я надеюсь на это.
Ещё чуть-чуть и вопрос автоформатирования кода будет решён. Ну, я надеюсь на это.
eslint.org
Deprecation of formatting rules - ESLint - Pluggable JavaScript Linter
A pluggable and configurable linter tool for identifying and reporting on patterns in JavaScript. Maintain your code quality with ease.
👍4💩1
https://groups.google.com/a/chromium.org/g/blink-dev/c/RG0oLYQ0f2I/m/xMSdsEAzBwAJ
Third-party куки уже почти-почти всё. В 2024 году будет веселье.
Third-party куки уже почти-почти всё. В 2024 году будет веселье.
👍4💩1
Насколько преждевременная оптимизация - плохая идея.
https://twitter.com/BrendanEich/status/1271954691421691905?s=20
Планировали похожесть на джаву, а в итоге потомки мучаются с null и undefined.
Пысы: это автор js.
https://twitter.com/BrendanEich/status/1271954691421691905?s=20
Планировали похожесть на джаву, а в итоге потомки мучаются с null и undefined.
Пысы: это автор js.
❤6🤡2💩1
А вот и новый ts5.3. Хоть это и проходняк. Особо вкусных вещей нет
https://devblogs.microsoft.com/typenoscript/announcing-typenoscript-5-3/
https://devblogs.microsoft.com/typenoscript/announcing-typenoscript-5-3/
Microsoft News
Announcing TypeScript 5.3
Today we’re excited to announce the release of TypeScript 5.3! If you’re not familiar with TypeScript, it’s a language that adds type syntax to JavaScript to bring type-checking. Type-checking can catch all sorts of issues like typos and forgetting to check…
💩3🔥2