Будни разработчика
14.6K subscribers
1.19K photos
350 videos
7 files
2.04K links
Блог Lead JS-разработчика из Хельсинки
Автор: @bekharsky

По рекламе: https://telega.in/channels/htmlshit/card?r=GLOiHluU или https://t.iss.one/it_adv

Чат: https://t.iss.one/htmlshitchat

№5001017849, https://www.gosuslugi.ru/snet/679b74f8dad2d930d2eaa978
Download Telegram
#инструмент дня

Итак, перед вами стоит задача сделать встраиваемый виджет. Любого рода, от плагина дашборда с показателями продаж до интерактивного баннера. Писать нужно быстро, эффективно, поддерживаемо. И чтоб размер поменьше.

Ванильный JS — мелкий размер, но поддерживаемо — вряд ли. React — один только DOM-слой займёт 40kB, Preact — 4kB, уже очень хорошо, Svelte свернётся в 1.6kB, но учить птичий язык шаблонов — это надо иметь причину...

И тут выходит VanJS со своими 0.9kB: https://vanjs.org/

Сразу пример кода:

const Hello = () => div(
p("Hello"),
ul(
li("World"),
li(a({href: "https://vanjs.org/"}, "VanJS")),
),
)

van.add(document.body, Hello())


Максимально нативно и понятно, не правда ли? И логика построения UI сохраняется. Есть управление стейтом, поддержка TS. Не нужно никакой сборки, садись пиши. Прекрасная документация, включая примеры от сообщества!

А его шаблонный движок вообще может быть использован отдельно. Назвали Mini-Van :)

#van #framework #js
👍25🔥31🤡1
#статья дня

Скорее даже заметка от Софии Валитовой о порядке применения трансформаций в CSS, но концентрация знаний зашкаливает. В чём же весь вопрос?

Как вы можете помнить, не так давно все современные движки браузеров стали поддерживать определение трансформаций не только в правиле transform, но и в индивидуальных. То есть:

transform: translateX(20px) rotate(40deg) scale(1.5);

может быть записано как:

translate: 20px;
rotate: 40deg;
scale: 1.5;


Но так ли это на самом деле? И да и нет. В первом случае порядок важен, во втором — нет, он всегда будет translate👉rotate👉scale. И, естественно, повторяющиеся правила будут схлопнуты.

Подробнее — в заметке Софии. Вообще у неё очень много полезного выходит, глубоко копает в спеки.

#css #transform
16👍2🤔1
#такое дня

Thank you CSS!

P. S. соус
😁16👍1💩1
#заметка дня

Наглядное отличие алгебры от теории алгоритмов.

На КДПВ — паттерн и его алгебраическое решение.

В тексте ниже — аналогичный CSS:

li:nth-child(6n+4),
li:nth-child(6n+5),
li:nth-child(6n+6) {
color: red;
}

Выводов не будет, в тред приглашаются математики :)

#бородач
#грусть дня

Умер создатель редактора Vim — Брам Моленар (Bram Moolenaar) 😢

Вот собственно, сообщение его семьи: https://groups.google.com/g/vim_announce/c/tWahca9zkt4

Я использовал Vim много лет и, периодически, и сейчас. Хотелось бы этой грустной новостью напомнить, что это не только бесконечный источник мемов про выход, но и очень хороший редактор.

:wq!
😢46🫡6👍21
This media is not supported in your browser
VIEW IN TELEGRAM
#codepen дня

The next big thing после Scroll-driven animations в CSS это View Transitions.

Когда в предложении английских слов больше, чем русских.

О чем же речь? Ну, представьте себе, что вы сможете задавать элементам анимации не только на прямые воздействия, но и на изменение DOM или смену страницы в браузере. Какой элемент должен уйти совсем, какой — уступить своё место другому. И всё это — в CSS.

Яркий пример такого взаимодействия — сортировка. Благодаря Адаму Аргайлу у нас есть и демонстрация: https://codepen.io/argyleink/pen/rNQZbLr

