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

    @Mazino
    По идее в любом месте, кроме main файла:
    const { remote } = require('electron')
    remote.getCurrentWindow().close()


    в main файле вместо remote у вас есть app.

    там же должен быть подобный код
    win.on('closed', () => {
        win = null
    })
    
    app.on('window-all-closed', () => {
      if (process.platform !== 'darwin') {
        app.quit()
      }
    })
    Ответ написан
    Комментировать
  • Кто знает почему заблокирован https://html.spec.whatwg.org?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Расширение для хрома выдало моментальный ответ:
    5c97868a63f7a598852162.png
    нюанс
    Правда, такой отчёт в современных браузерах расширение может дать, только если доступ к сайту всё же есть.
    Ответ написан
    2 комментария
  • Как Yota блокирует Mtproto proxy?

    Предположительно, это из-за специфичного размера пакетов, используемого telegram
    https://habr.com/en/post/414099/
    Ответ написан
    Комментировать
  • Как Yota блокирует Mtproto proxy?

    @Asparagales
    Вот здесь можете почитать. Начиная со слов:
    Опять наблюдались случаи, когда некоторые крупные провайдеры блокировали IP-адреса, которых ещё нет в выгрузке Роскомнадзора. Это происходит, например, при использовании socks5-прокси без пароля для соединения с Telegram из сети MT_FREE московского метро (провайдер «МаксимаТелеком»).

    https://habr.com/ru/post/437024/
    Ответ написан
    2 комментария
  • Как Yota блокирует Mtproto proxy?

    @ynblpb_spb
    дятел php
    вероятно это поможет:
    https://juick.com/schors/2933433

    Сокрытие трафика. У MTProxy существует возможность подмешивать в трафик случайные данные, чтобы усложнить выявление характерных шаблонов протокола. Все перечисленные сервера поддерживают эту возможность. Для включения требуется добавить на клиенте к ключу, по которому вы ходите на прокси-сервер, два символа — «dd». Именно на клиенте, на сервере ключ остаётся как был. Некоторые сервера поддерживают «только dd-режим». Это не даёт 100% защиты, но усложняет работу по обнаружению. Я настаиваю, чтобы использовались именно dd-ключи.
    Ответ написан
    1 комментарий
  • Как подписать electron-приложения под windows?

    maaGames
    @maaGames
    Погроммирую программы
    Подписываю таким скриптом:

    signtool.exe" sign /a /f "maaGames.pfx" /p SuperPassword /t timestamp.comodoca.com/authenticode "my.exe"

    Правда сертификат не SSL, а самосгенерированный. А SSL сертификаты точно не только для сайтов годятся?
    Ответ написан
    Комментировать
  • Как сделать движение блока по параболе?

    @SelenIT3
    Как вариант, сделать 2 вложенных анимации. Сам объект двигать вверх-вниз с замедлением движения в середине, а контейнер с этой анимацией двигать линейно по горизонтали. Но насколько это будет эффективно — надо тестировать.
    Ответ написан
    Комментировать
  • Как лучше реализовать подобную сетку?

    @SelenIT3
    На макете видна именно сетка, которая напрямую переносится (и просится) в CSS Grid. Причем такая, с которой справится и старая версия гридов, которая есть в IE10+ — с явной привязкой каждого элемента к конкретной области.
    Ответ написан
    Комментировать
  • Css grid vs flexbox vs float?

    @SelenIT3
    Смотрите по задаче и предполагаемой аудитории. Если аудитория — чисто гики с новыми браузерами, то смело делайте на гридах с фолбэком на одноколоночный мобильный вариант (как советуют здесь). Если для широкой аудитории с пренебрежимой долей IE9- — делайте на флексбоксах. Если для госконторы, Китая или еще какой-то специфической аудитории с большой долей старых IE — лучше перестраховаться и сделать на флоатах. Но это именно исключение, для типичных случаев флексбоксы сегодня — золотая середина.

    P.S. Всё вышесказанное — именно про раскладку блоков страницы. По прямому назначению (обтекание элементов текстом внутри блоков) флоаты по-прежнему актуальны (особенно в сочетании с новыми возможностями типа shape-outside).
    Ответ написан
    Комментировать
  • Есть ли реальный профит от изоморфных приложений?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    скорость работы приложения значительно падает, если делаем его изоморфным


    В чем выражается? Как делали замеры? Почему медленнее?

    классический SPA работает намного быстрее, чем изоморф

    Разницы быть не должно вообще.

    Причины понятны - во первых увеличение ядра, во вторых периодическая перерисовка целых страниц.


    Опять же, ваше изоморфное приложение немного странное, по сути это должно влиять только на первую загрузку, затем все должно работать как SPA, никаких перезагрузок.

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


    Ну как бы тот же гугл учитывает стили при ранжировании (адаптация под мобильники и т.д.)

    В чем профит?


    Изоморфность нужна только для того, что бы уменьшить время отрисовки UI. То есть время между первым запросом и отрисовкой UI должно быть минимально. То что JS подгрузится секундой-двумя позже - это уже незначительная проблема, пользователь скорее всего первые секунды будет разбираться что он хочет делать дальше.
    Ответ написан
    23 комментария
  • Как автоматизировать работу небольшого кафе?

    @Luan
    Был опыт работы с Microinvest. Заказ с планшета приходит сразу повару на принтер чеков. Удобно и экономично. Вся настройка заняла 4 часа. Вместе с установкой оборудования. Программа Болгарская и служба поддержки немного долго реагирует, но качественно.
    Ответ написан
    Комментировать
  • Object doesn't support property or method 'find'?

    SPAHI4
    @SPAHI4
    реактовцы - это не девы, а прокидыватели пропсов
    1) может, у вас объект, а не массив
    2) в IE этого метода нету. Подключите babel-polyfill либо отдельно
    if (!Array.prototype.find) {
      Array.prototype.find = function(predicate) {
        if (this == null) {
          throw new TypeError('Array.prototype.find called on null or undefined');
        }
        if (typeof predicate !== 'function') {
          throw new TypeError('predicate must be a function');
        }
        var list = Object(this);
        var length = list.length >>> 0;
        var thisArg = arguments[1];
        var value;
    
        for (var i = 0; i < length; i++) {
          value = list[i];
          if (predicate.call(thisArg, value, i, list)) {
            return value;
          }
        }
        return undefined;
      };
    }
    Ответ написан
    Комментировать
  • Как включить поддержку HMR в webpack?

    Как вы запускаете webpack? Случаем, не `--hot` добавляете? Ошибка по виду похожа на два HotModuleReplacement плагина.

    Вот здесь посмотрите выпуск про HMR, learn.javascript.ru/webpack-screencast, может и вопросы снимет?
    Ответ написан
    4 комментария
  • Где почитать правила хаба "Я пиарюсь"?

    Boomburum
    @Boomburum Куратор тега Хабр
    Местный
    Почитать можно, например, тут. Вкратце, этот хаб относится к категории хабов-оффтопиков, которые как чемодан без ручки — нести тяжело, а выкинуть жалко. Держатся на грани тематики сайта, поэтому для публикации в такие хабы нужна высокая карма (≥5, а в «Я пиарюсь» так и вовсе ≥20).

    Публикации из этих хабов делают всё, чтобы не «отходить от темы»:
    — Не участвуют в Программе Поощрения Авторов;
    — Не индексируются в поисковых системах;
    — Не транслируются в социальных сетях;
    — Не попадают в раздел «Лучшее»;
    — Не вносят вклад в рейтинг;
    — Не приносят приглашений.
    Ответ написан
    2 комментария
  • Что такое Redux простыми словами?

    Лучшее объяснение Redux что я видел.
    getinstance.info/articles/react/learning-react-redux
    ba494148d28e422b4c7bd269de5bed09.png
    Ответ написан
    Комментировать
  • Что такое Redux простыми словами?

    edtoken
    @edtoken
    Full-stack Javascript/Python Developer
    В данном случае разное мышление (проектирование).

    В вашем случае:
    Логика идет от компонентов.
    Допустим на странице пользователя есть label online/offline
    Откуда брать значение, если нужно заблокировать окно чата в тот момент когда пользователь offline?
    Что если таких действий не одно, а допустим штук 10?
    Что если таких действий не одно, а допустим штук 10 и еще на разных страницах?
    Куда вынести функцию, которая проверит статус пользователя?
    Как её назвать чтобы не было конфликта имен?

    Redux для меня в первую очередь подход.
    1. Проектируется состояние (база данных фронта)
    {user:{online:false}}
    2. действие checkUserStatus (ajax/socket)

    3. сколько угодно компонентов (которые не знают друг о друге ничего и имеют любое поведение, в зависимости от статуса пользователя)
    компоненты могут ничего не уметь кроме как рендерить этот статус (label), или, могут быть более сложными и иметь логику + обработчики (кнопки, пр)
    Ответ написан
    4 комментария
  • Что такое Redux простыми словами?

    @KnightForce
    Чтобы понять как работает Redux тебе нужно норм вкуривать React.
    Хотя бы для того, чтобы не пугаться props.

    Есть у тебя React. Это все просто JS объекты.
    <Component /> - так позволяет писать движок jsx, который и React его использует.
    Так как структура компонентная, ты должен думать как обновить компоненты в в другой части страницы.

    Принцип такой: компонент обычно обновляется при получении новых свойств - props или когда меняется его объект состояния - state.

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

    Что делает Redux:
    Он не призывает отказываться от state.

    Но есть общий контейнер данных. И когда данные меняются - меняются и компоненты, которые отображают именно эти данные.

    Когда нужно что-то поменять - вызываешь dispatch - специальная функция reducer реагирует на это - и меняет данные как тебе нужно. Когда данные заменятся - компонент Propvider - вызывает рендер у своего дочернего компонента (тот что оборачивает Provider).
    Например:
    <Provider>
       <MyComponent />//Вот сюда Provider пробросит (запишет) новые props.
    </Provider>


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

    mapStateToProps - указывает какую часть этого глобального хранилища будет предоставлять provider.
    Если у тебя оно такое:
    {
       chunkStore: {},
       some: {}
    }

    То если mapStateToProps вернет{store: store.chunkStore}то Provider в props своего потомка пробросит такое: store: store.chunkStore. И ты будешь обращаться внутри к store, но там будет только часть chunkStore (не весь объект, а его поле).

    mapDispatchToProps - т.к. subscribe нет, то это возвращает функции, которые могут внутри себя вызывать dispatch().

    action - описывает то что и на что ты хочешь поменять. Какое поле и какие данные туда поместить.
    Ответ написан
    Комментировать
  • Что такое Redux простыми словами?

    jQuery "видит" весь DOM целиком. И манипулирует DOM-ом, доступ к которому предоставляет браузер. Но можно и по-другому.

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

    Затем отделим состояние от поведения и представления. Состояние можно описать статической структурой данных, JSON-ом, например. А поведение - это чистая функция, из предыдущего состояния и некоего события (действия) делающая следующее состояние. Представление же "знает", как визуализировать состояние. Можно этот принцип воспроизвести от самых мелких компонент (не имеющих потомков) в нашем дереве и до корня. Тогда весь жизненный цикл приложения можно изобразить как цепочку состояний от некоего начального и до текущего, ведомую событиями (действиями).

    Для того, чтобы это всё отобразить, не обязательно в ходе вычисления следующего состояния (или представления) сразу манипулировать DOM-ом. Можно построить из состояния и его представления фрагмент DOM-а, каким он должен получиться. А потом вычислить diff между этим построенным фрагментом (виртуальным DOM-ом) и реальным браузерным. И этот diff применить к реальному DOMу. Один раз. Получится быстро.

    Насколько мне известно (поправьте, если это не так), Redux заимствован из Elm-а. Elm - это экосистема и функциональный язык, компилируемый в JS, сделанный для того, чтобы фронтэнд можно было разрабатывать удобно, быстро и без runtime-ошибок. По синтаксису - это адаптация Haskell-a. Ключевым элементом Elm-а является как раз вот эта самая архитектура. Советую подробнее почитать в первоисточнике. https://guide.elm-lang.org/architecture/

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

    С точки зрения функционального программирования, при таком подходе текущее состояние является результатом функции leftFold, применённой к исходному состоянию, последовательности событий (действий), приводящих к текущему и функции, умеющей вычислять следующее состояние.
    Ответ написан
    Комментировать
  • JSDoc и документация на двух языках (Рус, Англ). Как реализовать?

    @eandr_67
    web-программист (*AMP, Go, JavaScript, вёрстка).
    А потом кто-то откроет этот модуль в NetBeans, или WebStorm и будет долго крыть матом разработчиков.

    Делай отдельный файл (или файлы) локализации, в котором английским текстам исходной документации ставятся в соответствие русские тексты.

    Т.е. что-то вроде:
    lang['Awesome method']='Крутой метод';
    Или какой-то свой формат, удобный для обработки. Но именно отдельно, а не в коде.

    Еще один вариант - писать оба текста в одном теге, но с указанием языка. Например, так:

    @method f
    @desc [eng|Awesome method][rus|Крутой метод]

    Подобный подход используется в wordpress-плагине для создания мультиязычных сайтов.
    Ответ написан
    4 комментария