Задать вопрос
  • Как вы собираете фронтенд без фреймворков?

    anatoly_kulikov
    @anatoly_kulikov
    Помог ответ? Отметь решением!
    Gulp'а в принципе достаточно
    Ответ написан
    Комментировать
  • Стоит ли хранить базы данных на SSD?

    Jump
    @Jump Куратор тега Твердотельные накопители
    Системный администратор со стажем.
    Стоит ли хранить базы данных на SSD?
    Да, если требуется высокая скорость работы с БД.

    перенести на HDD для продления жизни SDD?
    Бред.
    Ответ написан
    Комментировать
  • Как реализовать одинаковую шапку на всех страницах, но разные заголовки и фоновые изображения в ней (vue.js)?

    profesor08
    @profesor08 Куратор тега JavaScript
    Решение в лоб - каждая страница у тебя содержит подключение всех необходимых блоков, и ты передаешь через параметры свой заголовок: https://ru.vuejs.org/v2/guide/components-props.html

    Решение через vuex: https://vuex.vuejs.org/
    Тут на каждой странице пишешь заголовок в store
    Ответ написан
    1 комментарий
  • Как вы улучшаете "скорость" работы компьютера?

    Jump
    @Jump Куратор тега Системное администрирование
    Системный администратор со стажем.
    Беру CCleaner, чищу реестр.
    Руки оторвать, и выгнать из профессии.
    Дефрагментирую диск
    Отправить лечиться от идиотизма.

    Как вы улучшаете «скорость» работы компьютера?
    Мониторим нагрузку, находим узкие места, устраняем. Т.е добавляем памяти, меняем диск на более быстрый, или компьютер на более производительный.
    Ответ написан
    14 комментариев
  • Кодить на iPad это извращение?

    DevMan
    @DevMan
    япадла - сказка.
    но кодить на нем - извращение.

    когда я был студентом, понятия таблетка вообще не существовало. а сейчас я им доволен более, чем полностью (хотя у меня весьма старая япадла).
    Ответ написан
    4 комментария
  • Кодить на iPad это извращение?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Нет ничего более неприятного и неудобного чем набирать тексты на тачскрине - когда у тебя нет никакой "обратной связи" и тактильных сигналов, начинаются опечатки, а чтобы ввести спецсимволы нужно переключать виртуальную клаву в другой режим (квадратные скобки всякие ` и всё в тком роде). Вот я сейчас пишу этот ответ с телефона и меня ажтрисёт!!111. В тоже время на обычной клавиатуре я могу набирать текст практически вслепую.

    На айпаде удобно открыть мануал в браузере параллельно кодингу на ПК/ноутбуке.
    Ответ написан
    5 комментариев
  • Кодить на iPad это извращение?

    @iMaximus
    Да, это именно извращение. Вам нужен ноут, который удобно таскать с собой.
    Ответ написан
    Комментировать
  • Как вы ведете базу своих проектов?

    Neolot
    @Neolot
    Make the web great again
    Менеджер паролей KeePass.
    В нем можно не только хранить учетные данные, но и вообще любые файлы, которые будут зашифрованы при прикреплении.
    Ответ написан
    1 комментарий
  • Как покрыть подобный метод юнит тестом?

    @green_goo
    Ведь если я укажу существующие сейчас clientId, и с ними пройдут юнит тесты, и когда то удалят эти clientId из БД, то юнит тесты зафейлятся

    Юнит тесты ходят в реальную бд? Это неправильно.
    Нужно заменять в тесте слой взаимодействия с бд заглушкой, которая будет возвращать нужные данные, либо для тестов своя бд, где перед тестом она заполняется нужными данными
    Ответ написан
    4 комментария
  • Что означает "$arr[] = +$var"?

    hack504
    @hack504
    +$a Идентичность. Конвертация $a в int или float, что более подходит.

    https://www.php.net/manual/ru/language.operators.a...
    Ответ написан
    7 комментариев
  • Что означает "$arr[] = +$var"?

    Stalker_RED
    @Stalker_RED
    Это правильно называется унарный плюс (1, 2)
    Пытается конвертировать значение в int или float.

    Похожая штука есть и в js, и похоже, что оба они унаследовали эту фичу из C.
    Ответ написан
    Комментировать
  • Как вы формируете свой прайс?

    Jump
    @Jump
    Системный администратор со стажем.
    Как вы формируете свой прайс?
    Цена за услугу, это сумма за которую мне не лень сделать данный объем работ в данное время.
    Сильно зависит от нагрузки - заказов нет, можно дешевле сделать, сильно загружен и цена соответственно взлетает.
    Сколько данная услуга стоит у других - иногда тоже учитывается, но это далеко не главный и малозначительный параметр. Может быть как в разы дешевле, так и в разы дороже.
    А вообще сильно зависит от того где вы берете клиентов, чем занимаетесь, и.т.д. - универсального рецепта нет.
    У всех ситуации разные.
    Ответ написан
    Комментировать
  • Почему div не может быть дочерним элементом label?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что по стандарту label имеет модель Phrasing content, и может содержать только определённый набор тэгов (исключая вложенный label)
    Ответ написан
    Комментировать
  • Пример проекта который включал бы всю "класссику" фронтенда?

    или более похож на реальный боевой проект

    Куча легаси кода, все тормозит и глючит. Половина проекта с горем пополам переписана на современный манер.

    Не видел ни одного крупного боевого проекта с большой историей, который был бы нормально написан.
    Ответ написан
    1 комментарий
  • Как проверить работоспособность сайта на новой версии php?

    DevMan
    @DevMan
    загнать проект в phpstorm, указать в настройках php7, читать ошибки.
    Ответ написан
    3 комментария
  • Как проверить работоспособность сайта на новой версии php?

    inoise
    @inoise Куратор тега PHP
    Solution Architect, AWS Certified, Serverless
    Идём на php.net, ищем раздел с обратной совместимостью и migration guide и проверяем просто по списку. Все
    Ответ написан
    Комментировать
  • Как изменить стили через javascript?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    var el = document.querySelector("a[href='/products/962112']"); // в селекторе хардкод... не будет ссылки с таким href - все сломается
    
    // тут был цикл, но я его убрал, ибо один элемент берем
    
    var products = document.getElementsByClassName('product'); // тут коллекция, ее надо перебирать циклом
    for(var i = 0; i < products.length; i++) {
      products[i].style.height = el.style.height;
    }


    UPD: по просьбе origami1024 добавляю вариант с CSSOM
    Во-первых, нам понадобится новый элемент style, чей CSSOM мы будем править, его стоит разместить ниже других стилевых подключений (не важно через style или link), я же просто добавлю в конец head
    Сам CSSOM элемента style доступен через его свойство sheet - извлеку его сразу в переменную:
    const {sheet} = document.head.appendChild(document.createElement('style'));

    Во-вторых, в CSSOM правила пронумерованы с 0. Притом можно заменять существующие правила по их индексу, а можно вставлять новые в конец (индекс при этом так же нужно указывать, а если указать неверно - выкинет эксэпшн). Нам же удобнее обращаться к правилам по селектору, поэтому я сделаю объект для сопоставления селектора с индексом правила и счетчик индексов:
    const rulesIndexesBySelector = {};
    let nextIndex = 0;

    Ну и наконец реализуем вспомогательную функцию для обновления CSSOM правила по его селектору:
    function updateRule(selector, declarations) {
      const rule = `${selector}{${declarations}}`; // полное правило - селектор + декларации в {}
      if(selector in rulesIndexesBySelector) {
        // индекс селектора уже известен, обновим правило
        const index = rulesIndexesBySelector[selector];
        sheet.deleteRule(index); // сначала удалим старое правило освободив индекс и отменив его свойства
        sheet.insertRule(rule, index); // и вставим на его место новое
      } else {
        // новый селектор
        const index = nextIndex++; // важен именно постинкримент, чтоб самый первый получил 0, второй 1 и т.д.
        rulesIndexesBySelector[selector] = index; // запомним на будущее
        sheet.insertRule(rule, index); // и вставим правило в конец
      }
    }

    Пример примитивный, но каждый думаю спокойно расширит его под себя.
    У меня например declarations собираются из vue объекта, который можно мутировать (реактивные стили оО) + добавляются вендорные префиксы, если браузер не знает каких-то свойств (не автопрефиксер конечно, но зато работает по месту)

    Использовать это все теперь можно крайне просто:
    updateRule('.product', 'height: 40px; width: 50px');
    Ответ написан
    5 комментариев
  • Какое правильное разделение файлов в БЭМ?

    @tomatopotato
    каком файле мы прописываем стили для .wrapper ? Поскольку это не блок, я так понимаю, что создавать файл не надо и стили надо прописывать просто в начале main.scss ?

    Почему не блок? Он вполне может быть блоком без смыслового функционала. Оберточный. Так же через него, через его элементы позиционируются вложенные в него блоки.

    2) В каком файле прописывать стили для header, footer, section-1, section-2 ? Они не являются блоками по БЭМ, насколько я понимаю, значит ли это что их надо описывать в main.scss или все таки надо создавать отдельный файл под стили для каждой секции ?

    Если вы имеете ввиду теги, то это не одобряется БЭМ. БЭМ оперирует только классами. теги стилизуются через них же. Это сделано для атомизации проекта и легкого переноса блоков из проекта в проект.

    Если нам надо изменить это свойство у одного блока, соответственно придется менять и у всех остальных, находящихся в section-1.

    Блоки не должны влиять друг на друга, это основопологающая идея БЭМ. Если блоки связаны или влияют друг на друга это уже не БЭМ, а что-то похожее на него. Так же внутри блока следует избегать использования каскада и наследования, это может внести дополнительную путаницу и увеличить связанность блока.


    Придется лезть в файл каждого блока и менять свойства, что не слишком удобно, особенно если блоков много

    Это вполне удобно и это и есть БЭМ. Ты не лазишь по огромному файлу со стилями, а идешь в маленький конкретный файл где все находится перед глазами.


    это не спасает нас от огромного дублирования кода

    От дублирования кода спасают миксы. Читайте про них здесь

    5) Правильная практика - помещать все медиа запросы, относящиеся к блоку в файл с версткой этого блока, или должен быть отдельный файл под все медиа -запросы ?

    медиа-запросы изменяющие геометрию блока должны находиться в родительском блоке в его элементах. Сам блок не может изменять свою геометрию за это отвечает файл стилей элемента родительского блока. Соответственно, если мы будем изменять размер блока через медиа запрос, то это делается через элемент родительского блока.
    <head class="head"> 
    <div class="block head__block"> </div>
    </head>

    Соответственно блок класса .block c примиксованным классом .head__block является элементом блока .head и можно менять его геометрию и позиционирование через класс .head__block используя медиазапросы например. Естественно элемент head__block с медиазапросами будет храниться в блоке head и лежать в его подпапке с элементами.
    Другой случай это когда через медиа запросы меняется например стиль блока, скажем его цвет. Тогда медиа запрос должен быть внутри блока, а конкретно в его модификаторе например в данном случае у блока block может быть модификатор block_red в котором будет медиазапрос со свойствами при маленьком экране окрашивать элемент в красный. Этот файл с медиазапросами уже будет находиться в родном блоке block в подпапке с модификаторами.
    Если где-то не согласны или я ошибся пишите в комментарии обсудим.
    Ответ написан
    1 комментарий