В браузерах, которые не поддерживают View Transitions, элементы просто поменяют свои места. А в Chrome 111 и выше — с анимацией :)

Имеется статья в блоге разработчиков Хрома, с огромным числом примеров: https://developer.chrome.com/docs/web-platform/view-transitions/

Ну а мы с вами ещё вернёмся к ним, котаны. И сайты будут еще больше похожи на нативные приложения :)

#css #view #transition
👍143
#фишка дня

Давайте сегодня продолжим тему SVG.

Не знаю, скольким из вас вообще известно, как создаются простейшие SVG-анимации заполнения кривой (кстати, скольким?), но, зная длину кривой (контура, path), её заполнение легко можно анимировать.

Примерно вот таким образом: https://codepen.io/alinaki/pen/oNXjEzz?editors=1111

Как узнать длину кривой? Ну это можно посмотеть всё в том же кодпене: circle.getTotalLength().

Но я сегодня не про анимации хочу рассказать, а про более интересный случай использования полученной информации.

Например, как разместить что-либо по контуру кривой? Для простоты, сделаем бусы.

1. Нарисуем окружность.
2. Получим её длину
3. Найдём на окружности 15 равномерно распределённых точек используя getTotalLength getPointAtLength
4. Разместим 15 бусин-кругов по контуру.

Вуаля: https://codepen.io/alinaki/pen/eYPmayO

Такое можно и с текстом провернуть, кто первый? :)

#svg #path #length #бородач
👍7
This media is not supported in your browser
VIEW IN TELEGRAM
#видео дня

Ох какую я вам мякотку нашёл, котаны! Только представьте как было бы круто иметь руководство по такому сценарию:

1. Тебе не нравится что-то на каком-то сайте.
2. Открываешь девтулзы, вешаешь слушатель изменения атрибута или контента ноды.
3. Включаешь дебаггер, находишь точное место.
4. Меняешь код, тестируешь.
5. Заменяешь файл на локальный.
...
6. PROFIT!

И по этому поводу я решил принести вам видео как починить Тwitter. Ой, простите, X. Ну нельзя же на канале совсем без хайповых тем!

Получилось прекрасное руководство, целый скринкаст.

Не сцыте менять мир как вам нужно, котаны!

#js #devtools #debug
😁16🔥64👍4🤔1
#презентация дня

Раз уж я упомянул не так давно и Scroll-driven Animations и View Transitions API в одном сообщении, надо идти дальше.

Хорошо уже нам известный товарищ Ван Дамм, который Брамус, собрал всё в кучу. Он давно оседлал тематику скроллозависимых анимаций и теперь, с выходом Chrome 115, пушит максимально.

Итак, встречайте: Scroll-Driven Animations and View Transitions (2023.06.09 @ CSS Day)

Ну и сразу ссылку на видео: https://youtu.be/nFbuXdEU-oA

#css #scroll #view #transition
🔥6👍3
#фишка дня

Так, котаны мои хорошие, чтобы начать процедуру отладки, например, по клику на элементе, вам вообще не надо идти в Elements 👉 Event listeners, искать там click, искать нужный файл, или, ещё хуже, сразу начинать ковыряться в коде... Сейчас всё расскажу.

Открываем девтулзы, ползём в Sources, открываем в сайдбаре справа раздел Event Listener Breakpoints и выбираем событие click в ветке Mouse. Всё, вы прекрасны, все довольны.

Пользуемся 💝️️️️️️

#devtools #debug
👍27🔥62
#такое дня

Это дежурное напоминание о том, что если доступность вашего сайта зависит от геополитической ситуации в мире — вы что-то делаете не так.

Например, мне бы в голову не пришло выбрать домен в зоне .AF — Афганистан. А вот паре грандов в мире фронтенда, Вес Босу и Джейсону Ленсторфу так не показалось.

И этот день настал: регистраторы доменов не могут связаться с лицами, ответственными за доменную зону .AF.

Бизнес обоих зависел от сайтов, веселье! Зато крутая доменная зона, ага.

