• Выбор архитектуры: web или desktop?

    @rPman
    Web - на два порядка проще (читай дешевле) для разработки за счет повышенного требования ресурсов на клиентской стороне.

    Десктоп - возможно создание очень эффективных приложений но за счет очень дорогой поддержки всего разнообразия устройств и операционных систем (в веб этим занимается браузер и даже в этом случае приходится напрягаться)

    И главное, из веб приложения достаточно легко (например с помощью electron) можно сделать десктопное приложение.

    p.s. как бы я не нелюбил веб, который тянут даже туда где не надо, но его плюсы неоспоримы а страдающие клиенты от тормозов приложений, требующих топовое железо для простого чата... кто нас слушает?

    Кстати, один момент, тормозные веб приложения это не потому что веб такой плохой, это потому что разработчики ленятся делать все как следует. Рынок заполонили низкокачественные разработчики на основе веб. Помни об этом!
    Ответ написан
    Комментировать
  • Существует ли программа, отслеживающая изменения на заданных страницах сайтов?

    @As56
    Это самому написать легко
    Ответ написан
    Комментировать
  • Как можно с помощью js css, сделать линии на сайте, которые будут следовать за курсором?

    JRK_DV
    @JRK_DV
    Рецепты https://codepen.io/jrkdv/full/LKLXdq
    на указанном сайте в отдельном js файле подключается функция "initOciliator" она и создаёт анимацию
    https://codepen.io/jrkdv/full/qBYYPyw
    изменил оригинальную функцию на 200 строке, добавил смену цвета
    Ответ написан
    7 комментариев
  • Почему везде используют const вместо let в JS?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Редактор кода домой не отпустит, пока переменную, которую нигде не изменяют,
    не объявить вместо let — const )

    Иммутабельность должна быть явной!

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

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Object.values(data)
      .flatMap(({ person }) => Object.values(person))
      .filter(({ age }) => age === 18)
    
    // [ { name: "alex", age: 18 } ]
    Ответ написан
    2 комментария
  • Как подменить IP при раздаче с роутера?

    REZ1DENT3
    @REZ1DENT3
    web-developer
    Поднимаешь в РФ VPN (или арендуешь VPS в РФ) и подключаешься к нему на роутере. Заворачиваешь только необходимый трафик на роутере/пк в этот VPN.

    Те, тебе в любом случае нужен мост к серверу в РФ, чтобы ходить через него на необходимые сервисы.
    Ответ написан
    1 комментарий
  • Как парсить Ozon через Selenium и обойти их систему защиты?

    @TendingStream73
    Попробуй эту библиотеку
    https://pypi.org/project/st-undetected-chromedriver/
    Ответ написан
    Комментировать
  • Как скопировать текст из iframe в переменную js?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Если в iframe загружена страница с того же origin (протокол + домен + порт) откуда загружена текущая - то Вы имеете полный доступ к его window через свойство contentWindow. Соответственно можете обращаться к его DOM, глобальным переменным, менять их и т.д.

    Если в iframe будет страница с другого origin, то ничего этого нет, с ней можно лишь общаться через postMessage api, но если страница не Ваша, то и скрипт для обработки postMessage + каких-либо еще действий Вы туда не вставите.

    Если сторонний сайт отдает нормальные CORS заголовки при запросе с Вашего сайта (что судя по вопросу не так, но все же), то можно скачать страницу как текст через fetch api и распарсить ее через DOMParser.

    В противном случае остается только делать прослойку у себя на сервере, тут простор фантазии может быть очень широким, от банального reverse proxy прямо в nginx до чего-то более умного на любом серверном ЯП.
    Ответ написан
    Комментировать
  • Как сочетать BEM и динамический контент?

    qfox
    @qfox
    Ответы есть у меня
    У вас здесь 2 проблемы:
    • нужны ли классы для динамического контента;
    • как, если нужно, модифицировать структуру динамического контента.

    Проблема структуры не относится к BEM, она относится к семантике и SEO.

    Если же не смотреть на структуру и тэги (использовать ли small внутри или span, заворчивать ли в article) — то вопрос в сущности нужны ли классы на динамическом контенте или нет. Учитывая, что контент динамический, и нет необходимости иметь классы на тэгах, то допустимо сделать каскад на тэги от некоторого блока: например, dynamic-content или content, text.

    Почему именно теги? Потому что WYSIWYG по умолчанию генерирует теги. Но вы можете использовать какие-то доп. инструменты, которые подправят итоговый html, расставят классы и т.д. (например, с помощью инструментов типа https://github.com/posthtml/posthtml ).

    При необходимости можно дополнительно пометить стили тегов классами.

    <div class="text">
      <h1>Caption <small>Some Foo Bar</small></h1>
      <article>
        <p>Lorem ipsum...</p>
        <div class="text__p">Dolor sit...</div>
      </article>
    </div>


    .text h1, .text__title { /* main title styles */ }
    .text h1>small, .text__sub-title { /* sub-title styles */ }
    .text p, .text__p { /* paragraph styles */ }


    Таким образом вы инкапсулируете все пользовательские стили в одном месте (одном блоке) и не имеете проблем с созданием контента.
    Ответ написан
    2 комментария
  • Как пользоваться BEM?

    Machinez
    @Machinez
    1) Всё верно.

    2) В стилях блока мы описываем только его внешний вид, внутренние отступы и т.д, блок не знает где он находится и какой его размер, позиционировать можно элементы.
    к примеру у нас есть блок авторизации в хедере
    <header class="header">
      <div class="header__auth">
        <div class="auth">
          <div class="auth__item"></div>
          <div class="auth__item"></div>
        </div>
      </div>
    </header>

    в .header__auth мы описываем положение и размер элемента, в .auth описываем внешний вид.

    3) Только класс элемента, но бывают исключения, например используя модификаторы иногда можно воспользоваться каскадом.

    4) Может, называете точно так-же как и другие элементы
    пример:
    <ul class="props__list">
        <li class="props__item">
            <span class="props__label">Weight:</span>
            <span class="props__value">128</span>
        </li>
    </ul>

    хорошие примеры можете посмотреть тут

    5) Не совсем понял вопроса.

    6) cf = clearfix, общепринятый класс, используется как исключение из правил БЭМа, хотя и не приветствуется. Для интерактивности и щелчков нужно использовать модификаторы.
    пример:
    <a class="button button--is-active">click me</a>
    Ответ написан
    2 комментария
  • Без bem поддержка проекта сложна?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Системный подход должен быть, неважно какой. Если есть прослеживаемая система - поддерживать можно.
    Лично мне БЭМ больше импонирует. Но это скорее потому, что я чаще всего с ним работаю.
    Ответ написан
    Комментировать
  • Как разослать всем уведомление, не циклом?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Делаете составной уникальный ключ (`user`, `ho`) , после чего всё сводится к двум запросам
    INSERT INTO `mail` (`user`, `to`, `text`, `time`)
      SELECT 2, `id`, :text, :time
        FROM `users`
        WHERE `id`  != 2;
    
    INSERT INTO `contacts` (`user`, `ho`, `delete`, `time`)
      SELECT *
        FROM (
          SELECT `id`, 2, 0, :time
            FROM `users`
            WHERE `id` != 2
          UNION ALL SELECT 2, `id`, 0, :time
            FROM `users`
            WHERE `id` != 2
        ) AS `t`
      ON DUPLICATE KEY UPDATE `delete` = 0, `time` = VALUES(`time`);

    А вообще, какой-то жуткий легаси у вас. Библиотека mysql_ уже давно почила в бозе.
    Ответ написан
    31 комментарий
  • Как через os/exec запустить сторонний exe файл в GoLang?

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

    Несколько примеров:
    path := `c:\Program files\some program\program.exe`
    // аналогично вызову в консоли start "c:\Program files\some data"
    cmd := exec.Command("start", path)
    ......
    
    // аналогично вызову в консоли "c:\Program files\some program\program.exe"
    cmd := exec.Command(path)
    ......
    
    // аналогично вызову в консоли some_prog.exe -flag1 value1 -flag2 value2
    cmd := exec.Command("some_prog.exe", "-flag1", "value1", "-flag2", "value2")
    ......


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

    Кстати, если вам просто нужен полный ответ команды stdout+stderr, можете использовать метод cmd.CombinedOutput(). Он выполнил программу, дождется ее завершения и вернет полностью то, что она писала в консоль.
    Ответ написан
    7 комментариев
  • Почему тут не нужен return?

    nazares
    @nazares
    Software Engineer
    потому что return в цикле прервет цикл после первой же совпадении условия и в итоге посчитает только самый первый делитель его же и вернет.

    function getDivisorsCnt(n){
        let counter = 0
        for (let val=1; val<=n; val++){
          if (n % val === 0 ){
            counter +=1
          }
        }
      return counter;
    }
    console.log(getDivisorsCnt(12))
    Ответ написан
    1 комментарий
  • Как реализовать поставленную задачу?

    sHinE
    @sHinE
    веб-разработчик, php/js/mysql и сопутствующее
    Регуляркой вырезаете количество секунд.
    Создаёте промис.
    Делаете таймаут на резолв промиса с переданным именем через полученное количество секунд
    Возвращаете промис.

    Я бы как-то так сделал.
    Ответ написан
    1 комментарий
  • Как вернуть результат промиса в переменную?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ответ написан
    Комментировать
  • Как спарсить подобный сайт?

    fenrir1121
    @fenrir1121
    Начни с документации
    Как спарсить подобный сайт?
    Подобный чему?

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

    Сначала пробовал работать через api сайта.
    Демонстрируйте код.

    Логинился в селениуме, получал заголовки и делал запросы на нужную мне информацию
    Так через api или селениум, вы определитесь.

    Можно ли попытаться выдать селениум хром за сафари на iPhone, и есть ли вообще в этом смысл?
    Вы сами пишите что парсинг возможен только из под аккаунта и блочится аккаунт. Очевидно сайту все равно сколько устройств вы имитируете, если аккаунт один и тот же.
    Ответ написан
    3 комментария
  • Какой курс по пентестингу выбрать?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    https://training.csilinux.com/

    в форумах и телегах посмотри промо, чтобы бесплатно было, если вдруг он платный
    Ответ написан
    2 комментария
  • Что должен знать Front-end разработчик о серверной части?

    black1277
    @black1277
    Вольный стрелок
    Кто же его знает, что там у него на уме... Но исходя из уточнения, я думаю он хотел услышать про REST API, и особенно про Идемпотентность
    Ответ написан
    1 комментарий
  • Особенности работы функций?

    rqdkmndh
    @rqdkmndh
    Web-разработчик
    Наверное вы не сказали самое главное - что такие функции не загрязняют глобальное пространство имен(что исключает конфликты имен при использовании совместно разных библиотек) и поэтому являются прототипом для создания паттерна модуль.
    Ну, а вообще кто знает что они хотели услышать... Надо в конце все же спрашивать правильный ответ по мнению вопрошающей стороны.
    Ответ написан
    3 комментария