• Очень доступным языком о Long-Polling?

    planc
    @planc
    поковыряй пример https://socket.io/

    long polling используется, если клиент не может использовать websocket

    фишка в том, что вместо постоянного флуда новыми соединениями

    - есть что новое ?
    - нету !
    - есть что новое ?
    - нету !
    - есть что новое ?
    - { 'user': 'вася', 'message': 'привет'}
    - есть что новое ?
    - нету !

    происходит:
    - есть что новое
    ...
    ...
    ...
    ...
    - { 'user': 'вася', 'message': 'привет'}
    - есть что новое ?
    ...
    Ответ написан
    5 комментариев
  • Есть ли в VSCode горячая клавиша для отображения справки по функции?

    @alexstup
    Оркестр
    Тогда CTRL+K и за ним же CTRL+I (это i)
    В keyboards shortcuts называется Show hover, можете перебиндить
    Ответ написан
    Комментировать
  • Как правильно записать сцены в сессию telegraf.js?

    @getaxe Автор вопроса
    JS developer
    В общем, нашел причину.

    Оставляю ответ тут, ибо куча вопросов на хабре, и нет ответов.

    Суть в том, что Stage сделаны, чтоб заменять друг друга. А сцену нужно все помещать в 1 массив.
    Надеюсь помогу кому-нибудь.

    Было:
    bot.use(session());
    const giftCreate = new Stage([require('./scenes/giftCreate.js')(bot)]);
    bot.use(giftCreate.middleware());
    const giftUse = new Stage([require('./scenes/giftUse.js')(bot)]);
    bot.use(giftUse.middleware());
    const ы = new Stage([require('./scenes/priceEdit.js')(bot)]);
    bot.use(priceEdit.middleware());


    Стало:
    bot.use(session());
    
    const stage = new Stage([require('./scenes/giftCreate.js')(bot), require('./scenes/priceEdit.js')(bot), require('./scenes/giftUse.js')(bot)]);
    bot.use(stage.middleware());
    Ответ написан
    Комментировать
  • Почему aspect-ratio не валидно?

    aliencash
    @aliencash
    Партизан
    Цитата по MDN - Функцию attr() можно использовать с любым свойством CSS, но поддержка иных свойств, кроме content, является экспериментальной.
    Ответ написан
    Комментировать
  • Кто какой шаблонизатор использует для верстки?

    1. Если нужны примитивные импорты то можно добавить вызов модуля который "выполнит импорт" к примеру

    2. Если используется php можно воспользоваться Twig
    3. Если нужен полноценный шаблонизатор без привязки к бекенду мне нравится использовать
    Ответ написан
    Комментировать
  • Как сделать так чтобы форма не отправлялась по нажатию кнопки?

    Soldata
    @Soldata
    Программист, владелец IT-компании.
    Укажите у кнопки тип button, поскольку по умолчанию кнопка в форме имеет тип submit, поэтому и отправляет. А если указать тип button, то отправка не произойдет.
    <button type="button">Нажать, но не отправить</button>
    Ответ написан
    Комментировать
  • Есть ли плавный скролл между якорями на чистом JS?

    AleksandrB
    @AleksandrB
    Совсем недавно вывел "Hello world"
    var linkNav = document.querySelectorAll('[href^="#"]'), //выбираем все ссылки к якорю на странице
        V = 1;  // скорость, может иметь дробное значение через точку (чем меньше значение - тем больше скорость)
    for (var i = 0; i < linkNav.length; i++) {
        linkNav[i].addEventListener('click', function(e) { //по клику на ссылку
            e.preventDefault(); //отменяем стандартное поведение
            var w = window.pageYOffset,  // производим прокрутка прокрутка
                hash = this.href.replace(/[^#]*(.*)/, '$1');  // к id элемента, к которому нужно перейти
            t = document.querySelector(hash).getBoundingClientRect().top,  // отступ от окна браузера до id
                start = null;
            requestAnimationFrame(step);  // подробнее про функцию анимации [developer.mozilla.org]
            function step(time) {
                if (start === null) start = time;
                var progress = time - start,
                    r = (t < 0 ? Math.max(w - progress/V, w + t) : Math.min(w + progress/V, w + t));
                window.scrollTo(0,r);
                if (r != w + t) {
                    requestAnimationFrame(step)
                } else {
                    location.hash = hash  // URL с хэшем
                }
            }
        }, false);
    }

    <a id="scroll" href="#one">⇩</a> <!-- ссылка, по клику на которую осуществляется прокрутка к якорю -->
    <a id="one" name="one"></a> <!-- якорь, расположенный в произвольном месте страницы -->

    Если вы об этом
    Ответ написан
    3 комментария
  • Что лучше использовать в JS-синтаксисе: одинарные или двойные кавычки?

    @D3lphi
    Использовать надо одинарные кавычки. С ними, по моему мнению, код выглядит эстетичнее и проще.
    Ответ написан
    Комментировать
  • Как определить пользователя с мобильным устройством?

    rockon404
    @rockon404
    Frontend Developer
    const isMobile = /Mobile|webOS|BlackBerry|IEMobile|MeeGo|mini|Fennec|Windows Phone|Android|iP(ad|od|hone)/i.test(navigator.userAgent);
    Ответ написан
    Комментировать
  • Объясните, плиз зачем нужен react и vue?

    Ответ на вопрос "почему" заключается в одной емкой фразе: потому что сложно синхронизировать интерфейс и состояние.

    Представьте, что у вас есть простой UI какого-нибудь ToDoApp. Вам всего-то нужно сделать так, чтобы при вводе новой задачи она появлялась в списке, а при нажатии на крестик напротив удалялась бы. Проще простого!

    Но когда начнете решать проблему на нативном JS или на б-гомерзком jQuery, вы столкнетесь с необходимостью писать очень много шаблонного кода. Прежде всего на обслуживание DOM. Найти элемент, вставить элемент, добавить элементу класс, атрибут... в итоге у вас получится портянка на десятки строк для такой элементарной задачи, а ведь мы еще не добавили много кульных штук, без которых ToDoApp совсем не ToDoApp, как-то: возможность создавать разные списки, расписания, галочка, чтобы зачеркивать задачу и т.п. С реализацией всего этого ваша простыня будет расти, вы будете в ней путаться.

    На этом этапе вы можете начать велосипедить. Писать какие-то утилиты для работы с DOM. Разделите index.js на несколько файлов, сообразно DDD или хотя бы единой ответственности. Допустим даже, что вашим приложением внезапно стали пользоваться, у вас куча бизнес-идей. Вы начинаете наваливать фичи, структура становится все запутаннее, кода становится все больше, а еще приложение начинает тормозить. Вы проводите небольшой анализ и понимаете, что проблема в излишне частом обращении к DOM - вы дергаете его на каждый чих, ведь с jquery это так просто! И что делать? Писать еще один велосипед, чтобы обновлять DOM пакетно? А как отслеживать изменения в данных с сервера? Это ж сколько работы!

    К счастью, все вышеописанное, и даже гораздо больше, уже решено в Google, Facebook, а также некоторыми талантливыми энтузиастами. И у нас есть Angular, Vue, React, Svelte, которые предлагают вам возможность создавать быстрые, поддерживаемые приложения с минимумом шаблонного кода и продуманной архитектурой.
    Ответ написан
    Комментировать
  • Объясните, плиз зачем нужен react и vue?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Когда-то я писал на PHP. Писал много. Сначала это было месиво из кода на PHP и HTML, потом появились всякие шаблонизаторы, стало чуть чище.
    Проекты росли, кода становилось все больше и хотелось некоторые кусочки переиспользовать. Так я пришел к управлению кодом через Composer.
    На каком-то этапе разработки я столкнулся с тем, что у меня было 2 разных веб-интерфейса делающих одно и то же. Вдобавок нужно было часть данных отдавать в систему логистики. Причем это должно было быть автоматизировано. Тогда я уже знал, что есть такая штука - автоматизированные программные интерфейсы (API).
    Наскоро было что-то написано и оно заработало. По итогу, оба веб-интерфейса и система логистики использовали одни и теже функции. Но поддерживать 2 разных интерфейса было очень геморно. В те времены был jQuery самым главным. Очень сложно было добиться правильного отображения, посколько Javascript код был в перемешку с HTML, часть которого генерировалась из PHP. Возникали ошибки. Данных было много, разных скриптов было много (сотни), части скриптов были копиями друг друга с небольшими отклонениями. По итогу, на решение простых задач вроде редактирования строчки в таблице с обновлением на сервере уходило много времени, дни, иногда даже недели.
    Потом я увидел Mustache.js, это был предок Ангуляра и Реакта. Что-то вроде шаблонизатора, но только на стороне клиента. Работало оно только в одну сторону, отображало данные в HTML, но потом была та же жесть из jQuery.
    Затем я познакомился с Angular1. Идея была простая - пишешь шаблон, подставляешь в него данных. Оно отображается, само! Никаких тебе извращений, найди класс или идентификатор, или еще какая-нибудь ерунда.
    Кодить стало проще. Стало можно создавать библиотеки компонентов и просто редактировать стили. Можно было сделать компонент для ввода и проверки почты, и использовать его сразу во всех проектах и исправлять ошибки в одном месте, а не бегать по сотням скриптов и искать в каждом этот повторяющийся косяк.
    Поначалу я тоже относился к Ангуляру с предубеждением, столько траблов, стоят ли они того. Но как только я стал чаще сталкиваться с задачами, когда мне понадобились разные интерфейсы для отображения одних и тех же данных, это стало сходить на нет.
    Пока вы пилите простые штуки, всякие фреймворки вам не втарахтели. Даже jQuery не нужен. Но иногда начинается жопа, когда одному уже проект не вытащить, ибо охеренеть, как сложно, а еще и делать надо быстро. Поэтому лучше разделиться, кто-то делает бэкенд, кто-то фронт. Так просто удобнее, а общаться через API. Вначале вы вместе просто пишите спецификацию для API, это занимает день или два. А потом вы бомбите месяц в параллель. Причем фишка такого подхода в том, что есть инструменты, которые просто выдают заглушки для кода на фронте. Т.е. если фронт пишется быстрее, то его проще тестить и все такое. Аналогично с бэкендом. Его тоже можно тестить даже если фронт не готов. Причем эти все фишки особенно круты, когда вас не двое, а например 20, да и живете вы по всему миру в разных часовых поясах и т.д.
    Ответ написан
    1 комментарий
  • Синхронный и асинхронный код, почему так называется?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    А сам код синхронным не называется, это его по ошибке или для упрощения так называют. Синхронным и асинхронным называется только API ввода-вывода, т.е. операции, прерывающие исполнение кода и требующие от системы обратиться к внешнему устройству, работающему не синхронно с центральным процессором. Операции ввода-выдвода, каковые есть: работа с дисками, портами, контроллерами, периферийными устройствами, как клава, мыша, тачскрин, разные датчики, вебкамера, сетевые карты, блютузы и другие радиомодули, принтеры, видеокарты и прочее. Все они получают задание от программы, и исполняют его отдельно, своими мощностями. Потом внешние устройства присылают программе сигнал о статусе исполнения и, возможно, полученные данные. Программа все это время может ждать (если у нее синхронное API, т.е. блокирующее) или что-то делать (если асинхронное, т.е. не блокирующее). Если программа ждет, не переходит к выполнению следующего действия, то это синхронный ввод-вывод, потому, что осуществляется процесс синхронизации программы с внешним устройством. Внешне устройство посылает прерывание, которое обрабатывает операционная система и через несколько слоев драйверов оно попадает в программу, обычно в виде колбека или события. Если программа ждала, то вызов API не завершался, она все время слушала, когда придет событие о завершении операции ввода вывода, а получив его API отдает ответ и управление переходит к следующей команде, что и называется, синхронизацией с периферийным устройством. Если программа не ждала, то вызов API сразу завершается и не блокирует поток выполнения программ, это называется асинхронным API, потому, что процесс синхронизации не происходит явно, а ответы возвращаются через события.
    Ответ написан
    3 комментария
  • Шрифты CSS - Как сделать особенную W?

    EPIDEMIASH
    @EPIDEMIASH
    Человек швейцарский нож
    Скачайте нормальный шрифт и будет вам счастье.

    606824d448dec858956606.jpeg
    Ответ написан
    1 комментарий