Думайте, котаны, где регистрируете проекты.
😁14
#инструмент дня

Tailwind CSS при всех своих спорных моментах понравился многим людям. Кто-то не парится и пишет все атомы в классы, кто-то берёт компонентный подход и собирает компоненты на базе его DSL (domain-specific language), чтобы потом скомпилировать их в чистый CSS. Но, оказывается, есть и альтернативный подход: panda.

Что такое Panda CSS? Это CSS-in-JS движок, который собирает человекочитаемые атрибуты или пропсы компонентов в атомарный CSS-файл. Да, в файл, который создаётся в момент сборки, не в рантайме!

Есть три варианта описания стилей, мне больше всех импонирует компонентный подход, с пропсами.

В общем, такой атомарный CSS мы покупаем.

#css #react #cssinjs
🔥7👎6
#заметка дня

Что-то по Твиттеру опять пронеслась война тех, кто считает, что надо максимально ограничивать кандидату доступ информации во время собеседования, не пускать его в поиск Google, запрещать спрашивать у ChatGPT, не давать документацию и так далее. И тех, кто, в общем-то, считает наоборот.

Я пока не видел хороших и правильных примеров использования ChatGPT, если честно. Единственный известный мне случай подобного поведения кандидата вызывает нервный смех, потому что ему стоило честно сказать: "Не знаю". Он буквально понятия не имел даже как задать вопрос правильно, но с каменным лицом доказывал, что так и надо. Наверное, получился бы хороший продажник.

С документацией всё просто: естественно, надо разрешать доступ. Да даже в университетах разрешают пользоваться конспектами и справочниками. Ну, в нормальных...

Google... ситуация похожа на ChatGPT. Нужно внимательно смотреть, что и как человек гуглит. Как конкретно он формирует запрос и какие ссылки открывает.

Я лично нанимал фронта, который не стеснялся гуглить во время собеседования. Прям стримил экран и искал. Где-то для выжимки из доки, где-то чтобы посмотреть альтернативы алгоритму.

А потом чтобы показать скриншоты своего проекта, который был закрыт пейволлом!

А вот того, кто во время собеседования гуглил меня, мы не взяли...

А как у вас дела обстоят и опыт?

#work #interview #собеседование
🔥91👍1
This media is not supported in your browser
VIEW IN TELEGRAM
#инструмент дня

Что делать, если нужно срочно проверить какую-то гипотезу или сгенерировать набор строк, покадровую анимацию или что-нибудь ещё в таком духе?

Конечно же, открыть текстовый редактор и терминал, написать код на любимом языке и выполнить его в терминале любимой средой.

Например, что-то пошло не так и ваш любимый язык — JavaScript. Написали, выполнили node index.js и радуетесь выводу.

Впрочем, есть другие варианты. Консоль браузера, codepen.io, codesandbox.io, jsfiddle.com... Но давайте что-то локальное.

Первый вариант: RunJS (на видео). Бесплатная версия достаточна чтобы играть роль бесконечной удобной консоли. Платная включает npm, вкладки, автодополнение, ENV-переменные и проверку типов.

Второй вариант: расширение CodeRunner для VS Code. В отличие от RunJS поддерживает больше языков и встраивается прямо в редактор.

Третий, естественно: scratch files в IDE от JetBrains. Дебаггер, HTTP-запросы и среда выполнения из коробки.

Всем удачной проверки гипотез, котаны!

#js #runtime #coderunner
👍51
#такое дня

Когда-то давным давно, во времена первых браузеров и изобретения JavaScript, кто-то подумал, что было бы неплохо получать доступ к элементам в глобальном пространстве имён. Речь идёт в том числе об атрибуте name для ссылок.

Вам все знакомы якоря вида #cheatsheet в адресной строке браузера. Да-да, хештеги не взялись из ниоткуда.

Так вот, пока браузеры пытались договориться (не пытались), что же должно быть индикатором доступа, name или id, вышло так, что IE сделал элементы с id свойствами не только объекта document, но и объекта window. А остальные, естественно, скопировали.

