• Как сделать асинхронный запрос в getter?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    Геттеры синхронные по своей природе, единственный вариант - возвращать промис
    Ну и вообще, геттеры не для этого созданы
    Ответ написан
    1 комментарий
  • Как удалить дубликаты из json?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    arr = Array.from(new Set(arr));
    Ответ написан
    Комментировать
  • Можно ли на letsencrypt получить бесплатный wildcard сертификат?

    bingo347
    @bingo347
    Crazy on performance...
    LE может выдать единый сертификат для 1 домена и 10 его поддоменов
    Кроме того, LE выдает сертификат самого низкого уровня, который подтверждает только владение доменом
    Ответ написан
  • Расчёт стоимости изготавливаемого товара, как записать данные для калькуляции?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    {
    type: '1 канал',
    size: '1,5х0,5',
    prices: [
      {from: 100, to: 150, price: 795},
      {from: 151, to: 750, price: 735}
    ]
    }
    что-то вроде этого
    Ответ написан
    1 комментарий
  • Ссылка открывает заданную страницу во фрейме. Как вывести юзера из фрейма на реальный url?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Если фрейм с того же домена, то в фрейме выполняемwindow.top.location.href = 'new url';
    Если с другого, то никак - политика безопасности
    Ответ написан
    1 комментарий
  • Есть ли на собеседовании вопросы про контекст this?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Друзья, есть ли вопросы на собеседовании о том, что this зависит от контекста вызова?
    Вполне могут быть, так как это одна из базовых концепций языка
    Сохранилось ли эта особенность в классах и вообще ситуация в ES6?
    классы es2015 - всего лишь синтаксический сахар над прототипапами - более привычный синтаксис для пришедших из языков с классическим ООП, таких как java и C#
    соответственно ситуация абсолютно такая же, как и с обычными функциями, единственное дополнение нового синтаксиса - нельзя вызывать конструктор без оператора new
    Если можете посоветуйте задачки на контекст, чтобы потренировать, ну или лайфхак, который поможет изи запомнить это.
    Надеюсь сойдет за лайфхак:
    func()вызов с контекстом по-умолчанию (undefined в strict режиме или глобальный объект не в strict режиме)
    func.call(ctx, ...args)
    func.apply(ctx, args)
    obj.func.call(ctx, ...args)
    obj.func.apply(ctx, args)
    вызов с указанным контекстом ctx

    obj.func()вызов с контекстом obj
    (0, obj.func)()хак "отвязка контекста", функция вызывается с контекстом по-умолчанию
    Ответ написан
    Комментировать
  • В какую сторону смотреть realtime?

    bingo347
    @bingo347
    Crazy on performance...
    Если нужно отслеживать изменения данных в бд, я бы посоветовал взглянуть на rethinkdb в качестве базы, ну и плюс то, что посоветовали до меня
    Ответ написан
    Комментировать
  • Как решить проблему с Gulp?

    bingo347
    @bingo347 Куратор тега HTML
    Crazy on performance...
    в вотчере таск css:single запускается параллельно таску sass, а нужно последовательно
    Ответ написан
  • Можно ли измерять углы на картинке посредством js?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    1. Отрисовываем картинку на canvas
    2. получаем ее bitmap через getImageData
    3. переводим bitmap в GrayScale (ищите формулу RGB->GrayScale) и повышаем резкость округлением значений до 16 или даже 8 цветов
    4. ищем точки, которые резко контрастируют с окружающими и строим по ним векторы
    5. считаем углы между векторами, отрезки которых на рисунке пересекаются
    Ответ написан
  • С помощью чего сделать сервер посредник?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    используйте nginx
    на node.js настройте реверси прокси
    если url динамический, почитайте о заголовках ответа от бэкенда для отдачи статики nginx'ом после обработки запроса бэкендом (node.js)

    P.S.
    но как известно она не прям идеально подходит для отдачи статики
    У меня на сервере нода торчит наружу и отдает статику, притом делает это шустрее nginx и жрет меньше памяти, все зависит от рук программиста
    Ответ написан
    Комментировать
  • Freessl Есть еще такие?

    bingo347
    @bingo347
    Crazy on performance...
    https://letsencrypt.org/

    P.S.
    Пишет защищено с помощью устаревших методов шифрования
    ssl устарел, используйте tls
    Ответ написан
    1 комментарий
  • Как переключать вкладки на сайте (табы) при помощи скрола?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Комментировать
  • Отключения скролла страницы по оси Y на iPad / iPhone / Android?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    $('your_slider_slector').on('touchmove', function(event) { event.preventDefault(); });
    Ответ написан
  • Как реализовать изменение значения при клике на ссылку?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Самое простое - стилизовать input чтоб он выглядел так как нужно, а по псевдоклассу :focus стилизовать его для ввода
    Ответ написан
    1 комментарий
  • Каким плагином пользуетесь для создания графиков на javascript?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Ответ написан
    Комментировать
  • Неправильно работает промис, чяднт?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    forEach всегда возвращает undefined, нужен map
    Чтоб дождаться выполнения всех промисов в массиве используйте Promise.all
    итого:
    function checkSpec() {
                return driver.executeScript("var search = []; if (typeof xmlDataSpeclist !== 'undefined') {" +
                                                "$.each(xmlDataSpeclist, function (key, item) {" +
                                                    "search.push(" +
                                                    "'http://domain/?spec='" + " + item.id" +
                                                    ");" +
                                                "});" +
                                            "};" +
                                            "return search;"
                ).then((search) => {
                    return Promise.all(search.map(function(val, i) {
                        console.log(search.length); //debug printing
                        return new Promise((resolve, reject) => {
                            request(search[i], function(error, response, body){
                                if (error) {
                                    reject(error);
                                }
                                resolve(body);
                            });
                        }).then((body) => {
                            console.log(body);
                            assert.include(body, 'class="someClass"');
                        });
                    }));
                });
    
            }
    
            return checkSpec();
    Ответ написан
    1 комментарий
  • Как можно монетизировать?

    bingo347
    @bingo347
    Crazy on performance...
    Сложно судить о монетезации чего-либо, не имея представления что это...
    Как вариант можно запаковать в приложение с помощью electron.js и распространять уже как приложение
    Ответ написан
    Комментировать
  • Как писать на ноде серверную часть для мобильных приложений?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    Абсолютно так же как и для веба
    Все конечно зависит от протокола, приложение может общаться с сервером по http/websocket - тут вообще все просто, а может общаться по какому-либо своему протоколу, тогда можно поискать реализацию сервера для данного протокола на npmjs.org или реализовать самому поверх стандартных модулей net (tcp), tls (tls или ssl + tcp) или dgram (udp)
    Ответ написан
    Комментировать
  • Что скажете о javascript webSocket?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Во-первых, websocket - это протокол передачи данных, реализованный поверх http (wss - websocket secure работает через https соответственно) и к ECMAScript (спецификация для языков JavaScript, ActionScript и иже с ними) никакого отношения не имеет.
    Во-вторых, реализация websocket клиента включена в спецификацию BOM (Browser Object Model), из актуальных браузеров поддержка есть почти везде, не поддерживают только IE9 и ниже (критично только если ресурсом будут пользоваться в госсекторе) и OperaMini (мобильный браузер, который по реализации стандартов застрял где-то в 90х)
    В-третьих, websocket кардинально отличается от ajax:
    ajax позволяет делать классические http запросы и работает по принципу запрос-ответ
    websocket же устанавливает постоянное соединение, после чего общение происходит в виде отправки сообщений, притом сообщения могут отправлять как сервер так и клиент в любой момент времени пока установлено соединение
    В-четвертых, конкретно в реализации websocket клиента в браузере есть ряд ограничений:
    Нельзя управлять заголовками при установлении соединения, единственный способ передать какие-либо данные на сервер в момент установления соединения - это url
    На протяжении всего соединения будет только один формат обмена данными, на выбор есть строки, ArrayBuffer и Blob. Если есть необходимость отправлять по сокету как бинарные данные так и строки, то строки придется на js паковать в ArrayBuffer или Blob и, соответственно, распаковывать обратно при получении сообщений
    В-пятых, хотя правильнее наверно в-нулевых, сервер должен уметь работать по протоколу websocket

    В целом, вебсокеты можно использовать как альтернативу ajax, в SPA приложениях он может даже дать прирост скорости в общении с серверным апи в виду постоянного соеденения, но есть свои заморочки:
    придется самостоятельно реализовывать систему запрос-ответ (тут можно взять такую вещь как socket.io и не парится, хоть и тормазнутая, зато удобная + есть имитация поверх других транспортов для всяких там IE9)
    при отправки больших данных, придется заморачиваться разбивкой на части, иначе другие сообщения будут ждать пока сообщение будет отправлено (не стоит отправлять больше 256кб за раз)
    Ответ написан
    1 комментарий
  • Есть ли подобие global из php в js?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    В javascript область видимости строится на замыканиях (вложенности функций), есть три оператора объявления переменных:
    var - переменная будет видна в текущей функции и во всех функциях объявленных внутри текущей функции, включая те, что объявлены внутри вложенных функций, данное объявление всплывает на начало функции не зависимо где в функции оно произведено
    let - переменная будет видна в пределах текущего блока после ее объявления (не всплывает в отличии от var), а так же во всех вложенных в текущий блок блоках и функциях
    Так же нужно отметить, что такое объявление произведенное в циклах создаст новую переменную на каждую итерацию цикла
    const - все то же самое, что и для let + значение нельзя изменить
    Важно отметить, что для объектов значением переменной является ссылка на объект, а не сам объект, то есть записать в такую переменную что-то еще нельзя, но состояние объекта менять можно

    При обращении к переменной она сначала ищется в текущей области видимости, а если в текущей области такой переменной не объявлена, то производится поиск в области видимости выше.
    Самой верхней областью видимости является глобальный объект, в нем поиск производится последним, если переменная не найдена и там, то будет возвращено значение undefined
    Важно: в strict режиме (который рекомендуется включать всегда) нельзя использовать не объявленные переменные за исключением в операторе typeof

    Многие среды исполнения js создают в глобальном объекте переменную содержащую ссылку на сам глобальный объект, например gui поток браузера создает несколько таких ссылок:
    window - глобальный объект текущего фрейма (вкладка браузера, попап-окно, iframe)
    top - глобальный объект самого верхнего фрейма (вкладки)
    parent - глобальный объект фрейма находящегося на уровень выше, либо равносильно top если текущий фрейм - вкладка браузера или попап-окно
    opener - глобальный объект фрейма, породившего текущую вкладку или попап-окно (может быть null, если текущая вкладка порождена самим браузером)

    В webworker'ах и webextension'ах браузера ссылка на глобальный объект хранится в переменной self
    В node.js - global

    Универсальный способ получить глобальный объект в любой среде исполнения:
    function getGlobal() {
      return (new Function('return this'))();
    }


    P.S. использование глобальной области видимости - дурной тон
    Ответ написан
    1 комментарий