• Как вы делаете code-review?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    У code review должна быть цель. В моей практике обычно проекты небольшие и там нет отдельных тестировщиков. Получается, что code review отвечает на три вопроса:

    1. Соответствует ли функционал ТЗ?
    2. Создает ли код проблемы команде?
    3. Есть ли тут какой-то специфичный для проекта опыт, который лучше задокументировать, пока мы еще в контексте?


    Получается что-то такое:

    • До выполнения задачи: проводится анализ задачи, формулируется ТЗ. Бывает, что нужно подключиться и помочь с требованиями, с контекстом, в котором все делается. Чем более подробный анализ мы делаем и чем лучше мы понимаем контекст на этом этапе, тем больше вероятность, что потом весь процесс выполнения задачи пойдет как по маслу и code review будет чистой формальностью в конце.
    • До ревью: линтеры проверяют код на соответствие стилю, на отсутствие синтаксического бреда.
    • Дальше - проверка на соответствие функционала ТЗ. Это защита от глупых ошибок в продакшене, которые коснутся пользователей.
    • Потом - на сответствие принятым соглашениям по коду, если они есть в проекте. Обычно это архитектурные паттерны и что-то про зависимости, смотрим не создает ли код проблем окружающим, а то разные глупости порой случаются. Особенно это важно в коде, который не сам в себе, а затрагивает много чего вокруг. Иногда возникает конфликт интересов, когда что-то явно устарело, и соглашения дополняются чем-то. Чем лучше был анализ в начале, тем меньше вероятность, что тут будет, что обсуждать.
    • Дальше уточняющие вопросы по странным местам, если они есть. Это больше с целью узнать контекст задачи, почему приняты те или иные решения. Происходит передача специфичных для проекта знаний в сторону команды. Возможно там же будут какие-то рекомендации по поводу практик, на что стоит обратить внимание в следующий раз. Это будет передача опыта от команды.


    А кто там будет, джун или синьер-помидор - не важно. Все люди ошибаются, и всем нужен контекст происходящего для эффективной работы.
    Ответ написан
    Комментировать
  • Как выбрать все элементы, кроме последнего и предпоследнего?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Еще, как вариант, можно делать "-n+k" и выбирать все, кроме последних k элементов:
    .item:not(:nth-last-child(-n+2)) {
        /* ... */
    }
    Ответ написан
    Комментировать
  • Как рандомно и одновременно равномерно расположить элементы по секции?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Имеете в виду что-то такое?

    Ответ написан
    2 комментария
  • Как сделать анимацию куба, как на сайте axoft.ru?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Что это за фреймворк?

    Да не нужны там фреймворки. Нужна копипаста стилей для кучи почти одинаковых объектов (ее, наверное, можно сократить каким-нибудь хитрым миксином, но суть не поменяется):

    Ответ написан
    1 комментарий
  • Не грузится Proton VPN?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Его заблокировали что ли?

    Да. Ну то есть почти да. Клиенты не могут скачать конфигурации для подключения к серверам. Если скачать их из админки своими руками и вставить в любой независимый vpn-клиент, то все соединяется и работает хорошо - сами сервера никуда не делись.
    Ответ написан
    1 комментарий
  • Как устранить ошибку barba.js и locomotive-scroll?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Это был настолько распространенный вопрос, что в документации barba.js появился отдельный блок про интегрирование locomotive-scroll. Имеет смысл почитать, и сделать все так, как там написано.
    Ответ написан
  • Как по наведению на элемент проверить наличие дочернего элемента с определенным классом?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    В светлом будущем для решения этой задачи у нас будет :has. Но пока что о кроссбраузерности там речи не идет. В текущем состоянии CSS нет селектора, который бы позволил сделать тот же эффект. Но в контексте вашей задачи никто не мешает самим item сделать классы-модификаторы.
    Ответ написан
  • Как вписать изображения большего размера, что бы разметка не ломалась?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    вписать изображения большего размера, что бы разметка не ломалась

    Можно что-то такое сделать:
    .inv-cell {
        position: relative;
    }
    
    img {
        position: absolute;
        width: 100%;
        height: 100%;
        object-fit: cover;
    }

    Весь вопрос тут будет скорее не в размере картинок, а в их пропорциях. Если вы привязываете саму сетку к пропорциям экрана - она 100% будет расходиться с пропорциями картинок внутри в ту или иную сторону. Если это какие-то формальные фоточки, то object-fit решит вопрос, если же это превьюшки для фильмов с текстами или еще чем-то, что нельзя отрезать - то будет вопрос по самой концепции к дизайнеру, и его нужно будет решать с ним.
    Ответ написан
    4 комментария
  • GSAP. Как изменять zIndex на определённых точках Path?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Можно продублировать SVG и "верхнюю" копию частично скрыть маской. Это не самое универсальное решение, но в контексте задачи может быть самым простым и надежным, т.к. не будет никакой привязки к контенту, только к структуре кривой:
    Ответ написан
  • Есть ли какой то список что нельзя использовать в 2022 году при разработке с поддержкой IE 11?

    sfi0zy
    @sfi0zy Куратор тега Вёрстка
    Creative frontend developer
    Чтобы не перепечатывать каждое свойство в caniuse

    doiuse?
    Ответ написан
    Комментировать
  • Почему одни экземпляры создаём через new, а другие литерально?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    console.log(new Number(1) + new Number(2)); // выводится 3 и typeof полученного значения number
    То есть всё в порядке, это то же самое, как если бы мы сделали:
    console.log(1 + 2);

    Число - это Primitive. У примитивов есть эквивалентные объектные аналоги (кроме null и undefined). Поэтому да, это "то же самое" в каком-то смысле (у примитива нет методов, в отличии от эквивалентного объекта, они не могут быть изменены, и.т.д., но в таких простых расчетах мы не обращаем на это внимания). А штуки вроде упомянутых промисов, дат и что там еще бывает - это будут уже не примитивные типы данных, там такой двойственности уже нет.

    В остальном - там есть немного синтаксического сахара, связанного с функциями и объектами. Например Object может быть создан разными способами, хотя фактически они приводят к одному результату, а не как у примитивов и их объектных оберток-аналогов.
    Ответ написан
    Комментировать
  • Не отображается встроенное изображение в .svg на сайте?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    На MDN говорят, что это вопрос безопасности (там только про Gecko, но можно предположить, что везде так). Если SVG используется как картинка, то в ней уже нельзя подгрузить другие внешние ресурсы. Как вариант можно использовать тег embed вместо img, и все будет работать без таких ограничений.
    Ответ написан
    Комментировать
  • Как определиться с зависимостями лендинга?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Смешались в кучу кони, люди, GSAP, React, Three.js... Стоит немного систематизировать инструменты хотя бы по задачам, которые они решают. Не привязываясь к конкретным фреймворкам из большой троицы, у нас есть несколько классов инструментов в теме креативных сайтов:

    • Про готовые CSS-анимации - animate.css, Wow.js, и.т.д. Там много динозавров из времен jQuery. Такие штуки часто бывают не в тему дизайна, но стоит посмотреть и забыть. Хотя для сайтов в духе дизайнерской дичи, вроде той, что успешно делают в студии Артемия Лебедева - может быть и ок.
    • Про интерполяцию всего и вся. Тут обычно выбирают между GSAP и Anime.js. Первый вариант - более замороченный, есть полезные плагины, второй - попроще, но тоже хорош, в некоторых кругах даже более популярен. Для совсем простых задач - можно свой инструмент написать.
    • Про скролл, в основном в контексте CSS-анимаций. Тут Locomotive Scroll рулит.
    • Про переходы между экранами. Грубо говоря прокаченный роутер. Самый популярный - Barba.js. Раньше еще был Highway.js, но в последне время что-то про него мало говорят.
    • Про экспорт готовых анимаций из софта для анимаций. Тут нужно отталкиваться от софта. Обычно вопрос возникает в контексте AE и простых мультиков - тут Lottie, говорят, неплох. Но нужно дизайнера заранее консультировать по теме, чтобы лишнего не намалевал.
    • Про визуализацию данных. Тут полезно знать про d3.js, в основном ради готовых примеров.
    • Про трехмерный WebGL, чтобы не писать все руками. Самый популярный вариант - Three.js, в основном за счет экосистемы и горы готовых решений, но есть и альтернативы на любой кус и цвет. Для 2D -эффектов вообще ничего не нужно в большинстве случаев.
    • Плюс не стоит забывать про всякие вспомогательные штуки вроде WebFontLoader, Hammer.js, LeaderLine, и.т.д. К анимациям они не относятся, но в работе могут быть полезны, чтобы не писать все самому.


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

    А вообще угадать весь стек на много проектов вперед с первого раза, не имея ни малейшего представления о том, что там будет нужно, а что нет, скорее всего все равно не получится, так что может быть стоит попробовать разное в разных проектах (тем более речь идет про некоммерческие проекты, можно себе позволить), и посмотреть на то, какие вообще варианты бывают в разных классах задач, и что они помогают делать, а что - нет.
    Ответ написан
    1 комментарий
  • Как создать полный файл со стилями tailwindcss?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Пытаюсь установить tailwind... при компиляции получается файл, в котором нет всех стилей tailwind... делаю всё четко по инструкции...

    Если ошибок при сборке никаких нет (вы про них ничего не говорите), и вы делаете все по инструкции, то возможно стоит ее еще раз прочитать. Эта самая инструкция начинается со слов:

    Tailwind CSS works by scanning all of your HTML files, JavaScript components, and any other templates for class names, generating the corresponding styles and then writing them to a static CSS file.

    Если вы все делаете по ней, то по идее вы как раз и должны получать минимальный файл, в котором будут только те стили, которые у вас в проекте нужны, а не вообще все, что там в теории могут быть сгенерированы. По вопросу кажется, что все работает именно так, как и должно.
    Ответ написан
    Комментировать
  • Как встроить Math.Random в webgl?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Стандартной функции rand в glsl в нашем распоряжении нет. Есть популярная реализация:

    float rand(vec2 seed) {
        return fract(sin(dot(seed, vec2(12.9898,78.233))) * 43758.5453123);
    }


    Ее копипастят годами из проекта в проект, и используют, когда нужно что-то нарандомить.

    Но глобальные константы должны быть именно константами, известными на этапе компиляции. На попытку присвоить им значение, вычисленное в какой-то функции - получим ошибки компиляции. Исключения по этой части в glsl делаются только для специальных переменных, в частности для uniform. Они могут быть определены уже в реальном времени. Можно было бы нарандомить все в main, и потом передавать все значения в остальные функции в качестве параметров, но может быть быстрее и удобнее добавить больше uniform-переменных, вроде:

    var tuniform = {
    	SEA_SPEED: {
    		type: 'f',
    		value: Math.random() * 10.0
    	},
    	time: {
    // ...


    в JS, и в шейдере:

    // Вместо
    // const float SEA_SPEED = 0.8;
    // используем
    uniform float SEA_SPEED;
    Ответ написан
    1 комментарий
  • Как обучить глупых студентов функциональному программированию?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Студенты - инженеры... как обучить фп за 1-2 занятия с нуля? Что бы вы сделали?

    Ну о серьезном погружении здесь речи не будет, но самые азы за две пары дать вполне можно. Если инженеры - значит умеют в математику. Знают, как сложные формулы со скобочками раскладывать на составляющие и считать. Даже рекурсия для них - понятие знакомое. Если взять условно старый добрый common lisp со скобочками и простейшим интерпретатором, и начать писать простые конструкции с расчетами чего-нибудь - они быстро подхватят идею, как это работает в целом. А дальше уже можно будет по аналогии показать, что это не только с числами можно делать, но и с другими данными, показать какие-то примеры со строками. А в конце можно показать какие-то простые способы организации кода и рассказать что-то для кругозора (откуда ФП взялось, где применяется, что есть языки и без скобочек, но с теми же идеями внутри и.т.д.). Заливать про архитектуру и какие-то паттерны людям, которые не знакомы с программированием - бесполезно, они еще не видели большого объема кода, чтобы понять смысл высказываний. Но поработать с какими-то прикладными вычислениями (у инженеров есть задачи по физике для этого), с каким-то абстрактным анализом данных - за пару пар вполне можно.
    Ответ написан
    Комментировать
  • Почему по вертикали не встает по центру блок?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Нужно чтобы форма была по центру

    Тогда может быть align-self: center; должно быть у самой формы?
    Ответ написан
    Комментировать
  • Какое железо нужно что бы работать с последним Unreal Engine?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Unreal Engine

    Можно у них и почитать в документации. Там есть как минимальные требования, чтобы оно вообще завелось, так и те, которые они считают комфортными для разработки игр.
    Ответ написан
    Комментировать
  • Как заменить опреденный цвет на другой с помощью фильтра feColorMatrix?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Можно как-то так нашаманить:

    Идея в том, что просто фильтр с feColorMatrix будет применяться вообще ко всему, нужно сначала выбрать область с конкретным цветом, там его заменить и наложить на оригинальное изображение.

    Но важно понимать, что любые такие штуки с частичными наложениями изображения на само себя могут влететь в проблемы с размерами в нецелое количество пикселей и будут появляться артефакты в 1px по краям замененного цвета. Иногда это не важно, задачи разные бывают, но если вам нужно, чтобы было красиво и надежно, то лучше это делать на канвасе (а еще лучше - сразу в WebGL контексте) - там можно пройти по всем пикселям своими руками и заменить цвета без накладывания слоев. Это будет более замороченное решение, учитывая необходимость конвертировать SVG в изображение на канвасе, но по надежности его не превзойти.
    Ответ написан
    Комментировать
  • Кто должен анимировать 3d-модель перед выкладыванием на сайт (художник или программист)?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Кто должен делать [название действия]

    Как договоритесь, так и будет. Абсолютных ответов может и не быть, все зависит от умений и загруженности участников команды. В креативной разработке часто можно встретить людей, которые умеют делать что-то не только по своей основной специальности, но и по смежным.

    бег/ходьба/прыжок/дыхание

    Скелетные, заранее рассчитанные, анимации, обычно делают 3D-художники или программисты, которые во всей этой теме хорошо разбираются. Просто потому, что это удобнее делать в софте для работы с 3D (подставьте название по вкусу), а чистые фронтенд-разработчики в 99% случаев в нем могут сделать только какие-то совсем базовые вещи и потратят слишком много времени на тот же бег. А вот генеративные штуки, да еще зависящие от реакций пользователя - скорее наоборот, программистам с инструментами разработчика в браузере, будет сделать проще, чем что-то костылить напрямую из софта для моделирования. Но тут все от конкретных задач зависит.
    Ответ написан
    Комментировать