Задать вопрос
  • Как сверстать вот такой блок?

    RAX7
    @RAX7
    Ответ написан
    Комментировать
  • Какие именно практические навыки необходимы для фриланса на php?

    inoise
    @inoise Куратор тега PHP
    Solution Architect, AWS Certified, Serverless
    Те что решают проблему заказчика. Надо просто открыть фриланс-биржи и посмотреть на заказы. Это так сложно?
    Ответ написан
    Комментировать
  • Как сделать [1] из [1, 2, 3] и [2, 3] (вытащить значения из первого массива, которых нет во втором)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    const arr1 = [1, 2, 3]
    const arr2 = [2, 3]
    const arrSub = arr1.filter(el => !arr2.includes(el))
    console.log(arrSub)
    // [1]
    Ответ написан
    2 комментария
  • Как сделать плавную прокрутку на странице?

    Vlad_IT
    @Vlad_IT Куратор тега CSS
    Front-end разработчик
    Все решения будут дико тормозить. Сайт по ссылке тормозит на macbook pro 2018 с i7, во время скролла лишь появляется желание побыстрее закрыть сайт.
    Лучше нативного скролла нет ничего, убеждался в этом множество раз. Если нужна плавная прокрутка к нужной позиции, то тоже есть нативные решения: css scroll-behavior или на js параметр behavior у scrollTo
    Ответ написан
    5 комментариев
  • Как применить стиль только к конкретному элементу при наведении мыши в цикле v-for?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Вырезаете обработчики mouseover и mouseout, динамическое назначение классов, свойство isShipHovered и метод chooseShipOnBoard.

    Заменяете .hover на .square:hover - всё, больше ничего не надо. Если есть возможность что-то сделать только через css - делайте это что-то только через css.

    UPD. Вынесено из комментариев:

    мне нужно было использовать именно через script, потому,что я потом буду манипулировать этим методом chhoseShipOnBoard, например ещё добавлять классы к соседним блокам, чтобы при наведении выделялся не только текущий блок, но и несколько рядом находящихся блоков

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

    data: () => ({
      hovered: null,
      ...
    }),
    methods: {
      getClasses(index) {
        return что-то, в зависимости от index и this.hovered;
      },
    },

    <span
      v-for="(n, i) in squares"
      @mouseover="hovered = i"
      @mouseout="hovered = null"
      :class="getClasses(i)"
    >

    https://jsfiddle.net/arw16jtf/
    Ответ написан
    3 комментария
  • Какие есть сайты с задачками для начинающих?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Codewars
    Ответ написан
    Комментировать
  • Как заставить beforeRouter дождаться пока в firebase подтвердит авторизацию?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Поменяйте порядок действий - сначала авторизация, потом создание экземпляра vue:

    firebase.auth().onAuthStateChanged(user => {
      if (user) {
        store.dispatch('loggedUser', user);
      }
    
      new Vue(...);
    });
    Ответ написан
    1 комментарий
  • Что делать начинающему веб-дизайнеру после окончания обучения?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Как выйти на фриланс?

    Никак. Шансов на фрилансе нет, пока в офисе хотя бы до мидла не дорос.

    Где взять портфолио если ты новичок?

    Где найти клиентов, если ты без опыта?

    Сарафанное радио. Друзья, родственники, знакомые друзей и родственников.
    Ответ написан
    5 комментариев
  • Как обернуть return в span?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Проблема не в том, что вы возвращаете, а в том, как потом это возвращаемое значение используете.
    Ответ написан
    Комментировать
  • Как получить данные используя fetch?

    @cython
    Вы выполняете fetch не на том же адресе, что и сам сайт. Следовательно это должен быть cors запрос, а сайт возможно не поддерживает cors. Ajax запросы могут быть выполнены только на том же сайте, к которому идёт обращение.
    Ответ написан
    1 комментарий
  • Ajax подгрузка картинка в битриксе?

    gromdron
    @gromdron
    Работаю с Bitrix24
    К 1С-Битрикс это имеет косвенное отношение, так как такая проблема была бы на любой CMS.

    Вам необходимо углубиться в понятие lazy-loading слайдера который Вы используете.
    Мы, например, используем Swiper Slider и там есть достаточно подробная инструкция для реализации lazy loading: https://swiperjs.com/api/#lazy
    Ответ написан
    9 комментариев
  • Как отображать первые 3 символа в строке, а остальные заменять?

    0xD34F
    @0xD34F Куратор тега JavaScript
    str.slice(0, 3) + '-'.repeat(Math.max(0, str.length - 3))
    
    // или
    
    str.replace(/(?<=.{3})./g, '-')
    
    // или
    
    Array.from(str, (n, i) => i < 3 ? n : '-').join('')
    
    // или
    
    str.replace(/./g, (m, i) => i < 3 ? m : '-')
    
    // или
    
    str.match(/.{0,3}/) + Array(Math.max(0, str.length - 2)).join`-`
    
    // или
    
    str.substring(0, 3).padEnd(str.length, '-')
    Ответ написан
    7 комментариев
  • Как выйти из цикла два раза?

    notiv-nt
    @notiv-nt
    Как ваше ничего? Да, моё тоже
    first: for (var i = 0; i < 3; i++) {
      second: for (var j = 0; j < 3; j++) {
        if (i === 1) continue first;
        if (j === 1) break second;
        console.log(`${i} & ${j}`);
      }
    }
    Ответ написан
    Комментировать
  • Как можно проще разбить ссылку?

    0xD34F
    @0xD34F Куратор тега JavaScript
    new URL(string).searchParams.get('list')
    
    // или
    
    Object.fromEntries(string.split('?').pop().split('&').map(n => n.split('='))).list
    
    // или
    
    string.match(/(\?|&)list=(.+?)(&|$)/)?.[2]
    Ответ написан
    Комментировать
  • Каков мой уровень верстальщика?

    Vlatqa
    @Vlatqa Куратор тега CSS
    15ый
    Ответ написан
    Комментировать
  • Какой путь развития выбрать?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Для начала нужно выбрать что-то одно.
    Знать по чуть-чуть во всех областях бесспорно полезно для саморазвития, но на начальных этапах это прямой путь в дешевый фриланс и "сайт под ключ за 5-10-20 т.р".

    Хотите работать верстальщиком - учите html/css/less и т.д.;
    Хотите в будущем быть frontend - учите какой-нибудь модный js фреймворк по вкусу (react / angular / vue);
    Хотите в бек в модные проекты - учите что-то из списка PHP / Python / Go (но что-то одно) + работу с базой;
    Хотите в бек в энтерпрайз - учите Java + опять же работу с базой;
    Хотите в мобильную разработку - учите swift для ios или kotlin для android (но опять же что-то одно);

    Откройте HH, почитайте вакансии для начинающих, почитайте вакансии для опытных, составьте себе roadmap кем вы хотите быть через пол года, через год, через 3.

    Любой нерелевантный опыт будет полезен только при трудоустройстве в мелкую компанию где вы будете делать первое, второе, третье, а параллельно админить 1с и менять катриджи в принтере.
    В любых крупных IT компаниях действует жесткая специализация.
    Ответ написан
    5 комментариев
  • Попросили проверить код, на что смотреть нужно?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смотря зачем)). Я когда делаю Code Review критерии следующие:

    * Безопасность:
    - Каждый аргумент метода простого типа должен проверяться на тип в случае его проксирования и на граничные значения в случае обработки. Чуть что не так - бросается исключение. Если метод с кучкой аргументов на 80% состоит из поверки из аргументов - это вполне норм))
    - Никаких trigger_error, только исключения.
    - Исключения ДОЛЖНЫ быть человеко-понятны, всякие "Something went wrong" можно отдавать пользователю, но в лог должно попасть исключение со стектрейсом и человеко-понятным описанием, что же там пошло не так.
    - Каждый аргумент (объект) метода должен быть с тайпхинтингом на этот его класс, или интерфейс.
    - За eval как правило шлю на **й.
    - @ допускается только в безвыходных ситуациях, например проверка json_last_error.
    - Перед работой с БД - обязательная проверка данных.
    - Никаких == и !=. Со swtich - единственное исключение, по ситуации.
    - Если метод возвращает не только bool, а еще что-то - жесткая проверка с ===, или !== обязательна.
    - Никаких условий с присваиваниями внутри. while($row = ...) - тоже идет лесом.
    - Магические геттеры/сеттеры разрешаются только в безвыходных ситуациях, в остальном - запрещены.
    - Конкатенации в sql - только в безвыходных ситуациях.
    - Параметры в sql - ТОЛЬКО через плейсхолдеры.
    - Никаких глобальных переменных.
    - Даты в виде строки разрешаются только в шаблонах и в БД, в пхп коде сразу преобразуется в \DateTimeImmutable (в безвыходных ситуациях разрешено \DateTime)
    - Конечно зависит от проекта, но как приавло должно быть всего две точки входа: index.php для web и console(или как-то по другому назваться) - для консоли.

    * Кодстайл PSR-2 + PSR-5 как минимум, + еще куча более жестких требований (для начала все то что в PSR помечено как SHOULD - становится MUST)
    - В PhpStorm ни одна строчка не должна подсвечиваться (исключением является typo ошибки, например словарик не знает какой-то из аббревиатур, принятых в вашем проекте). При этом разрешается использовать /** @noinspection *** */ для безвыходных ситуаций.
    - Если кто-то говорит, что пишет в другом редакторе и у него не подсвечивается, на эти отговорки кладется ВОТ ТАКЕЕЕНЫЙ мужской половой **й и отправляется на доработку)).

    * Организация кода:
    - Никаких глобальных функций.
    - Классы без неймспейса разрешаются только в исключительно безвыходных ситуациях.

    * Тестируемость (в смысле простота тестирования) кода должна быть высокая.
    - Покрытие кода обязательно для всех возможных кейсов использования каждого публичного метода с моками зависимостей.

    * Принципы MVC:
    - Никаких обработок пользовательского ввода в моделях, от слова совсем.
    - Никаких ***ть запросов в БД из шаблонов.
    - Никаких верстки/js/css/sql-ин в контроллерах.
    - В моделях НИКАКОЙ МАГИИ, только приватные свойства + геттеры с сеттерами.
    - В моделях разрешено использовать метод save(при наличии такого разумеется) только в исключительных ситуациях. Во всех остальных - либо insert, либо update.

    * Принципы SOLD:
    - Никаких божественных объектов умеющих во все.
    - Если метод для внутреннего пользования - private, никаких public.
    - Статические методы разрешаются только в случае безвыходности.

    * Принцип DRY разрешено нарушать в случаях:
    - Явного разделения обязанностей
    - В тестах (каждый тест должен быть независимым, на сколько это возможно)

    * Работа с БД:
    - Запрос в цикле должен быть РЕАЛЬНО обоснован.
    - За ORDER BY RAND() - шлю на***й.
    - Поиск не по ключам (конечно если таблица НЕ на 5 строк) запрещен.
    - Поиск без LIMIT (опять же если таблица НЕ на 5 строк) запрещен.
    - SELECT * - запрещен.
    - Денормализация БД должна быть обоснована.
    - MyISAM не используется (так уж)) )
    - Множественные операции обязательно в транзакции, с откатом если чо пошло не так.
    - БД не должна содержать бизнес логики, только данные в целостном виде.
    - Не должно быть нецелесообразного дерганья БД там, где без этого можно обойтись.

    * Кэш должен очищаться по двум условиям (не по одному из, а именно по двум):
    - Время.
    - Протухание по бизнес логике.
    Разрешается по только времени в безвыходных ситуациях, но тогда время - короткий период.
    - При расчете ключей кэша должна использоваться переменная из конфигурации приложения (на случай обновлений кэш сбрасывается кодом, а не флашем кэш-сервера). В случае использования множества серверов - это очень удобный и гибкий инструмент при диплое.

    * О людях:
    - "Я привык писать так и буду дальше" - не вопрос, ревью пройдешь только когда поменяешь свое мнение.
    - "Я пишу в vim-е и мне так удобно" - здорово, код консолью я тоже в нем пишу)) но есть требования к коду, если в них не сможешь - не пройдешь ревью.
    - "Я скопировал этот страшный метод и поменял 2 строчки" - это конечно замечательно, но по блейму автор всего этого метода ты, так что давай без говняшек, хорошо?
    - "Оно же работает!" - вот эта фраза переводится примерно так: "да, я понимаю, что пишу полную хрень, но не могу писать нормально потому, что руки из жо", я правильно тебя понял?))
    - "У меня все работает!" - рад за тебя, а как на счет продакшна?
    - "Там все просто" - не используй слово "просто", от слова "совсем". Вот тебе кусок кода (первого попавшегося с сложной бизнес логикой), где там ошибка (не важно есть она, или нет)? Ты смотришь его уже 2 минуты, в чем проблема, там же все "просто"))

    * Всякое:
    ActiveRecord (это я вам как в прошлом фанат Yii говорю) - полное говно, примите за исходную. По факту у вас бесконтрольно по проекту гуляют модельки с подключением к БД. Не раз натыкался на то, что в тех же шаблонах вызывают save, или update (за такое надо сжигать).
    То, что используется Laravel - это печально((. Что бы выполнить требования приведенные выше, приходится "воевать" с фреймворком.

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

    UPD

    Формализировал данные критерии по ссылочке: https://github.com/index0h/php-conventions
    Ответ написан
    55 комментариев
  • Где можно взять заказ на сайт школьнику?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    В этом возрасте стоит сделать упор на сарафанное радио. Возможно, сайт нужен кому-то из родителей, родственников, знакомых родителей и т.д. и т.п.
    Ответ написан
    5 комментариев