• Какое оборудование нужно для соединения коммутаторов в разных зданиях на расстоянии 200 м?

    anthtml
    @anthtml
    Системный администратор программист радиолюбитель
    Вариант 1 (самый простой/дешманский): Делим участок на сегменты менее 100м, желательно чтобы стыки были в районе розеток. Покупаем самый дешевый обычный свитч DES/DGS-1005, подключаем и работаем
    Вариант 2 (по дороже): Вариант 1, только вместо свитчей POE-коммутаторы(инжекторы)/удлинители. Если к местам стыков нет возможности подвести 220В
    Вариант 3 (надежный/геморойный): Оптоволокно, если позволяют условия - можно купить готовый оконеченный патчкорд и протянуть, если нет - тянуть кабель и оконечивать. Любой провайдер подрядиться такое спроектировать/сделать.
    Вариант 4. (в прямой видимости): WI-FI радиомост на направленных точках доступа/антенах. Ну не забиваем, что от каждой точки доступа до ближайшего свитча также может быть до 100м
    Вариант 5. (когда проложить нет возможности): Использование технологий PLC (powerline) - подключение по существующей электропроводке, через спец адаптеры. VDSL - подключение по существующей прямой телефонной линии (1 паре)
    Вариант 6. (арендный) При наличии на обоих концах точек присутствия провайдера. Заказать услугу темного волокна или mpls, объединение сетей
    Вариант 7. (интернетный): При наличии на обоих концах точек присутствия провайдера. Объединение сетей через классический VPN.
    Ответ написан
    2 комментария
  • Как сделать сортировку HTML объектов в зависимости от чисел внутри элемента?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Как получить массивоподобные или итерируемые данные в отсортированном виде - функция сортировки получает данные и функцию, принимающую элемент данных и возвращающую его вес (может быть числом или строкой); собирается массив пар, состоящих из элементов данных и их весов; полученный массив сортируется, функция сравнения проверяет, как веса элементов соотносятся между собой; из отсортированного массива извлекаются элементы исходных данных:

    const sorted = (data, key) => Array
      .from(data, n => [ key(n), n ])
      .sort(([a], [b]) => a < b ? -1 : +(a > b))
      .map(n => n[1]);

    Как отсортировать содержимое DOM-элемента - да просто добавить ему это содержимое в отсортированном виде:

    const sortChildren = (el, key) =>
      el.append(...sorted(el.children, key));

    Направление сортировки будем указывать с помощью data-атрибута:

    <button data-order="-1">От большего к меньшему</button>
    <button data-order="+1">От меньшего к большему</button>

    Кнопкам назначаем общий обработчик клика, где сортируем содержимое .catalog-items (вес элемента - число внутри, умноженное на направление сортировки), кликнутой кнопке класс добавляем, у остальных убираем:

    const wrapper = document.querySelector('.catalog-items');
    const buttons = document.querySelectorAll('[data-order]');
    
    buttons.forEach(n => n.addEventListener('click', onClick));
    
    function onClick({ target: t }) {
      const order = +t.dataset.order;
      sortChildren(wrapper, el => parseInt(el.innerText) * order);
      buttons.forEach(n => n.classList.toggle('active', n === t));
    }
    Ответ написан
    3 комментария
  • Сайты для поиска единомышленников?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Нигде. Незачем middle+ разрабу работать над чужими идеями, он скорее всего завален высокооплачиваемой работой, очень ценит личное время и полон собственных идей.
    Ответ написан
    24 комментария
  • Как реализовать честную игру в Угадай число?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Где-то сто лет назад я такое видел. Без всяких заморочек с хешем, что для пользователя проблемно. Там был просто запороленный архив с результатом. Это намного проще.
    Ответ написан
    2 комментария
  • Как запретить вводить буквы в поле?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    <input class="input-number" type="number">
    Ответ написан
    4 комментария
  • Как удалить все классы, начинающиеся с определённой подстроки?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Кого надо удалить: const classPrefix = 'modal--';

    Удаляем:

    Array.from(el.classList).forEach(n => el.classList.toggle(n, !!n.indexOf(classPrefix)));

    или

    el.classList.remove(...[...el.classList].filter(n => n.startsWith(classPrefix)));

    или

    for (let i = el.classList.length; i--;) {
      if (el.classList[i].search(classPrefix) === 0) {
        el.classList.remove(el.classList[i]);
      }
    }

    или

    el.classList.value = el.classList.value
      .split(' ')
      .filter(RegExp.prototype.test.bind(RegExp(`^(?!${classPrefix})`)))
      .join(' ');

    или

    el.className = el.className.replace(RegExp(`(^| )${classPrefix}\\S*`, 'g'), '').trim();
    Ответ написан
    9 комментариев
  • Как получить доступ к [[Scope]]?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Никак. Нельзя просто так взять и вытащить данные из замыкания
    Ответ написан
    Комментировать
  • Как повторить каждый символ, чтобы количество повторений было равно его позиции в строке?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const xxx = str => Array
      .from(str, (n, i) => n.toUpperCase() + n.toLowerCase().repeat(i))
      .join('-');

    или

    const xxx = str => str
      .toUpperCase()
      .split('')
      .reduce((acc, n, i) => `${acc}${i ? '-' : ''}${n}${Array(-~i).join(n.toLowerCase())}`, '');

    или

    const xxx = str => str
      .toUpperCase()
      .replace(/(?<=.)./g, (m, i) => '-'.concat(m, ...Array(i).fill(m.toLowerCase())));
    Ответ написан
    Комментировать
  • Почему синхронный код в JS потребляет больше памяти?

    Fragster
    @Fragster
    помогло? отметь решением!
    await - это не "синхронно". Это синтаксический сахар. Соответственно, "внутри" всё то же самое, те же промисы и коллбэки. Скорее всего кушать память стало из-за кривого переписывания.
    Ответ написан
    Комментировать
  • Как понять что делает данный код php?

    v3shin
    @v3shin
    Веб-шаман
    Навскидку код развернулся в
    <?php
    $OO000O0000 = file(preg_replace("@\(.*\(.*$@", "", __FILE__));
    if (preg_replace("@\(.*\(.*$@", "", __FILE__) == __FILE__ or preg_replace("@\(.*\(.*$@", "", __LINE__) != 3)
        die("<tt>ERROR");
    function OOOO0000O0($a, $b)
    {
        if ($b == 162) {
            $d = substr($a, 1303, 8);
        } elseif ($b == 13) {
            $d = substr($a, 973, 330);
        } elseif ($b == 40) {
            $d = trim(substr($a, 1311));
        }
        return $d;
    }
    eval(base64_decode(OOOO0000O0($OO000O0000[0],13)));
    eval(OOOO0OOO0O(OOOO0000O0($OO000O0000[0],40),OOOO0000O0($OO000O0000[0],162),$OO000O0000));
    __halt_compiler();
    [binary]

    Дальше, как я понял, скрипт вырезает, декодирует и выполняет куски из [binary], туда я не лез. В общем, можете покопаться, но ЗАПУСКАТЬ НЕ СОВЕТУЮ.
    Ответ написан
    Комментировать
  • Как эффективно и лаконично отсортировать файл из строк не вмещающихся в память?

    Adamos
    @Adamos
    А зачем вам вся строка для сортировки?
    Вам она нужна только до того байта, который не совпадет с другими строками.
    Взять от каждой строки по 64Kб, отранжировать по отличиям в этой части, продолжить читать только у тех, у которых она совпадает. Повторять чтение кусков до прекращения совпадений.
    Ответ написан
    5 комментариев
  • Как сделать чтобы при нажатии на кнопку открывался только один элемент, а не все?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Сразу определим селекторы элементов и класс, они нам дальше понадобятся:

    const blockSelector = 'селектор блоков';
    const buttonSelector = 'селектор кнопок';
    const activeClass = 'класс, показывающий блок';

    Класс надо переключать не у всех блоков сразу, а у того, который соответствует нажатой кнопке. Как определить, какой блок нужен? Можно просто по индексу. Нажали третью кнопку - нужен третий блок. Как узнать индекс кнопки? Например, он передаётся в коллбек метода forEach. Т.е., в список параметров внешнего forEach добавляем индекс, и вместо внутреннего forEach выполняем обращение к соответствующему элементу коллекции блоков:

    const blocks = document.querySelectorAll(blockSelector);
    const buttons = document.querySelectorAll(buttonSelector);
    
    buttons.forEach((n, i) => {
      n.addEventListener('click', () => {
        blocks[i].classList.toggle(activeClass);
      });
    });

    Кстати, создавать отдельные обработчики клика для каждой из кнопок не обязательно, можно сделать один общий. Как при этом получать индексы? - их можно прицепить прямо к кнопкам. Например, в виде data-атрибута:

    const onClick = function({ currentTarget: { dataset: { index } } }) {
      this[index].classList.toggle(activeClass);
    }.bind(document.querySelectorAll(blockSelector));
    
    document.querySelectorAll(buttonSelector).forEach((n, i) => {
      n.dataset.index = i;
      n.addEventListener('click', onClick);
    });

    Также есть вариант вычислять индекс при клике:

    const blocks = document.querySelectorAll(blockSelector);
    const buttons = document.querySelectorAll(buttonSelector);
    
    buttons.forEach(n => n.addEventListener('click', onClick));
    
    function onClick() {
      const index = Array.prototype.indexOf.call(buttons, this);
      blocks[index].classList.toggle(activeClass);
    }

    А вообще, если у каждой из пар кнопка-блок есть отдельный общий предок (const containerSelector = '...';), то индексы не нужны. Достаточно от нажатой кнопки подняться до общего предка кнопки и блока, и найти внутри блок (а можно даже и не искать, если добавлять класс контейнеру; конечно, стили придётся в этом случае немного изменить, вместо .блок.класс будет .контейнер.класс .блок):

    const toggleBlock = button => button
      ?.closest(containerSelector)
      ?.querySelector(blockSelector)
      .classList
      .toggle(activeClass);
    
    
    // можно добавить обработчик клика каждой кнопке индивидуально
    document.querySelectorAll(buttonSelector).forEach(function(n) {
      n.addEventListener('click', this);
    }, e => toggleBlock(e.currentTarget));
    
    // или один раз на всю страницу
    document.addEventListener('click', e => {
      toggleBlock(e.target.closest(buttonSelector));
    });
    Ответ написан
    Комментировать
  • Как защитить сайт от копии-подделки с рекламой?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    У поисковых систем есть формы жалоб, в том числе на такое.
    Ответ написан
    Комментировать
  • Как защитить сайт от копии-подделки с рекламой?

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

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Сначала выделяется массив какого-то размера, например 256. Обычно длина - степень двойки. Потом хеш обрезается до размера таблицы. Если элементов становится слишком много, то происходит перехеширование - размер таблицы увеличивается, и все элементы в нее перезапихиваются.

    Но да, если в таблицу запихать много элементов, а потом почти все оттуда удалить, то она будет большая и почти вся пустая.

    Edit:

    Эта "проблема" никак не решается. Это и не проблема вовсе. Просто хеш-таблицы работают быстрее всяких балансированных деревьев или тупо сортированного массива за счет большего расхода памяти. Это нужно знать и дальше уже решать - что вам больше подходит под вашу конкретную задачу.
    Ответ написан
    Комментировать
  • Как заменить часть строки данными из массива (php)?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    8 комментариев
  • Как сложить значения объектов массива в новый массив?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    items.map(el => el.id);
    Ответ написан
    6 комментариев
  • Почему при обращении по ключу объекта, который сам (ключ) является объектом, всегда возвращается значение последнего ключа?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Ключи объектов - это строки, если использовать нестроковое значение в качестве ключа, оно будет преобразовано в строку, дефолтное строковое представление объекта - это "[object Object]". Всё.

    Хотите, чтобы объект реально был ключом - записывайте его в Map вместо простого объекта. Или научите свои объекты представлять себя в виде строки, переопределив у них метод toString (конечно, поступать так имеет смысл только в том случае, если вы можете гарантировать, что строковые представления будут уникальны).
    Ответ написан
    5 комментариев
  • Как правильно закрывать от индексаций страницы для yandex?

    pro100taa
    @pro100taa
    Проходит уже 3й день


    Подождите. Рано еще. Куда так торопитесь. Яндекс может robots.txt месяц обрабатывать. Можете ускорить если по префиксу удалите страницы в ЯВебмастере.
    Ответ написан
    2 комментария