• Как найти участок проблемного кода если исходники не поддаются анализу?

    Zifix
    @Zifix
    Barbatum
    Есть такая техника отладки, когда не знаешь где проблема — нечто вроде бинарного поиска. Но не уверен, что по условиям задачи такой подход возможен.

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

    Как верно заметил Василий Банников, если есть репозиторий, то там тоже можно делать бинарный поиск коммита, в котором всё сломалось, возможно там маленький diff.
    Ответ написан
    1 комментарий
  • Почему Array.prototype является массивом, но к нему нельзя обратиться по индексу?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно обратиться по индексу:
    Array.prototype.length; //0
    Array.prototype[0]; //undefined, но не ошибка!
    Array.prototype[0]=123; 
    Array.prototype[0]; //Теперь 123
    Array.prototype.length; //Теперь 1 (автоматически)

    Возможно, вы думали, что массивы не могут содержать свойств? Но массивы - объекты, так что могут:
    typeof Array.prototype; //"object"
    var a = [];
    typeof a; //"object";
    a.x = 123;
    a.x; //123
    a.length; //0

    Кстати, мысль о том, что Array.prototype это массив, довольно спорная, не смотря на документацию. Смотря как проверять:
    [] instanceof Array; //true
    Array.prototype instanceof Array; //false

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

    А в общем случае ответить нельзя, потому что массив или не массив это просто термин. Например, если вам достаточно, чтобы массив содержал лишь метод forEach, то некоторые якобы массивы вам тоже вполне сгодятся:
    document.querySelectorAll('div').forEach; //function - подходит
    document.getElementsByTagName('div').forEach; //undefined - не подходит

    То есть копать можно долго в эту тему. Но надо понимать, зачем.
    Ответ написан
    Комментировать
  • Что значит "--" флаг во многих git операциях?

    Melkij
    @Melkij
    PostgreSQL DBA
    Многие консольные команды разбирают переданные им параметры используя вызов getopt

    getopt отдельно выделяет аргумент "--" как маркер окончания списка параметров:
    The special argument "--" forces an end of option-scanning regardless of the scanning mode.


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

    В частности, git reset использует это поведение для однозначного отделения имён файлов: всё после -- будет восприниматься как имена файлов вместо чего-то вот такого:
    $ git reset file
    fatal: ambiguous argument 'file': unknown revision or path not in the working tree.
    Use '--' to separate paths from revisions, like this:
    'git [...] -- [...]'
    Ответ написан
    Комментировать
  • Как перевести минуты в часы?

    GavriKos
    @GavriKos
    Разделить на 60, с остатком поступить на свое усмотрение.
    Ответ написан
    Комментировать
  • Как дотянуться до скролла с Fullpage.js?

    HunteR-VRX
    @HunteR-VRX
    Помешанный на развитии
    Здравствуйте! Повесьте на блок третей секции событие onload="name()" и инициализируйте функцию которая меняет стиль этого логотипа:
    К примеру:

    <section id="section_three" class="section_three" onload="loadSectionThree()">
        контент
    </section>


    Теперь JavaScript:

    function loadSectionThree() {
        var section = document.getElementById('section_three');
              section.style.backgroundImage = 'url("путь до нового логотипа")';
    }
    Ответ написан
    1 комментарий
  • Как найти найти значение data-* в строке?

    Stimulate
    @Stimulate
    могу
    var htmlElement= document.querySelector('html');
    console.log(htmlElement.dataset.skin);
    Ответ написан
    Комментировать
  • В чем смысл mock-функций в Jest?

    toxicmt
    @toxicmt
    CTO at hexlet.io
    > Насколько я понимаю, смысл mock-функций в jest - это заглушки для функций, чтобы не тащить код всего модуля и не замедлять процесс тестирования.

    Это не совсем так. Моки подразумевают, что вы прямо проверяете то что мокаете. Что функция была вызвана, что запрос был выполнен. Это и называется мокинг. А просто заглушка это стаб. Ее смысл не в том чтобы не тащить код, а в том чтобы изолировать побочные эффекты и добиться детерминированности. К последнему, например, относятся таймеры и рандомные числа. Если все это используется внутри программы, то вы не сможете просто так ее протестировать.

    Подводя итог, мокают для того чтобы проверить сам мок, например вы хотите убедиться что запрос действительно делался (как в примере документации jest). В остальных случаях у вас стаб (даже если либа называет его моком). Стаб используется для того чтобы тестировать свой код, а стаб нужен только для изоляции побочного эффекта.

    Ни первое ни второе напрямую с видом тестирования не связано. Моки и стабы могут применяться практически на любом уровне автоматизированного тестирования.

    Темы для самостоятельного изучения:

    Побочные эффекты
    Детерминированность
    Чистые функции
    https://martinfowler.com/articles/mocksArentStubs.html
    Ответ написан
    Комментировать
  • В чем смысл mock-функций в Jest?

    @afanasiyz
    Javascript-разработчик
    В этом и смысл юнит-тестирования: Ты тестируешь только конкретный болтик в системе ( в примере выше - класс Users), подменяя все его зависимости теми, которые всегда отдадут конечный и заранее известный результат.

    Например, если вдруг в этом же классе появится функция не all, а, например admins() - которая профильтрует юзеров и отдаст только админов - вы, в процессе написания теста, должны знать и входные, и выходные данные, и проверять, соответствуют ли выходные данные, как они должны быть тем, которые вернула функция.

    Ключевой момент опять выделю - тестировать каждый болт, подменяя все его зависимости (они тестируются отдельно).
    Ответ написан
    2 комментария
  • Библиотека для Drag and Drop React?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Зачем тянуть библиотеку? Такой простой функционал проще самому реализовать.
    Пример.
    Ответ написан
    1 комментарий
  • Как определить Facebook ID посетителя сайта, если посетитель залогинен в Facebook?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Единственный способ это сделать - попросить пользователя зарегистрироваться у Вас на сайте через учетку Facebook. Тогда (если пользователь согласится с условиями при регистрации) Вы сможете получить данные пользователя через API
    Ответ написан
    3 комментария
  • Как получить значение в инпута по клику кнопки?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Тут два пути:
    1. Использовать контролируемый input
    2. Использовать ref
    Ответ написан
    Комментировать
  • Взаимодействие React и сторонним API?

    rockon404
    @rockon404
    Frontend Developer
    1. Вы не указали протокол(http в вашем случае). Поэтому ответ получаете не от API OWM, а от своего localhost:3000. Если бы вы внимательно посмотрели на свойство url в консоли, на вкладке network или хотя бы на своем скриншоте, вы бы это заметили.
    2. Ответ надо парсить методом res.json(). Но без указания протокола это бесполезно. Так как ваш localhost:3000 судя по статусу 200 возвращает html с приложением. Отсюда ошибка:
    SyntaxError: Unexpected token < in JSON at position 0

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

    Исправленный вариант:
    fetch(`http://api.openweathermap.org/data/2.5/forecast/?q=${this.state.value}&cnt=1&APPID=e94f24c463ec7a0d1a69ebdebc88c694&lang=ru`)
          .then(res => res.json())
          .then(json => console.log(json));
    Ответ написан
    Комментировать
  • Как выделить последний элемент?

    daemonhk
    @daemonhk
    ПсиХоПат
    :last-child пофиг на классы, он влияет на последний элемент, который может быть и не span`ом.
    :last-of-type также пофиг на классы, но влияет именно на тип тега, в данном случае span, после которого еще что-то может быть.
    :nth-child(3) именно то, что нужно, но теряется универсальность.
    Либо придется юзать js
    Ответ написан
    3 комментария
  • Почему ajax в yii2 выдает ошибку?

    @Arik
    Так гадать только, смотрите откуда и куда идет переадресация, потом смотрите почему с первого УРЛ идет переадресация.
    Так навскидку похоже на normalize url, который вроде по-умолчанию включен. У вас адрес аякс на "/" заканчивается?
    Ответ написан
    1 комментарий
  • Как отладить сайт в мобильных браузерах?

    Про IOs не скажу, а вот с Андроидом все намного проще, ставите ADT Plugin подключаете по usb телефон, в хроме в разделе chrome://devices/ выбираете свой телефон, и дальше не совсем помню в дебагере как то можно переключиться на телефон.
    Ответ написан
    Комментировать
  • Как отладить сайт в мобильных браузерах?

    villiwalla
    @villiwalla
    HTML-верстка
    https://developers.google.com/web/tools/chrome-dev...
    С Сафари также только нужен мобильный яблока и сафари на десктопе
    Ответ написан
    Комментировать
  • Способен ли Webpack при сборке менять пути API?

    @SuperOleg39ru
    Front-end разработчик
    Вы можете добавлять пути как параметры при билде.

    В конфиге:
    const API = process.env.api;
    
    module.exports = {
        ...,
        plugins: [
            ...,
            new webpack.DefinePlugin({
                API_URL: JSON.stringify(API)
            })
        ]
    }


    И глобальная переменная API_URL будет доступна в коде вашего проекта.

    Условный конфиг для сборки в вашем package.json:
    {
      "scripts": {
        "build": "webpack --env.api=https://api.url/v1"
      }
    }


    Если надо на лету добавить:
    npm run build -- --env.api=https://api.url/v2
    Ответ написан
    Комментировать
  • Как в зависимости от результата асинхронного AJAX запроса вернуть true или false?

    @fayster
    export function checkEitherLoggedInOrNot(){ 
        let options = {
            method:'GET',
            credentials:'include',
            mode: 'cors'
        };
        return ajaxRequest('https://repo.asda.ru/app_dev/Auth',options)
            .then(data => {
                //Тут возвращай что нужно
                return data;
            })
            .catch(error => console.log(error));
    }
    
    checkEitherLoggedInOrNot().then(result => { 
        // где result тот результат, который ты вернул
     })
    Ответ написан
    Комментировать
  • Как реализовать перенос новостей в архив через 5 дней?

    @Batlab
    PHP Senior | Python Middle | JS Junior
    1 способ. Реализовать задачу на кроне, которая по циклу будет проходиться по всем записям и если какая-то запись старше 5 дней, то переводить ее в архив.
    2 способ (костыль). Реализовать что-то типа middleware, который будет при каждом запросе на сайт проверять те же самые записи. Только делать это надо если с кроном проблемы.
    Ах и да, не забудьте установить часовой пояс по умолчанию.
    Ответ написан
    2 комментария