• Как вычислить виновника из-за которого отваливается интернет с какой-то периодичностью в маленькой сети?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Такого рода проблемы все и всегда решаются однотипно.
    1. Необходимо сформулировать критерии наличия проблемы.
    Как именно пропадает интернет, насколько часто, как надолго. Это нужно для диагностики. поиска причины и определения ушла ли проблема после принятия каких либо мер.
    2. Делить проблему на части и проверять части по отдельности.
    Самый эффективный способ делить - это пополам. Отсекаем часть сети и проверяем наличие проблемы в обеих частях (если есть возможность) или в одной из частей.
    3. Когда найден минимальный проблемный участок, который уже нельзя или бессмысленно делить - заменяем его.
    4. Помним, что чаще всего сложные проблемы - это композиция нескольких более простых. которые по отдельности могут не проявляться. В вашем случае может быть проблема, связанная с нагрузкой на роутер, например, которую создает один из услов из-за плохого контакта обжима и большого объёма биттых пакетов. Устранив одну из причин, вы, может быть, сделаете проявления проблемы реже, но не устраните её полностью. К примеру, если замените ротуер, битые пакеты будут всё равно будут нагружать вашу сеть и портить ее производительность, но это будет не так очевидно. Переобжав коннектор вы избавитесь от части нагрузки, но еслив ваш ротуер работал на переделе, то лишний вафай-клиент или тяжелый видос в сети сможет его снова нагрузить до критического снижения производительности.

    Итак, пробежимся по перечисленным пунктам сначала.
    1. Критерии. Поиск критериев - это часть решения. Обычно в этом случае нуно сорать необходимую статистику. Есть куча софта, который это умеет делать, но пинг есть всегда под рукой.
    Для этой тулзы есть две полезных опции: ключ для бесконечного пинга и размер пакета.
    В разных ОС эти ключи немного разные, поэтому ищите их отдельно, у меня нет винды под рукой, поэтому не стану на этом заострять.
    Скаж лишь, что пинговать лучше большими пакетами, жалетально превышающими размер TTL, прописанный в роутере. Тогда такой пинг будет реже проскакивать в периоды хорошей связи, то есть выловит больше пролблем.
    Пинговать нужно в отдельных окнах сразу несколько хостов:
    - ya.ru - этот хост всегда отвечает на пинги и выявит проблемы с DNS
    - 8.8.8.8 - это гугловый DNS-сервер, тоже всегда отвечает на пинги, покажет, что связь с инетом есть даже если DNS, прописанныйна компе не правильно работает.
    - 192.168.0.1 - или какой там IP у вашего роутера. Нужно. чтбы отделить проблемы с инетом от проблем с внутренней связностью до роутера
    - 192.168.0.x - ip одного из компов в сети. Я обычно пингую несколько компов, доступных через баксимальное число потенциально проблемных узлов - ethernet-розеток, свичей, вайфай-соединений... Этот пинг поможет понять где проблема, во внутрисетевой связности или в последней миле.

    Учтите, что проблемы часто бывают комбинированные и каждое сочетание симптомов будет свидетельствовать о раных проблемах.
    Да, тревожным принаком может служить не только пропадание пакетов, но и скачки в длительности их возврата, особенно если такие длительности достигают 500мс и выше. Но и скачки от 3мс до 250мс тоже будут свидетельствовать о каких-то проблемах.

    Запускать пинг на всех компах лучше одновременно и на некоторое время. Например минут на 20. Потом по статистике будет видно сколько где пакетов пропало.

    2. Если критерии наличия проблемы позволяют, то можно попробовать отрубать части сети и смотреть наличие проблемы. Это я в том смысле, что если проблема происходит в среднем раз в пару-тройку часов, то отрубать на многие часы части сети при диагностикем ожет быть неприемлемым.
    Редкеи пробемы дольше отлавливать. Но напоминаю, что критерии можно детализировать, ведь если пакеты у вас пропадат относительно редко, то скачки времени их возврата могут случаться чаще и подсвечивать проблему. Также можно сделать рамер пакета близким к максимальному, это должно тоже в некоторых случаях участить проявление проблемы.
    Иногда не мешает нагрузить сеть комированием по локалке большого файла. В линуксе можнно с помощью утилиты tc послать большой поток рандомных байт на любой сокет..
    3. Плавающие проблемы случаются из-за плохого обжима, перебитого жверью кабеля, перегрызенного UTP в плинтусе, из-за умиращих конденсаторов в блоке питания роутера (БП может не выдавать необходимого при нагрузках тока, но вольтметром такая неисправность не будет различима без нагрузки). Вообще старые (да и не только) роутеры могут страдать поплывшими электролитическими конденсаторами не только в блоках питания.
    Хорошо, когда можно подменить роутер.
    4. ну с четвертым пунктом ничего не пососветуешь, только разделать и тестировать все по отедльности и в разных сочетания и да поможет нам ктулху.

    А для тех, кто дочитал этот опус до конйа - интересная задачка. Что пингуют эти команды, как и почему?
    ping 1.1
    ping 2130706433

    Тех, кто знает, попрошу не спойлерить=)
    Пусть для кого-то будет сюрпризом этот дивный мир=)

    UPD. Простите за адское количество опечаток в тексте. Писал в спешке и с непривычной клавиатуры. Исправлю всё попозже. Не ожидал, что многим ответ придётся по душе. Вроде ж накапитанил как мог.
    Ответ написан
    5 комментариев
  • Что дальше учить?

    Kentavr16
    @Kentavr16
    long cold winter
    То что в темах - обязательная база JS. React это просто дополнительный инструмент в руках разработчика, это не другой язык, не другой принцип построения веб-сайтов. Обязательно все указанное учить. Все и с самого начала. Я сам пробовал "начинать учиться" с реакта. Глупость полная. Это как попытка начать залезать на лестницу сразу с 10-й ступеньки. Не выйдет.
    Ответ написан
    Комментировать
  • Что дальше учить?

    vabka
    @vabka
    Токсичный шарпист
    Коротко - да, надо всё. Не надо только если тебе фронтенд не интересен - тогда и React можно не учить.
    Раз ты не можешь сам оценить нужность этих тем для тебя - значит уровень знаний у тебя сейчас околонулевой.

    Длинно - пройдись по каждой теме по порядку:
    - Если можешь ответить конкретно на вопрос "что я получу, если изучу эту тему", то решай сам.

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

    Зря боишься потратить время зря - оно будет потрачено зря только если ты совсем решишь отказаться от фронтенда и уйти в радикально другую сферу.


    для чего они нужны?

    Ты ожидаешь, что тебе сейчас все 20 пунктов распишут?
    Не ленись - прочитай предисловие к каждому сам.
    Ответ написан
    3 комментария
  • Git что-то говорит, как убрать?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Гит не просто «что-то говорит», а конкретно сообщает что вы находитесь в состоянии незаконченного перебазирования и сообщает «как убрать».
    Вы должны либо продолжить и довести перебазирование до конца
    git rebase --continue
    Либо отменить процесс через
    git rebase --abort

    Я бы на вашем месте как раз отменил, так как вы делаете что-то странное. Сначала дропнули из истории один коммит, потом попытались применить его отмену и скорее всего получили сложный конфликт. Что вообще пытаетесь добиться?

    Если вы, не осознав что rebase ещё не закончился, продолжили добавлять новые коммиты, то тогда завершите rebase. А потом смотрите что получилось.
    Ответ написан
  • Где взять wysiwyg редактор?

    vicodin
    @vicodin
    Имею некоторый опыт
    Мне понравился Slate. Но у них апи часто меняется, они позиционируют себя как бета. При этом достойных аналогов не нашёл. Но его нужно собирать, я сам удивился, что на рынке нет готового адекватного решения, хорошо, что у Slate есть много примеров, и классная документация.
    Ответ написан
    1 комментарий
  • Где взять wysiwyg редактор?

    lazalu68
    @lazalu68
    Salmon
    Вот целый список действующих wysiwyg-редакторов: https://github.com/JefMari/awesome-wysiwyg
    Ответ написан
    Комментировать
  • На каком движке лучше создавать личный кабинет?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Делать надо на том, что лучше знаешь.
    Ответ написан
    Комментировать
  • Делегирование vs цикл, что лучше в целом и какие плюсы и минус?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    События так и так «катаются» по всему документу:
    ныряют от window через document, body и все родительские элементы, до кликнутого элемента
    и всплывают всю дорогу обратно до window. Почему бы не ловить их один раз, выше дна?

    Ещё один плюс: динамическое добавление новых дочерних элементов, на которых клики тоже понадобится обрабатывать. С делегированием не придётся дополнительно вешать обработчик: клик по новичкам будет обработан.
    Ответ написан
    2 комментария
  • Как скрыть пароль в php-коде?

    @humoured
    Вы всё на свете найдёте в коробке с карандашами
    Пароль нужно выносить из кода в отдельный файл конфигурации. Dotenv, например.
    Такой файл добавляется в .gitignore, не коммитится в общую кодовую базу и каждый разработчик будет наполнять его своими (или общими) данными. Ваш личный пароль не попадёт в чужие руки.
    Ответ написан
    31 комментарий
  • Как правильно выводить данные из дата атрибутов родителей в дочерние элементы в определенном порядке?

    0xD34F
    @0xD34F Куратор тега JavaScript
    document.addEventListener('click', updateCounter);
    document.addEventListener('input', updateCounter);
    
    document.querySelectorAll('.tariff__counter').forEach(n => {
      const max = n.dataset.seats;
      n.querySelectorAll('.tariff__counter-max').forEach(m => m.innerText = max);
      n.querySelectorAll('.amount').forEach(m => m.max = max);
      n.querySelectorAll('button').forEach(m => m.dataset.change = m.innerText === '+' ? 1 : -1);
    });
    
    function updateCounter({ target: t }) {
      const input = t.closest('.tariff__counter-block')?.querySelector('.amount');
      if (input) {
        const { min, max, value } = input;
        input.value = Math.max(min, Math.min(max, (value | 0) + (t.dataset.change | 0)));
      }
    }
    Ответ написан
    1 комментарий
  • Как сверстать блок с частью скрытого изображения?

    Starina_js
    @Starina_js
    full-stack web dev
    Не пробовал с видео, но с картинками точно работает .

    Допустим так
    clip-path: polygon(53% 0, 100% 0, 100% 49%, 100% 100%, 53% 100%, 52% 49%, 0 49%, 0 0);


    потыкать тут
    63b48f9c7a7e4557279691.png
    Ответ написан
    5 комментариев
  • Проблема с подключением Swipper, как устранить?

    sfi0zy
    @sfi0zy Куратор тега HTML
    Creative frontend developer
    Ошибки вида

    ... MIME type (‘text/html’) is not Executable ...

    или

    ... MIME type ('text/html') is not a supported stylesheet MIME type ...

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

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    Установить на сервере Node.js и запустить как на локальном компьютере. В чём конкретный вопрос?
    Ответ написан
    4 комментария
  • Почему выходит undefined?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. randNum содержит число.
    2. questFunc() возвращает строку с текстом вопроса.
    3. people[`${questFunc()}`] это, например, people["Это девушка?"] – будет undefined.
      Массив people не имеет строкового ключа. В нём два элемента с индексами 0 и 1.

    Я бы предложил не дублировать текст вопросов, а работать с их индексами. Так лаконичнее:
    spoiler
    const questions = [
      'Это самец?',
      'Это девушка?',
      'Носит очки?',
      'Занимается спортом?',
      'У этого человека смуглая кожа?',
    ];
    const people = [
      { name: 'Егор', profile: [1, 0, 1, 1, 1] },
      { name: 'Залина', profile: [0, 1, 1, 1, 0] },
    ];
    
    const questionElement = document.querySelector('.question');
    
    let questionIndex; // индекс текущего вопроса
    function askQustion() {
      questionIndex = Math.floor(Math.random() * questions.length);
      questionElement.innerHTML = questions[questionIndex];
      return questions[questionIndex];
    }
    
    askQustion();
    
    // TODO: принять ответ пользователя (true/false)
    const answer = true; // допустим, ответил "да"
    
    const candidates = people
      .filter(({ profile }) => !!profile[questionIndex] === answer)
      .map(({ name }) => name)
      .join(', ');
    
    console.log('Кандидаты:', candidates);
    Ответ написан
    Комментировать
  • Как задать задержку для fetch при скачивании более 4000 фото?

    RAX7
    @RAX7
    Помимо случайной задержки нужно еще ограничить количество одновременных запросов, примерно так:
    function randomDelay(min = 250, max = 750) {
      return new Promise((resolve) => {
        const ms = Math.random() * (max - min) + min;
        setTimeout(resolve, ms);
      });
    }
    
    function downloadAll(urls, limit = 4) {
      return new Promise((resolveAll, rejectAll) => {
        const result = [];
        const iter = urls.entries();
        let fulfilled = 0;
    
        const next = () => {
          const { done, value } = iter.next();
    
          if (done) {
            if (fulfilled === urls.length) {
              resolveAll(result);
              return;
            }
    
            return;
          }
    
          const [index, url] = value;
          const onFulfilled = (val) => {
            result[index] = val;
            fulfilled += 1;
            next();
          };
    
          randomDelay()
            .then(() => fetch(url))
            .then(onFulfilled, rejectAll);
        };
    
        for (let i = 0, l = Math.min(limit, urls.length); i < l; i++) {
          next();
        }
      });
    }
    
    const urls = Array.from(
      { length: 100 },
      (_, i) => `https://jsonplaceholder.typicode.com/todos/${i + 1}`
    );
    
    (async () => {
      const responses = await downloadAll(urls, 2);
      const data = await Promise.all(responses.map((r) => r.json()));
      console.log(data);
    })();
    Ответ написан
    1 комментарий
  • Как задать задержку для fetch при скачивании более 4000 фото?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Можно в N параллельных «потоков» скачивать. В каждом случайная пауза перед очередным URL:
    const N = 3;
    
    const delay = ms => new Promise(res => setTimeout(res, ms));
    
    const next = () => {
      if (items.length > 0) {
        return download(items.shift())
          .then(delay(500 + Math.floor(Math.random() * 500))) // случайная пауза между закачками
          .then(next);
      }
    };
    
    const works = Array.from({ length: N }, () =>
      Promise.resolve()
        .then(next)
        .catch(console.error)
    );
    
    Promise.all(works).then(() => console.log('All Done'));
    Ответ написан
    1 комментарий
  • Какое оптимальное время въехать в проект?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    От проекта зависит. На моëм проекте например новичкам даже сеньорского уровня до первой простой таски требуется недели две, а выход на 100℅ эффективность занимает 3-6 месяцев.
    Ответ написан
    9 комментариев
  • Должен ли программист выполнять роль девопса на сервере заказчика?

    saboteur_kiev
    @saboteur_kiev Куратор тега Веб-разработка
    software engineer
    С хрена ли это работа девопса? Поднять и запустить проект программист не способен?
    Девопс на отдельную ставку - это оркестрация сотнями и тысячами виртуалок/контейнеров/пайплайнов и так далее.

    А вот то, что это ввязали вам в работу это уже совсем другой вопрос, который должен был уточняться на этапе начала работ, в каком виде вы передаете проект.
    Ответ написан
  • Должен ли программист выполнять роль девопса на сервере заказчика?


    а договора небыло. просто был прислан текстовый файл с заданием и я ответил что сделаю это.

    Договор - это юридический документ с подписями сторон, чтобы в случае нарушений можно было отстаивать свои права в суде, обычно с адвокатом. В случае работы с заказчиком надо ещё ознакомиться с международным правом и другими тонкостями.
    Так что в твоём случае - это скорее, уговор(-чик) и с ним едва можно добиться чего-то, даже с адвокатом. А хорошие адвокаты за такую мелочёвку даже не возьмутся.

    Так что проще всего максимально оградить от проблем изначально, чтобы избежать недопонимания, как описал Владимир Коротенко . Ну и финансовая сторона. И действовать поэтапно, не выполняя работы без оговоренной предоплаты
    Сроки и всё такое - должно быть описано, чтобы всегда был пункт
    б) а если "так", то будет "вот так".

    Это можно писать простым языком, не юридическим. Никому не хочется заниматься с судами и многие вопросы лучше заранее решать за их пределами.
    Так что условия доставки ПО нужно хорошо обговорить. Кому-то достаточно доступа к GitHub,а кому-то нужно развернуть прямо в продакшен сервере. И даже на Маке ))
    Ответ написан
    2 комментария