• Почему пустой $_REQUEST после отправки формы?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    А зачем вам значение кнопки? Какая в этом логика?
    Это же не поле ввода какое-нибудь, не чекбокс и т.д.?
    У вас же всего одна кнопка submit.

    А что есть? Другие поля есть? Попробуйте:
    var_dump($_REQUEST);
    Ответ написан
    Комментировать
  • Внешние JS библиотеки или локальные, есть ли преимущества?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Лучше локально, потому что уменьшается количество точек отказа до минимума, коим является ваш сайт.

    Вообще от библиотек лучше отказаться. От тяжелых тем более. Но если очень хочется оставить, ваше право. С тяжелыми библиотеками первая загрузка сайта будет самая долгая. Затем все статичные файлы закешируются.
    Ответ написан
    Комментировать
  • Есть какие то особенности в законах к контенту 18+ в интернете?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Да, 18+ нельзя показывать детям.
    А также нельзя показывать детей кому угодно в 18+ контенте.

    Чёткой грани нет, пока что. Ютуб просто не хочет проблем разной степени сложности. Ютуб также и к авторскому праву серьезно относится, что может подкосить невинных, так что он не показатель вообще.
    Ответ написан
    Комментировать
  • Гугл таблицы - условное форматирование?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Выделяете столбец с наименованием и делаете условное форматирование.
    Нужно выбрать вариант "Ваша формула".
    А в условии прописать формулу:
    =OR(D7;F7)
    Где D7 и F7 - соответствующие ячейки, которые вы проверяете в строке 7 с орехами.
    Формула пишется только для первой ячейки в выделенном диапазоне, на остальной диапазон она как бы автоматически "растягивается" с учётом сдвигов.
    Ответ написан
    1 комментарий
  • Как сделать такую регулярку?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    \/\w+\/[0-9]+

    Есть специальные сайты, где вы можете "поиграться" с регулярками.
    Например:
    https://regex101.com/r/ncxyKP/1

    Также есть документация учебник.
    Ответ написан
    3 комментария
  • Как выделить (или сразу удалить) все строки в Notepad++ находящиеся выше-ниже какой-то?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Ctrl + Shift + Home - выделить всё от текущего места до начала файла.
    Текущее место - то, где стоит курсор. Так что если удаляете строки целиком, то ставьте курсор в начало или конец строки.

    Другой способ, более гибкий:
    1. Ставите курсор в начало (или конец) текста, который нужно выделить.
    2. Скроллите туда, до куда нужно выделить - начало файла, конец файла, какое-то место в документе и т.д. Для мегадлинных документов есть скроллбар, чтобы не мучить колёсико мышки.
    3. Зажимаете Shift + делаете клик мышью. Курсор ставится на новую позицию, при этом выделяется всё от старой позиции до новой.


    Это стандартные клавиши практически для всех редакторов текста, включая специализированные IDE и т.д. Всякие Shift + стрелки и т.д. Даже вот в форме ответа на Тостере это всё работает.
    Ответ написан
    2 комментария
  • Как организовать подмену сайта?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если сайт https, то c роутера - никак.

    Либо взламывайте сервер, где yandex.ru, либо взломайте центр сертификации (удостоверяющий центр), либо получите доступ к компу юзера и пропишите свои сертификаты, дальше дело техники.

    Единственное, что можно сделать, так это выцепить имя домена (yandex.ru) из https соединения и просто дропнуть само соединение. Но это ни разу не подмена.
    Ответ написан
    Комментировать
  • Оптимизировать код или как выделить всю вычислительную мощность пк на его выполнение?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Первое, что бросается в глаза - это многократное копирование массива. Представьте, что при сортировке мы бы после каждых двух-трех перестановок делали бы полный дубликат массива. Это же ужас! И это слабое место, постоянное перевыделение памяти больших размеров.

    Второе, что тоже важно - это сложность O(N*N). В вашем случае это критично, потому что много элементов в исходном массиве.

    Предлагаю немного изменить алгоритм. Делаем одно прохождение, но немного увеличиваем потребление памяти, в которой храним интервалы. Таким образом, мы избавляемся от постоянного копирования массива, а также уменьшаем сложность примерно до O(N).

    И маленькая оптимизационная хитрость - поиск интервала происходит по индексу, то есть O(1). Нужно немного поразмыслить, чтобы до этого догадаться, но в целом всё просто.
    Код
    <?php
    $arr = [100,125,75,175,25,300,275,325,375];
    $step = 50;
    
    $b = []; //-1 - deny, 0 - not set, 1 - has interval
    $int = []; //intervals if necessary 
    $step2 = intdiv($step,2);
    $arr = array_values(array_filter($arr, function($v) use ($step2,&$b,&$int) {
        $i = intdiv($v,$step2);
        $mod = $v % $step2;
        $res = true;
        if (isset($b[$i])) {
            if ($b[$i] === -1) $res = false;
            elseif ($mod < $int[$i][0] or $mod > $int[$i][1]) $res = false;
        }
        $b[$i] = -1;
        $b[$i+1] = -1;
        $b[$i-1] = -1;
        if (!isset($b[$i+2])) {
            $b[$i+2] = 1;
            $int[$i+2] = [$mod,$step2];
        } elseif ($b[$i+2] === 1) {
            if ($int[$i+2][0] < $mod) {
                $int[$i+2][0] = $mod;
                if ($int[$i+2][0] >= $int[$i+2][1]) $b[$i+2] = -1;
            }
        }
        if (!isset($b[$i-2])) {
            $b[$i-2] = 1;
            $int[$i-2] = [0,$mod];
        } elseif ($b[$i-2] === 1) {
            if ($int[$i-2][1] > $mod) {
                $int[$i-2][1] = $mod;
                if ($int[$i-2][0] >= $int[$i-2][1]) $b[$i-2] = -1;
            }
        }
        return $res;
    }));
    
    var_dump($arr); // [100, 175, 25, 300, 375]
    ?>

    Переписав алгоритм на С++, получите дополнительно 50-кратное увеличение скорости.
    Ответ написан
    3 комментария
  • Зачем/Для чего нужен данный код?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Это геттеры и сеттеры. То есть функции доступа к свойству.

    Зачем? Попробую объяснить простым языком. Большие программы сложно полностью загрузить в мозг отдельного человека и представлять всю структуру целиком со всеми нюансами одновременно. Поэтому принято делить программу на части. Вынос кода в отдельную функцию - один из простых способов. В ООП к этой проблеме подходят более основательно. Класс как явление - тому пример.

    Класс делит программу как минимум на 2 части - то, что внутри класса, и то, что снаружи класса. Считается как бы, что класс пишет один человек, а пользуется им другой человек. Но это может быть и один единственный человек, всё равно так проще, потому что человек сначала пишет класс, тщательно всё там кодит и тестирует, а потом напрочь ЗАБЫВАЕТ, как он устроен внутри, потому что он уже готов и им можно пользоваться. То есть человек выгружает из своей ненадежной человеческой памяти эту инфу и переходит к следующей задаче, в которой просто использует этот класс. Всё, что ему нужно помнить, это то, как пользоваться классом, а всю подноготную можно забыть до тех пор, пока не понадобится улучшить класс. И здесь снова получается удобно. Когда будем улучшать класс (это не обязательно тот же самый человек), можно не думать о том, как его используют. Главное, чтобы способ взаимодействия с классом не изменился (не сильно изменился).

    В вашем примере - это просто заготовка. Дальше нужно наполнять эту заготовку функционалом. В самом простом виде геттер просто возвращает приватное свойство, а сеттер меняет его. Так нужно сделать сразу, чтобы потом не пришлось переписывать всю программу (и согласовывать с коллегами). Но даже здесь уже есть небольшое правило - нельзя передавать отрицательные значения. Условия могут быть сложнее. И вообще всё может быть сложнее. Например, вместо age можно хранить дату рождения. И функция GetAge будет каждый раз высчитывать разницу с текущей датой. По сути для внешнего использования ничего не меняется, но внутри происходит магия.
    Ответ написан
    3 комментария
  • Как понять где проблема в сети, и точно ли в ней?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Любая проблема, тем более в сети, ищется методом исключения.

    Для этого делаете глобальное предположение, и пытаетесь его опровергнуть. Например, дело может быть либо в клиенте, либо в сервере, либо в обоих. Проверили - исключили что-то - дальше сужаете круг поиска. И так до тех пор, пока не попадете точно в причину.

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Да, условное форматирование. И это не обязательно формулы. Там есть разные варианты, например, точное совпадение, так что вместо формулы вы можете сделать три правила на совпадение числу.
    spoiler
    Есть кнопка добавить правило, после чего вы сможете создать второе, а затем и третье. Если закрыть и открыть окно с правилом (при выделенном диапазоне), то появится список существующих правил, можно удалить, редактировать, всё как у людей.


    Что же касается формул, то они ничем не отличаются от тех, что вы в школе изучали. Только вместо переменных x и y нужно использовать имена ячеек, которые по сути означают координаты (B2 - второй столбец и вторая строка). Формулы начинаются со знака =
    spoiler
    Вообще эта информация легко гуглится. Вот, например, нагуглил документацию за 30 секунд.


    Чтобы раскрасить формулой, нужно выделить диапазон, выбрать вариант форматирования "формула" и написать формулу для первой ячейки выделенного диапазона.
    Как-то так
    5cb692492a460902302817.png
    Ответ написан
  • Задача на удаление эквивалентных false элементов массива.Почему не работает мой код?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Нужно немного подробнее сделать отладку, и посмотреть внимательно, что происходит.
    Пример
    function bouncer(arr) {
      // Don't show a false ID to this bouncer.
      for(let i=0;i<arr.length;i++)  {
        console.log("Индекс:",i,"Значение:",arr[i]+'',"Отрицание:",!arr[i]);
        if (!arr[i]){
          arr.splice(i,1);
          console.log("Сработало условие, новый массив:",[...arr]);
        }
      }
      console.log("Итоговый результат:",arr);
      return arr;
    }
    
    bouncer([0, false, 7, "ate", "", false, 9, NaN]);

    Сразу станет видно, что при удалении элемента смещаются индексы, но вы их продолжаете перебирать по порядку. Следовательно, нужно либо возвращать индекс на 1 назад при удалении i--, либо перебирать массив с конца к началу:
    Решение 1
    function bouncer(arr) {
      // Don't show a false ID to this bouncer.
      for(let i=0;i<arr.length;i++)  {
        console.log("Индекс:",i,"Значение:",arr[i]+'',"Отрицание:",!arr[i]);
        if (!arr[i]){
          arr.splice(i,1);
          i--;
          console.log("Сработало условие, новый массив:",[...arr]);
        }
      }
      console.log("Итоговый результат:",arr);
      return arr;
    }
    
    bouncer([0, false, 7, "ate", "", false, 9, NaN]);
    Решение 2
    function bouncer(arr) {
      // Don't show a false ID to this bouncer.
      for(let i=arr.length-1;i>=0;i--)  {
        console.log("Индекс:",i,"Значение:",arr[i]+'',"Отрицание:",!arr[i]);
        if (!arr[i]){
          arr.splice(i,1);
          console.log("Сработало условие, новый массив:",[...arr]);
        }
      }
      console.log("Итоговый результат:",arr);
      return arr;
    }
    
    bouncer([0, false, 7, "ate", "", false, 9, NaN]);

    P.S. А для вставки кода в вопрос есть специальная кнопка, чтобы разметка не съехала.
    Ответ написан
    1 комментарий
  • Как сделать, чтобы эксель сохранял числа, а не даты?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Для десятичных дробей в excel используются запятая, а не точка.
    3,14
    Если использовать точку, то получаются даты. Отсюда и все беды.

    Победить можно несколькими способами разной степени кривизны.
    1) Сохранять не в csv, а в формат самого экселя, и лишь конечный вариант сохранять в csv.
    2) Добавить любой символ (например, х) перед числом. Получится х1.1, либо добавлять что-то в конец. Это сделает значение строкой без вариантов.
    3) Сохранённый csv каждый раз парсить скриптом после сохранения, чтобы заменять даты на соответствующие числа. Скрипт можно написать довольно быстро, любой программист управится максимум за полчаса.
    Ответ написан
    Комментировать
  • Почему возникает ошибка при использовании тернарного оператора, но нет ошибки при использовании if?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Потому что переменная point не определена к тому моменту, когда вы её используете.
    Поставьте ; и проблема будет решена.
    let point = {
      // .....
    }; // <-----

    Либо уберите скобки ()
    point.properties.color == 'red'? dangerPoints.features.push(point): points.features.push(point);

    Почему так - вопрос сложный. JavaScript - довольно запутанный язык с кучей нагромождений, так что лучше не пользоваться его "всеядностью", а соблюдать правила хорошего тона. Одно из них - точка с запятой.
    Ошибка
    let x=5
    (x)?1:2; //error
    Нормально
    let x=5;
    (x)?1:2; //ok
    Тоже сработает
    let x=5
    x?1:2; //тоже ок
    Ответ написан
    Комментировать
  • Как правильно составить регулярное выражение?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    class="project_line line project(\d+)" data-type="(?:newpost|[^"]+_adv)"

    Проверить
    Ответ написан
    Комментировать
  • Хочу написать свой интерпретатор языка программирования, в какую сторону копать?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Обратная польская запись (RPN).
    Ну или деревья.
    Ответ написан
    Комментировать
  • Индексация мультиязычного сайта с автоматическим определением языка?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    автоматически пользователя перенаправляет

    Если у вас перенаправляет с example.com/en на example.com/ru, то это плохо. Потому что пользователь на example.com/en явно хочет читать именно английскую версию, раз находится по этому адресу. Перенаправление с главной страницы ещё куда ни шло, а дальше выбор сделан (вами или пользователем) и не красиво его менять.

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

    P.S. И не забудьте про пользователей без JS. То есть в корне на example.com должен быть какой-то язык и хоть какой-то контент. Например, статичное меню выбора языка, но это уже дело вкуса, можно и просто контент из /en отображать, типа язык по умолчанию.
    Ответ написан
    5 комментариев
  • Как использовать регулярные выражения?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    \b - граница слова.
    /\bmini\b/i найдёт именно отдельное слово "mini", и не важно с чем граничит, с пробелом или началом/концом строки.

    Для кириллицы вместо \b в JavaScript приходится юзать что-то вроде этого:
    /(?<=[^а-яА-ЯёЁ\w]|^)мини(?=[^а-яА-ЯёЁ\w]|$)/i
    Ответ написан
    2 комментария
  • Как понять причину блокировки РКН?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Как понять причину блокировки РКН?

    Очевидно, посмотреть в реестре.

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

    Вот, скажем, мобильные операторы любят блокировать p2p трафик. Какая им разница, какой трафик, если тариф оплачен? Но, видимо, есть разница. Издеваются, короче. И что тут сделаешь? Можно забить. Можно уйти. А можно юзать p2p через VPN - и по сути трафик тот же будет, только через одно место.

    Как понять заблочен только этот ИП или вся подсеть?

    Можно с помощью расширения RKN Alert - оно умеет в поиск по базе РКН по ip. Правда, нормально работает, только если есть доступ к сайту.
    Пример
    5cb20bfe8fda6032134036.png
    Ответ написан
    Комментировать