Что это значит? А то, что если вы добавили id элементу, то этот самый элемент стал доступен как переменная в глобальном пространстве ваших скриптов. Без объявления! Буквально вот так: https://codepen.io/alinaki/pen/zYLJVZN

Если кому интересно подробнее почитать, что куда и как попадает, спецификация ответит на этот вопрос: https://html.spec.whatwg.org/multipage/dom.html#dom-tree-accessors

Но если коротко: не надо это использовать если вы не на хакатоне. Приведёт к таким спагетти, что мало не покажется.

А вот знать надо.

#js #dom #node #бородач
🤯19👍94
#история дня

27 лет назад вышел Internet Explorer 3.0.

13 августа 1996 года появилась версия для Windows, а 8 января 1997 — для Mac OS (да-да, она тогда не macOS называлась). Было же время...

Что же такого в нём примечательного?

Ну, помимо того, что это первый IE с легендарной вселяющей ужас во всех верстальщиков иконкой, это ещё и первый браузер вообще с поддержкой CSS.

В то время CSS использовался чтобы помечать посещенные ссылки фиолетовым.

Эта самая поддержка была даже по тем скромным меркам неполной. Microsoft, впрочем, надолго решила продолжать в том же духе.

А ещё была своя реализация JavaScript: JScript. И предлагалась поддержка VBScript... я свой первый веб-проект на нём писал, не особенно содрогаясь.

Работал браузер на 386 с Windows 3.1, требовал от 4 MB оперативной памяти, 12 MB — если хотелось Java 🤯

Посмотреть скриншоты и видео можно в музее веб-дизайна: https://www.webdesignmuseum.org/old-software/web-browsers/internet-explorer-3-0

Взгрустнулось, котаны? 😅

#css #ie #history
13👍4
This media is not supported in your browser
VIEW IN TELEGRAM
#codepen дня

Устроим перепись олдов на канале? Кто ЛогоМиры помнит?

Мой путь в программирование точно с них начинался. Ещё с Муравья, но он был гораздо сложнее.

Кэсси Эванс придумала, что ЛогоМиры забавно ложатся на правила отрисовки SVG-кривых и сообразила сегодняшний кодпен дня.

Так что если вам интересно, как происходит отрисовка SVG — а на самом деле, там реально очень всё похоже на команды той самой черепашки — милости просим: https://codepen.io/cassie-codes/pen/ZEvNBmX

#svg #logo #бородач
👍155🤩1🤡1
This media is not supported in your browser
VIEW IN TELEGRAM
#фишка дня

Тут оказалось, что в Chrome DevTools встроен редактор кривых Безье для переходов aka transition!

Можно добавить точку, перетащить её и сразу посмотреть результат. Ну или выбрать из готового набора: linear, elastic, bounce, emphasized.

А в версии 116 добавят линейные функции переходов, linear(), о которых нам ещё только предстоит поговорить: https://developer.chrome.com/articles/css-linear-easing-function/

#devtools #css #linear #curve
🤩19👍6
#статья дня

В период пандемии средства для совместной работы пережили самый настоящий бум. Особенно взлетели видеоконференции и вайтборды (ну, доски с заметками, только онлайн). Успех того же Miro известен всем.

И вот Atlassian, которая имеет в своем арсенале почти все необходимое для организации проектной работы, тоже захотела удержать людей у себя, повысив привлекательность пакета. И выпустила Confluence whiteboards.

Но нас все же интересует не бизнес сторона вопроса, а технологические решения.

И тут нам очень повезло! Они выкатили в своем технологе огромную статью с описанием технических решений своей доски. Упор делали на производительность, потому остановились в итоге на чистом WebGL. Но вот что интересно: React+DOM не то чтобы критично медленнее, вполне себе конкурентноспособно.

В общем, это мы читаем: https://www.atlassian.com/engineering/rendering-like-butter-a-confluence-whiteboards-story

В статье полно ссылок на открытые проекты и концепции вообще. Крайне рекомендую.

#webgl #whiteboard
👍104🤩1