Задать вопрос
  • Какие есть анализаторы трафика для windows попроще wireshark?

    Скорей всего, вам нужен не снифер, а прокси с подменой сертифката для анализа http/https, наиболее популярны
    Charles (платный), Fiddler (бесплатный), burp (есть бесплатная версия). Первые два приложения больше любят тестировщики, burp чаще используется при поиске уязвимостей.
    Ответ написан
    1 комментарий
  • Можете объяснить асинхронность в JS?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    WebAPI браузера поедоставляет вещи типа setTimeout, или async await, коллбек-функции которые закидываются в очередь, а оттуда в порядке своей приоритетности попадают в стек по очереди. Промисы обрабатываются в приоритетном порядке.
    Обычные callback-функции не попадают в очередь, они вызываются в общем стеке. Кроме промисов в приоритетную очередь микрозадач функция может быть добавлена через queueMicrotask(function).
    А что если "асинхронные" операции занимают много памяти и выполняются долго. Если они выполняются в том же стеке, то они также перекроют доступ ко всем остальным операциям?
    Асинхронные операции выполняются отдельными служебными потоками параллельно с основным стеком. Поэтому сами они не могут заблокировать основной стек. По завершению/таймеру асинхронная операция кладёт функцию в очередь микро- или макрозадач.
    Ответ написан
    Комментировать
  • Что за код на 10000 строк?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Ты не приложил код этого файла.
    Думаешь, что мы здесь все телепаты?
    Сейчас достану волшебный шар...
    Ого. Это код - обычный советский...
    Ответ написан
  • Что за код на 10000 строк?

    Это минифицированный код.
    Спрашивай у автора, где исходники
    Ответ написан
    Комментировать
  • Почему при верстке из figma получается не так как в ней?

    UnluckySerivelha
    @UnluckySerivelha
    Все хорошо с размерами в фигме.
    Экспортировал всю страницу из фигмы, наложил на верстку, получилось так.
    То есть начать стоит с того, что взят неверный размер контейнера.
    62e54f6e4e2c6573256089.png
    Допустим, возьмем размер шрифта 50px для цены и сверим, получится полное совпадение:
    62e54fc0e247d020133647.png
    Ответ написан
    3 комментария
  • Что означает жёлтый значок с восклицательным знаком на иконке жёсткого диска?

    yakovlev_13
    @yakovlev_13
    Шаманство, экзорцизм и некромантия.
    HDDlife стоит?
    Если так, то
    Цвет щита указывает на текущее значение «здоровья» дисков, а полоска - на процент свободного места.


    Есть подозрение что скоро сдохнет. Проверьте диск Викторией или подобной программой. скрины кидайте сюда.
    Будем смотреть вместе.
    Ответ написан
    7 комментариев
  • Отличия GET от POST?

    NikFaraday
    @NikFaraday
    Student full-stack Developer
    UPD: пример ниже приведён для MVC архитектуры. API выдаёт данные, а не страницы. HttpGet - это получение информации от сервера. HttpPost - отправка информации на сервер. Основная разница в тому, что Post запрос имеет тело запроса, в котором можно передавать сложные структуры. Get запрос может передавать данные через строку запроса

    HttpGet и HttpPost это два стандартных типа запроса. Так же есть HttpPut, HttpDelete и некоторые другие, основные из каких я перечислил сначала.

    Разница между HttpGet и HttpPost в очень простом виде:
    HttpGet - выдача сервером какой-то информации клиенту. Для примера, сервер отдаёт какую-то информацию, допустим, имя и логин пользователя, который зашёл на сайт, для того, что бы отобразить её где-то на странице. Так же Get запрос может отдавать целые страницы в формате HTML или других форматах. По факту, большинство страниц, что вы видите в браузере, включая эту, была передана нам в браузер от сервера путём выполнения запроса. Такая информация передаётся как HttpGet.

    HttpPost - это отправка данных на сервер. Любая. Когда вы регистрируетесь на сайте, ваши данные отправляются с использованием HttpPost запроса. Когда вы делаете изменения личной информации, обновлённые данные отправляются как HttpPost, хотя в REST API принято такой запрос помечать как HttpPut. Тут речь идёт об отправке сложных структур данных, возможно, фотографий, видео, аудио, информации о местонахождении, контактные данные. Т.е., другими словами, когда вы сервер уведомляете о какой-то новой информации.

    Стоит отметить, что редирект через url является HttpGet запросом. Если вы просто делаете переадресацию на какую-то страницу и в url передаёте id клиента (Для примера), что бы на странице сведений вывести его данные (Опять же, чисто для примера), это НЕ HttpPost запрос, это просто редирект. Потому что вы не обновляете никакую информацию. Когда вы обращаетесь к серверу с просьбой отрисовать/отрендрить страницу и передаёте туда id клиента, сервер отдаёт ответ на HttpGet запрос, который имеет разметку самой страницы.

    Иными словами, HttpGet запрос, это то, когда сервер должен отрисовать новую разметку или вернуть какие-то данные в некотором формате (В основном JSON для API). Может выполняться несколько запросов, если вы во время регистрации на сайте отправляете данные, делается сначала HttpPost запрос с отправкой ваших данных, а потом HttpGet, когда у вас рендрится новая страница, на которую вас перекинуло.

    Так же есть HttpPut - аналогия HttpPost, разницы нет почти никакой. Обычно используется для обозначения запроса на обновление информации, т.к. HttpPost должен работать как запрос на создание. Тот же пример HttpDelete - когда нужно удалить информацию.
    Ответ написан
    11 комментариев
  • Где здесь замыкание? О чем вообще речь?

    Vindicar
    @Vindicar
    RTFM!
    В коде создаётся анонимная функция, которая передаётся как параметр в setTimeout().
    Тело этой функции имеет доступ не только к своим параметрам (в данном случае их нет) и к своим локальным переменным, но и к локальным переменным той области видимости, где эта функция объявлена. В нашем случае это user.
    Ответ написан
    Комментировать
  • Как тестировать React веб-приложения?

    @dragonesis
    Вопрос задан не очень верно. React из него, на текущем уровне следует выкинуть.
    Далее ознакомится с пирамидой тестирования. Это уже закроет часть вопросов о том, что к какому типу тестов относится. Только после этого следует переходить к специфики реакта.

    Но если ответить на вопрос, то функции с помощью jest или аналогов.
    Сами компоненты React-Testing-Library + Jest
    Взаимодействие компонентов либо всё теми же React-Testing-Library + Jest, либо чем-то из интеграционных: TestCafe или Cypress или аналогом
    Ну и полные сценарии от открытия страницы до совершения последнего в цепочке целевого действия TestCafe или Cypress или аналогом

    Рекомендуют покрытие Unit тестов не менее 90%, причем после обработки через stryker mutator
    Интеграционные и e2e по критическим сценариям

    Как-то так
    Ответ написан
    Комментировать
  • В чем соль использования хука Reducer кроме того что "мы так привыкли делать в Redux"?

    miraage
    @miraage
    Старый прогер
    Если попробовать поразмышлять..

    useState подразумевает плюс-минус простой стейт, который удобно обновлять через либо setState(newValue), либо через setState(prevState => ({ ...prevState, key: newValue })).

    useReducer для более сложных кейсов, где хранить логику обновления в компоненте становится нецелесообразным и/или будет слишком раздуваться компонент. Или же где логика переиспользуется. Впрочем, то же самое можно сделать и через useState, создав свои хуки, которые под капотом юзают useState/useReducer.

    На выходе, самым логичным на ум приходит более плавная миграция в redux на useReducer.

    Проблема в том, что redux не нужен в 90%+ проектах, и его можно было заменить голым реактом с его инструментами.
    Ответ написан
    3 комментария
  • Что лучше, развернуть фронтенд и бакенд на одном домене или разных субдоменах?

    @romicohen
    Системный Архитектор
    Да воще поф ))

    Единственное что, на одном домене меньше возможной возни с CORS, но это такое себе, несущественное.
    Ответ написан
    2 комментария
  • Что лучше, развернуть фронтенд и бакенд на одном домене или разных субдоменах?

    pprometey
    @pprometey Автор вопроса
    Software & Devops engineer TS/JS/C#/Angular2+/K8s
    Мне понравился такой ответ:
    Будет ли API использоваться другими службами или он предназначен для внешнего интерфейса (например, маркетинговый сайт, мобильное приложение, третье лицо и т. д.).

    Оба способа могут работать, но в этом случае отдельный поддомен разделил бы проблемы.

    Если серверная часть специфична для приложения, я бы оставил ее в основном домене.
    Ответ написан
    Комментировать
  • Upwork всё, куда переходить?

    @vism
    Ребят, в Армению и дальше работаем в апворк, я тут уже 4 дня.
    Очень хорошо относятся, Армяне очень вежливые и культурные.
    99% разговаривает нормально по русски
    Есть яндекс такси, меняют рубли по очень хорошему курсу, можно без визы оставаться на 180 дней.

    Только огромный наплыв русских и кризис арендной недвижки в Ереване.
    Квартира в не вонючем подъезде где-то 1000 долларов, в других городах Армении около 300.
    Ответ написан
    2 комментария
  • Реально ли на чистом HTML, CSS, JS написать CRM систему как Basecamp?

    Wacdis
    @Wacdis
    PHP, Python, GO, Rust, NodeJS, SOA/MSA
    Почему нет?
    1. ТЗ (что должна уметь приложуха)
    2. Customer Journey Map (читайте что это)
    3. Верстка всех страниц, HTML+CSS сверстайте каркасы всех страниц
    4. PWA на чистом JS, база типа Firebase

    Но 2 недели на работу, которую ребята делали не один месяц, не junior-ы, и не сами...
    Ответ написан
    Комментировать
  • На собеседовании сказали, что не все функции - замыкания. Так ли это?

    @lazarevBoris
    Тред просто огонь!:)
    Дело в том, что такой же спор (из 8 страниц, на эту же тему) был не так давно на другом ресурсе, где мудрый дядька под ником "javascript" объяснял окружающим (которые тоже уперлись рогом, как и многие здесь), почему в js по факту всё является замыканием.
    Поэтому было крайне интересно, чем же и здесь дело закончится.
    И в очередной раз было доказано, что где бы ни была объявлена функция (а начиная с es6 и let - и блок кода) - она образует замыкание с цепочкой внешних лексических сред (или хотя бы одной LE), что полностью соответствует определению, предысторию которого хорошо описал Александр.
    Что наглядно изобразил Alexandroppolus (надеюсь, вы не будете против, если я достану ваш пример из jsfiddle и размещу здесь, чтобы он не пропал с течением времени):

    description:
    функция, созданная внутри iframe, замкнула внутрифреймовую глобальную переменную, и продолжает работать, даже когда фрейм удалили. Кнопкой frameValue можно убедиться, что в window той переменной нет.

    html:
    <script>
      var globalValue = 1000;
      var globalCounter = function() {
        return globalValue++;
      };
    </script>
    <div>
      <button>iframe counter</button>
      <button>globalCounter</button><br >
      <button>frameValue</button>
      <button>globalValue</button>
    </div>

    JS:
    const iframeHTML = 'iframe...<' + `script>
      var frameValue = 1;
      var counter = function() {
        // debugger;
        return frameValue++;
      };
      
      window.parent.iframeCounter = counter;
    <` + '/script>';
    
    function createTempFrame() {
    	const blob = new Blob([iframeHTML], {type: "text/html"});
      const frm = document.createElement('iframe');
      frm.src = URL.createObjectURL(blob);
      
      document.body.appendChild(frm);
      
      setTimeout(() => {
      	document.body.removeChild(frm);
      }, 900);
    }
    
    window.onload = function () {
      const buttons = document.querySelectorAll('button');
      
      buttons[0].onclick = function() {
        alert(iframeCounter());
      };
    
      buttons[1].onclick = function() {
        alert(globalCounter());
      };
      
      buttons[2].onclick = function() {
        alert(window.frameValue);
      };
      
      buttons[3].onclick = function() {
        alert(window.globalValue);
      };
     
      createTempFrame();
    };


    Так что да, автор треда, который ходил на собеседование, был прав, замыкание в его примере есть.
    Ответ написан
    1 комментарий
  • На собеседовании сказали, что не все функции - замыкания. Так ли это?

    @Vitsliputsli
    Абсолютно понимаю автора, он цитирует определение замыкания, а ему в ответ - определения не нужны, они лишь путают. Он спрашивает, а как тогда? Ему кто про мусорщик, кто про стек, и у него создается ощущение, что сами не могут договориться. Но кроме этого, автор прав, его функция - замыкание.
    Замыкания везде работают одинаково. Если функция содержит ссылки на переменные объявленные вне тела этой функции, и которые не являются ее параметрами - это и есть замыкание. Что значит фраза - все функции в javascript - замыкания? Дело в том, что в других языках область видимости может просто не позволить обращаться к внешним переменным, в таких языках функция не будет замыканием, но может быть возможность превратить функцию в замыкание через специальный синтаксис. В javascript таких манипуляций не нужно, поэтому в нем любая функция - замыкание.
    Т.е. замыкание это возможность в функции создать ссылки на внешние переменные. А здесь уже как следствие, работа мусорщика, если есть рабочая ссылка, то объект не уничтожается, а в приведенных примерах с 2 функциями она рабочая, так как можно получить доступ из корневого объекта, что удовлетворяет требованиям алгоритма mark-and-sweap. Но это следствие, а не принцип работы замыкания.
    Поэтому автор абсолютно прав - его функция это замыкание. Потому что ни в одном определении замыкания нет никаких упоминаний о мусорщике, а значит разницы нет на какие внешние данные ссылаться.
    Другое дело, все хотят видеть не замыкание, а его хитрое использование, а именно сохранение ссылки объявленной в замыкании при уничтожении ссылки во внешней функции. Не надо считать собеседующего бездарем, если бы вы ему объяснили свою точку зрения, он вполне мог бы и согласиться, хотя и не факт, многие собеседования проходят в виде допроса, что говорит о неадекватности или о слабой квалификации собеседующего, в такие конторы не стоит идти.
    Ответ написан
    1 комментарий
  • Для каждого проекта - свой набор плагинов. Как?

    Вы можете использовать Required Plugins опцию, которая позволяет для каждого проекта указать список плагинов, затем при открытии этого проекта IDE будет предлагать их включить/установить: https://www.jetbrains.com/help/idea/managing-plugi...
    Ответ написан
    3 комментария
  • Для каждого проекта - свой набор плагинов. Как?

    @mkone112
    Начинающий питонист.
    Да никак. Баг-трекер jetbrains завален подобными тикетами, первое упоминание от 2006 года.
    Ответ написан
    1 комментарий
  • Webstorm и поддержка php или стоит переходить на phpstorm?

    DevMan
    @DevMan
    All the features in WebStorm are included into PhpStorm, with full-fledged support for PHP and Databases/SQL support added on top.
    в сравнении пхпшторм и вебшторм у первого есть только один минус - цена.
    возможно, еще фронтОвые шняги в вебшторме появляются чуточку быстрее.
    Ответ написан
    5 комментариев