Блог Lead JS-разработчика из Хельсинки Автор: @bekharsky По рекламе: https://telega.in/channels/htmlshit/card?r=GLOiHluU или https://t.me/it_adv Чат: https://t.me/htmlshitchat
#фишка дня
Когда-то давно я слышал о таком свойстве, как text-align-last.
Что оно делает? Ну, думаю, всё понятно из иллюстрации :)
Работает с последней строкой индивидуально, позволяя сделать более приятные глазу переходы текста, соответствующие остальной стилистике. Вот хорошая статья на тему: https://www.stefanjudis.com/today-i-learned/how-to-align-the-text-of-the-last-paragraph-line/
С интерактивным примером, как вы любите.
Почему я акцентировал на нём внимание?
Да просто я знал о нём ещё тогда, когда оно толком нигде не поддерживалось. Вот в IE работало, буквально, а в Chrome нет. И как-то все на него забили в итоге.
В этом есть небольшая беда так нами любимых «the future CSS tip». Наиграешься, разочаруешься, и забудешь :(
Но есть же наш уютный канальчик, мы тут всё вспомним :)
#css #thefuturepast #бородач
#фишка дня
Является ли CSS языком программирования?
Тьюринг-полным — нет. Но CSS — де-факто — это декларативный язык описания интерфейсов, и развитие его идёт в этом направлении довольно чётко.
Впрочем, fizzbuzz на CSS решается даже слишком элегантно: https://codepen.io/SachaG/pen/nwazRo
Так вот, к чему это я. Вы вообще в курсе, что в CSS есть типы? А они есть. И на их основе можно реализовать некоторые математические функции.
Тригонометрические вон завезли недавно, а математические пока только в Safari.
Давайте попробуем исправить это недоразумение и реализуем abs
, floor
, round
, ceil
, mod
и rem
на CSS и его типах. Начнём с модуля:--abs: max(var(--a), -1*var(--a));
Поняли, что тут произошло? Выбрали максимальное между a и -a. Очевидно, что положительное всегда будет максимальным, его и берём.
Теперь к сути дела. Давайте реализуем round
:@property --round {
;
syntax: '<integer>';
initial-value: 0;
inherits: false
}--round: var(--a);
Вот щас может стать немножечко больно: мы объявили переменную (custom property, для зануд) --round
и указали CSS, что её тип — целое число. Теперь браузер возьмёт и... и округлит значение математически при присваивании (опять для зануд: да, это де-факто присваивание).
А как сделать floor
— округление вниз? Как-как:--floor: calc(var(--a) - .5);
А ceil
— округление вверх? --ceil: calc(var(--a) + .5);
Естественно, перед этим надо объявить переменные --floor
и --ceil
как целые числа.
Кажется, уже стало немного больно, поэтому получение знака числа и двух разных остатков по делению реализуем потом.
Пока можете подумать, где это применить 😉
#css #types #бородач
Узнайте, как сделать ваш сайт быстрее и безопаснее, на бесплатном курсе Base cloudfort
Вас ждут 8 уроков с теорией и практикой, где опытные эксперты поделятся своими кейсами и реальными примерами. Обучение будет проходить в формате видеолекций и общения с преподавателями в чате, так что у вас всегда будет поддержка и ответы на вопросы.
Что вы изучите:
— Ускорение сайтов и защиту от DDoS-атак.
— Основы CDN и методы балансировки нагрузки.
— Принципы работы с медиахранилищем и адаптацией медиаконтента.
— Как запустить онлайн-трансляцию без лишних затрат.
Участники также получат бесплатный доступ к новому продукту cloudfort для защиты и ускорения сайтов. Сервис позволяет создавать S3-хранилища, ускорять веб-ресурсы и включать защиту от кибератак.
Регистрируйтесь на курс по ссылке.
Реклама ПАО «ВымпелКом», beeline.ru
erid: LjN8K9NV5
#заметка дня
Делаешь задачу, наступает конец дня, но осталось совсем чуток? Несчастные 10%?
Отлично, закрывай ноутбук и иди домой. Или спать. Или домой спать. Или не домой.
Да, в текущем моменте это покажется, мягко говоря, так себе затеей, зато следующий день можно начать с лёгкой победы. Бодрит получше, чем кофе.
И настроение твоё улучшится.
#такое дня
Полку способов центровки элемента относительно родителя прибыло!inset-area: center;
Нашёл это Темани Афиф aka CSS Challenges и суть-то в следующем: inset-area это часть CSS Anchor Positioning API для поповеров (извините, слово смешное просто. popover, конечно же): https://developer.chrome.com/blog/anchor-positioning-api
То есть предназначено оно чтобы прибить всплывающее нечто к центру элемента. Но каким-то образом протекло наружу.
Демо: https://codepen.io/t_afif/pen/OJYwybK
Обсуждение: https://github.com/w3c/csswg-drafts/issues/10500
TL;DR: не надо это использовать, это просто курьёз, не более.
#css #vertical #center
📚 Здесь собраны все вопросы, которые могут спросить на собеседовании. Теперь можно легко получить оффер, подготовившись к самым популярным вопросам. Просто выбери своё направление:
1. Frontend / JavaScript
2. Python
3. Java
4. Тестировщик QA
5. Data Science
6. DevOps
7. C#
8. С/C++
9. Golang
10. PHP
11. Kotlin
12. Swift
#заметка дня
Итак, ты хочешь использовать Tanstack (React) Query для запроса данных, но хочешь делать это по-запросу, а не декларативно?
Ни слова больше! Используй useMutation, даже если это контр-интуитивно. Мутации — они по своей природе императивные, их нужно вызывать ручками в нужный момент.
Вот только есть один нюанс: мутацию — опять же, по-определению — нельзя отменить. Если требование изменений ушло на сервер — слишком много телодвижений нужно, чтобы его отменить.
А мне надо было, стояла задача подключаться к источникам данных, но иметь возможность это подключение (или несколько) прекратить в любой момент без создания, собственно, токена.
А вот запрос — отменить можно. Прямо в документации: или посылая AbortSignal, или вызывая соответствующий метод клиента, cancelQueries, по ключу запроса.
С мутацией сильно больше телодвижений.
Кстати, вы же в курсе, что ключи действуют как wildcard? todo среагирует и на todo-1, и на todo-2 и так далее. Это не самая очевидная вещь.
Ладно, но всё же, как вызвать запрос императивно?
Очень просто: комбинацией из refetch и параметра enabled в конфигурации хука:
useQuery<TokenResponse>({
enabled: false,
retry: false,
refetchOnReconnect: false,
refetchOnWindowFocus: false,
refetchInterval: false,
queryKey: ['connecting', dsId, connectionKey],
queryFn: async ({ signal }) => {
signal?.addEventListener('abort', cancelConnection);
...
}
});
const {
data: profile,
refetch: startConnection,
connectionStatus,
isFetching: isFetchingConnection,
isError,
} = useConnect(dataSource, ...);
#молния дня
Итак, если вы используете для своих проектов сервис polyfill.io — время прямо сейчас прекратить это делать.
И причина проста: "В библиотеку, загружаемую на сайты через домен cdn.polyfill.io, был встроен вредоносный код, перенаправляющий пользователя на мошеннические сайты (например, googie-anaiytics.com), букмекерские конторы и online-казино."
Источник цитаты: https://www.opennet.ru/opennews/art.shtml?num=61440
Теперь подробнее.
Сервис Polyfill предназначен для автоматической загрузки кода, дополняющего старые браузеры новыми возможностями JavaScript (ES6+) и DOM API.
Полифиллов, короче, кто бы мог подумать.
И новый владелец — китайская компания Funnull — решил рандомно вставлять редиректы на рекламные сайты и онлайн-казино.
Делая вид, что так и надо.
Самое интересное в этом то, что сама библиотека-то вполне себе Open Source: https://github.com/polyfillpolyfill/polyfill-service
И хостить её можно где угодно. Так что проблемным оказался сам сервис.
Новый владелец старательно удаляет issue с подозрениями: https://web.archive.org/web/20240229113710/https://github.com/polyfillpolyfill/polyfill-service/issues/2834
Если вам Polyfill всё ещё необходим, можно воспользоваться вариантами библиотеки, распространяемыми компаниями Fastly и Cloudflare.
Вообще, случай далеко не первый. Я рад за прежнего владельца и создателя, жизнь себе он обеспечил, но не рад за всех остальных.
#scam #polyfill
Доклады, развлечения и полезные знакомства для ИТ-сообщества Казани ☄️
13 июля в Казани пройдет масштабный ИТ-фестиваль «Сезон кода». Это большое летнее мероприятие от Т-Банка для опытных специалистов по Java, Scala, Mobile, QA и Data в Татарстане.
Залетайте, чтобы прокачать навыки и пообщаться с коллегами в неформальной обстановке. Вот что вас ждет:
— доклады от экспертов из крупных технологичных компаний: T-Банк, VK, Сбер и Magnit Markett;
— полезные знакомства, много общения и обмен опытом со специалистами других компаний;
— ИТ-квиз, диджитал-игра на преодоление препятствий и настольная игра «Спринт или пропал» от инженеров Т-Банка;
— спортивные активности: настольный теннис и баскетбол;
— живая музыка и вечеринка.
📌 Получите билеты за благотворительный взнос от 1000 рублей.
erid:2VtzqvrFWw1
Реклама. АО "Тинькофф Банк", ИНН 7710140679, лицензия ЦБ РФ № 2673
#тип дня
Четыре ночи провёл в деревне в глубинной Финляндии и возвращаться в привычный режим очень и очень тяжело.
Прыжки со скалы просто так не проходят.
Здесь отмечают день солнцестояния. Официальный выходной, плюс многие компании добавляют ещё один день — канун. Из города уезжают вообще все, пустота.
В общем, тип дня от Кори Хауса: как указать TypeScript, что поле принимает любое строковое значение, но при этом получить автоподсказку для наиболее часто используемых из них?
Очень просто:
type Status = 'open' | 'closed' | string & {}
type Status = 'open' | 'closed' | Omit<string, "open" | "closed">
#фишка дня
В iOS Safari есть такая фишка: при удерживании пальца на, например, ссылке появляется всплывающее окошко с её предпросмотром. Но иногда это вообще не к месту, потому надо бы найти способ отключить.
Как всегда, способ этот не очень-то стандартный. Спасибо, Apple, чо.
#safari #callout #бородач
#ссылка дня
Я и подумать не мог, сколько в моей работе времени будет отдано обсуждению различных фич продукта.
Когда я был частью веб-студии/галеры, мы просто дубасили по готовому дизайну и техзаданию (когда таковое было, *звук горьких слёз*), не особо задумываясь, почему было принято то или иное решение. В лучшем случае можно было пост-фактум указать на проблему.
В продуктовой же компании дела обстоят чуть-чуть иначе. Если ты на уровне senior, от тебя ожидают не только и не столько дубасить код, сколько понимать принципы работы продукта и быть готовым защищать решения по бизнес-логике или взаимодействию с клиентом.
Количество Google Docs- и вики-материалов в такой работе зашкаливает. Вопросы «почему?» и «зачем?», повторяемые раз за разом… Метрики.
Отсюда интересно посмотреть, что же творится в других компаниях. И тут — на удивление — Microsoft нам такую возможность даёт. Теперь можно взглянуть на каталог explainers (сопровождающих документов, документации, расшифровывающих заметок) браузера Edge: https://github.com/MicrosoftEdge/MSEdgeExplainers
Почему что-то является проблемой? Как выявили? Почему было принято то или иное решение? Как команда объяснила себе какие-то новые концепты? Какой состав команды? И так далее.
Довольно погружающее чтиво. Особенно в разделе про DevTools, на которые разработчики Edge в принципе делают упор (да-да, я в курсе, что там тот же Chromium, но дело же в мелочах).
#docs #explainers #process #бородач
#баг дня
Разработчики спецификации:
— Вот вам предложение ввести нативный нестинг в CSS!
Разработчики браузеров:
— Мы сделали вам нативный нестинг в CSS!
Разработчики сайтов:
— Гляди, рендер одного слова занимает пять секунд
Кроме шуток, это действительно интересная проблема. Довольно больно.
Давайте посмотрим на этот пример: https://crisal.io/tmp/lots-of-nesting.html
На моей машине рендерится за 5.4 секунды. MacBook Pro M2 13", Chrome 126.0.6478.63
Safari вылетает и на ноутбуке, и на iPhone.
Firefox показывает кривые данные, но тоже близко к 5 секундам.
Вот ссылка на GitHub issue: https://github.com/w3c/csswg-drafts/issues/2881#issuecomment-1642450622
Проблема нестинга в том, что число комбинаций селектров растёт экспоненциально. И вроде бы понятно, что надо включать мозг, но...
...но делитесь вашими бенчмарками, котаны :)
#css #nesting #bug
#инструмент дня
Продолжаем инструментальную неделю :)
после поглощения VMWare компанией Broadcom, VMWare Fusion Pro (MacOS) и VMware Workstation (Win/Linux) стали бесплатными для индивидуального использования
Думаю, многие знают, что это за инструмент, но если вкратце — средство виртуализации для винды/мака с понятным GUI и уж точно на несколько порядков лучше VirtualBox.
Учитывая, что VirtualBox для macOS на M-процессорах работает максимально плохо...
Нопридется регистрировать учетную запись в Broadcom (для РФ только через VPN).
Заметка о выпуске:
https://blogs.vmware.com/teamfusion/2024/05/fusion-pro-now-available-free-for-personal-use.html
#virtualization #vmware #virtualbox
Хватит терять время на уже готовый код!
Frontend Trends — библиотека фронтендера, где собраны готовые CodePen решения для ежедневных задач. Эффекты при наведении, 3D-анимации, готовые карточки и др.
Зашли – сохранили – применили в своём проекте. Пользуйтесь: @trends_frontend
Ещё вчера они отвечали за код и технологии, а сегодня в их подчинении специалисты, к которым никто не приложил инструкцию.
Да, быть начинающим управленцем в IT — рискованно, но интересно. Открывается много новой информации и определений.
Насчёт определений — в карточках собрали несколько ключевых, которые познакомят вас с профессией руководителя в IT поближе. А по поводу новой информации: в Практикуме появился курс по управлению командой разработки с воркшопами, личными консультациями и интерактивным учебником.
→ Начните учиться бесплатно
#инструмент дня
Среди моих подписчиков и в дружественных чатах постоянно всплывают вопросы о том, что же такое SVG вообще и кривые в частности. Как с ними работать и какого чёрта они работают не так, как ожидается.
Я уже выкладывал интересный инструмент для понимания процесса создания SVG и его элементов: path, polygon, polyline и т. д. “для самых маленьких”: /channel/htmlshit/392
Пришло время для ещё одного. Этот инструмент позволяет понять создание сегментов кривой по шагам, включая перемещение пера (M), кривые безье (C), дуги (арки, A) и линии (L). Всё раскидано по координатам и уложено в сетку. Можно менять конкретные числа, а можно — подёргать реперные точки мышкой и увидеть изменение кривой.
https://yqnn.github.io/svg-path-editor/
#svg #path #бородач
#расширения дня
Сидишь такой на сайте, и, внезапно, понравилась палитра. Надо бы потырить посмотреть концепцию. Открываешь девтулзы и тихо умираешь от бестолковости представления цветов в переменных...
А ведь почти любой большой проект уже использует CSS-переменные для дизайн-систем и не стесняется.
Но выход есть! И это — расширение Designgui от Джеймса Четвуда.
Пока умеет не особо много: показывает список переменных с цветами, позволяет их менять или экспортировать разом, позволяет сгенерировать ИИ-палитру на основе переданных значений.
А ещё в ней заложена работа с UI-китами и дизайн системами. Пока только Shadcn UI и Daisy UI, но начало положено: все токены на местах.
Думаю, надо делать такое же расширение, но для анимаций... А то вытаскивать их всё сложнее, обмажутся тейлвиндами... ну да ладно.
Ссылка на вебстор Хрома: https://chromewebstore.google.com/detail/design-gui/ldhbojdgokammocadfgbidodgffnimfj?pli=1
#css #var #color #design
AvitoTech продолжает радовать крутым образовательным контентом. На этот раз инженеры подготовили открытый видеокурс по JavaScript.
Два первых урока уже на канале — самое время присоединиться к обучению или, как минимум, добавить в закладки.
На курсе рассмотрены и описаны простым и понятным языком ключевые аспекты JS: сам язык программирования, HTML и CSS. Из первого урока вы узнаете об устройстве современного веба, а из второго — про формирование языка JS. И даже сможете написать свой первый скрипт.
Курс для слушателей любого уровня, но с базовыми знаниями в программировании будет попроще.
#фишка дня
Как узнать, откуда была вызвана интересующая нас функция?
Правильный ответ — воспользоваться дебаггером.
Или console.trace().
Но это не всегда приемлемо. Мне вот нужно было иметь в логах название источника либо часть трассировки.
Если не используется ‘use strict’ (почему, кстати?) можно воспользоваться нестандартным свойством Function.caller:function hello() {
console.log(“caller is " + hello.caller);
}
…или устаревшим arguments.callee.callerfunction hello() {
console.log(“caller is " + arguments.callee.caller.toString());
}
Но это не выведет весь стек и вообще в нормальном коде не сработает. Поэтому, можно красиво схитрить сымытировав ошибку:function Hello() {
console.log(“caller stack”, new Error().stack);
}
Тоже нестандартно, зато как красиво. Оттуда уже можно и имя первого родителя вытащить регуляркой.
#js #caller #error #stack #бородач
#продолжение дня
Если вы ещё не читали вчерашнюю новость про скам и MITM на сервисе Polyfill.io — самое время.
Вот: /channel/htmlshit/2910
Тем временем GitHub стал помечать репозиторий сервиса как вредоносный.
Но, повторю, с кодом-то всё хорошо. Плохо с сервисом :)
🔥Тесты для подготовки к собеседованию🔥
Выбери своё направление:
1. Frontend
2. Python
3. Java
4. Тестировщик QA
5. Data Science
6. DevOps
7. C#
8. С/C++
9. Golang
10. PHP
11. Kotlin
12. Swift
#статья дня
Насколько глубокая вложенность элементов влияет на производительность вашего проекта и влияет ли вообше?
Вот Google Lighthouse утверждает, что влияет. Но так ли это на самом деле?
Коннор проверит
Как хорошо, что у нас теперь есть на это ответ: https://frontendatscale.com/blog/how-deep-is-your-dom/
TL;DR:
1. Ощутимая разница начинается на 500 элементах: плоский список рендерится в два раза быстрее вложенного.
2. Далее расхождение растёт практически линейно и на 5000 элементах мы уже наблюдаем 800 мс для вложенного против 180 мс для плоского. Впрочем, это вырожденный случай.
3. И всё бы ничего, но до этого момента всё обсуждение велось для скелета без стилей, точнее, со встроенными браузерными. Набрасываем ещё немного CSS — и к этой прелесть добавляется 150 мс. Что уже может быть совсем заметно глазу.
Вместо вывода:
Да, 5000 вложенных элементов это редкость, но многие дизайн-системы и UI-киты построены вокруг максимально простой структуры Stack-Row-Col-Element, заставляющей вас создавать лишнюю вложенность. Таких комбинаций на странице могут быть тысячи.
Сама по себе вложенность не является чем-то плохим, но она задаёт базу для пересчёта стилей и JS-операций над DOM, поэтому иногда на это стоит обратить внимание.
#render #performance
#ссылка дня
Уже известный нам Ван Дамм, который Брамус, не так давно присоединился к команде деврелов Google Chrome. В какой роли?
Конечно же в роли евангелиста анимаций по скроллу! Кто бы мог подумать :)
Я уже ссылался на его работы и ранее, но теперь всё серьёзно.
Итак, под брендом Chrome for Developers (это вообще отличный проект, занимающий нишу чуть иную, нежели MDN) Брамус выпустил серию видео для обучения анимаций по скроллу в CSS.
Вот: https://developer.chrome.com/blog/scroll-driven-animations-video-course
Ну или ссылка сразу на плейлист: https://www.youtube.com/playlist?list=PLNYkxOF6rcICM3ttukz9x5LCNOHfWBVnn
И не только обучению, но и паре трюков! Например, определение направления скролла или срабатывание только один раз.
Учитывая, что Scroll Timeline API уже используются даже в Airbnb (пруф), счастливое будущее не за горами!
#css #scroll #animation
Разбираем как решать задачи на LeetCode
✅ Примеры решений
✅ Пояснения
Выбери своё направление:
1. JavaScript
2. Python
3. Java
4. C#
5. C/C++
6. Golang
7. PHP
8. Kotlin
9. Swift
#игра дня
Ну, различного рода лабиринты и Tower Defence на чистом CSS мы видели. Все требуют использования мыши, поскольку по чекбоксам надо кликать.
В принципе, можно и табом с пробелом, но не то...
Итак, встречайте: первая игра на чистом CSS, в которой можно использовать стрелочки с клавиатуры! Автор — Темани Афиф, знакомый нам по CSS-фигурам.
Помоги Марио собрать все монетки!
Построена на использовании Scroll Timeline API и, соответственно, голова Марио — не что иное, как пересечение "лифтов" скроллбаров. И мышью (ну ок, тачпадом) игра проходится даже легче.
https://codepen.io/t_afif/full/OJYbVWP
Делитесь вашими скриншотами с лучшим временем :)
#css #scroll #game
Высокотехнологичная компания YADRO в поиске тех, кто программирует на C и С++ 🔍
Актуальные вакансии:
1️⃣ Software Engineer C/C++
2️⃣ Senior C++ developer/Старший инженер-программист С++
3️⃣ Старший/ведущий инженер-программист встраиваемых интерфейсов
4️⃣ Linux Kernel Developer (Linux/WebUI) /Инженер-разработчик C (risc-V)
Ты сможешь реализовывать себя и стать частью команды специалистов, которые создают технологические решения и инновации мирового уровня.
Что ещё тебя ждёт:
– достойная зарплата (размер обсуждается на собеседовании) и прозрачная система премий;
– обучение за счёт компании: учебный портал с курсами и лекциями от экспертов, дополнительное профессиональное обучение, изучение английского, участие в конференциях;
– возможность учиться у лучших специалистов индустрии, расти в рамках своей роли, а также участвовать во множестве различных проектов;
– личное участие в становлении процессов и продуктов, возможность увидеть результат своей работы;
– большое инженерное сообщество, которое постоянно развивается;
– гибридный или удалённый формат работы;
– ДМС со стоматологией с первого дня, консультации юристов, психологов, экспертов по ЗОЖ и управлению финансами;
– скидки для сотрудников, дополнительные day-off;
– комфортные офисы в Москве, Санкт-Петербурге, Нижнем Новгороде и Минске.
Откликайся по ссылкам и присоединяйся к YADRO!
Где искать работу за рубежом?
Если вы ищете работу за рубежом, то канал Dev & ML Connectable Jobs будет полезен для вас!
Ребята собирают вакансии в международных стартапах с русскоязычными фаундерами и командами, публикуют информацию о бэкграунде фаундеров, размере команды и инвестициях, а также делятся прямыми контактами HR для отклика.
Как результат, десятки читателей получили офферы в Neon, InDrive, 1inch, Wheely, Plata и другие компании.
Несколько актуальных вакансий:
– Frontend Developer в Space307 (remote)
– Senior Frontend Engineer (React) в Bird (remote Нидерланды/Литва)
– Frontend Developer в Emerging Travel Group (remote)
– Middle Frontend Developer в Optimax Dev (Ереван)
Подписывайтесь и развивайте карьеру в будущем единороге!
#инструмент дня
Ну что же... на сегоднящний день никого не надо убеждать, что помимо системных пакетных менеджеров нужны ещё менеджеры под конкретную версию конкретной среды разработки.
Есть проекты, которые написаны под Node 18 и не заработают ни на чём ниже. Есть очень старые проекты (да), которые дай бог под 10 заведутся, но всё ещё нужны.
Я уже молчу о вечнозелёных Bun, Deno... ну и так-то Go, Python и Rust тоже требуют собственную микроинфраструктуру на вашем компьютере, которая может отличаться от версии к версии.
И нет, просто иметь разные бинарники компиляторов/интерпретаторов недостаточно — нужно, как минимум, манипулировать переменными среды и тулчейном.
Если говорить только о Node.js, я долгое время использовал nvm (Node version manager): у меня был проект на Ember.js, который собирался только очень старой нодой, а смысла переводить его на что-то новее не было.
Но потом задачи расширились. На новом (текущем) месте работы бакенд проекта на GAS надо было собирать сначала 12 нодой, потом 16... и только сейчас смогли перевести на 18. А фронтенд того же проекта изначально можно было собирать хоть бета-версией. И всё в рамках одного репозитория. И задачи по всей компании схожие.
Потому мы все разом стали использовать Volta.
Volta могла считывать версию ноды сразу из package.json и всё, магия. Но проект малость забуксовал: как минимум, до сих пор не умеет удалять ненужные установки.
Потому, встречайте: Proto.
Прото — менеджер для множества сред разом: Node.js, Bun, Deno, Python, Rust, Go.
На мобиле их сайт выглядит максимально плохо.
- Установка/удаление сред (в Volta нельзя было удалить Node.js например)
- Атомарное конфигурирование инструментов (каждому свой конфиг)
- Развитая поддержка плагинов
- Активное развитие
- Поддержка WASM-модулей.
Ну и материнский проект — moon — крайне мощный тулчейн и менеджер монорепозиториев как для локальной разработки, так и для CI/CD.
Пробуем?
P. S. А кто пробовал https://asdf-vm.com/?
#tool #nvm #volta
#фишка дня
Если вы любитель открывать кучу вкладок и нелюбитель использовать группы, для вас в Chrome есть прекрасное сочетание клавиш Ctrl-Shift-A или Cmd-Shift-A.
Это список вкладок с поиском! Очень удобная штука. Конечно, надо хоть немного помнить, что ты вообще открывал :)
Я просто к чему это, взглянул на экран «своего» джуна… ужас.
#chrome #feature #search #бородач