• Как могли использовать уязвимость функции copy() в PHP?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Предположение не проверял.
    Может, парсер параметров copy() как-то особенно разбирает строки, и там символ form_feed или carriage_return позволяет перезаписать/игнорировать прилепленное в начале "/var/www/dir_1/"?

    Тогда переданный в него "\rhttp://site.com/bad_script.php" закачивает этот файл на сервер?
    Ответ написан
    9 комментариев
  • Как достать дату регистрации пользователя ВК?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    $date_str = simplexml_load_file('https://vk.com/foaf.php?id=1')
      ->xpath('//ya:created/@dc:date')[0];
    // 2006-09-23T20:27:12+03:00
    
    $now = new DateTime();
    $then = new DateTime($date_str);
    $interval = $then->diff($now);
    echo $interval->format('%a дней'); 
    // 4910 дней
    Ответ написан
    Комментировать
  • Реально ли купить уникальный ip?

    Один сайт напрямую, второй через бесплатный прокси CloudFlare.
    Третий – взять минимальную коробчёнку у др. провайдера, где поднять nginx или другой прокси.
    Пятый – на новом аккаунте AWS поднять минимальный бокс как прокси.

    p.s. От Google не скрыться 8 )
    Ответ написан
  • Почему while (i) – более краткий вариант while (i != 0)?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Внутри скобок while( ) выражение приводится к одному из двух: true или false. Цикл крутится, пока в скобках всё ещё получается true.

    Например:
    var i = 5;
    
    i != 0            // true, вальсируем дальше
    5                 // любое ненулевое число становится true
    "yes"             // непустая строка тоже true
    {a: "A", b: "B"}  // объекты всегда true
    
    0                 // false
    ""                // пустая строка, false
    undefined         // false
    null              // false
    NaN               // false


    Насчёт чисел ещё раз: только 0 даёт false, остальные числа true.
    Именно поэтому там, где интересует сравнение числа с нулём, удобно-коротко писать прямо число.

    Ещё
    Ещё откройте для себя логические операторы &&, ||, ! их можно использовать не только для проверки двойных условий, но и, например, задавать значение на случай нуля:
    var a = 0;
    
    var b = a || 42; // если a пустое. то в b попадёт запасное значение 42.


    А вот короткий способ привести любое значение к true или false, как внутри скобок while(): дописать перед ним два восклицательных знака!!expressionТут дважды применяется ! – логическое НЕ, которое уже при первом применении сделает из выражения true или false, только зеркально наоборот, и нужен ещё один перевёртыш, чтобы получить задуманное значение.
    Ответ написан
    1 комментарий
  • Интересный тест на логику. Кто может помочь?

    Идея такая:
    5e5e106de4417035621657.png
    Реализация, конечно же, должна быть лучше. В идеале обойтись бы без цвета.

    1. все точки разделены на 2 группы
    Цветные / чёрные

    2. каждая точка из группы 1 имеет 2 типа визуальных свойств, которых нет в группе 2
    форма, цвет

    3. весь ряд имеет одну точку акцента
    доп контур

    4. все точки в группе 2 имеют 3 уровня иерархии
    дерево вниз

    5. горизонтальное деление (ось х) всего ряда должно быть асимметричным
    вот тут не знаю, как быть, если окажется 5 и 5 без иерархии
    Ответ написан
    Комментировать
  • Как заставить volumes Docker compose не затирать данные из контейнера?

    Ожидаю что файлы из директории var/www/html попадут на хост в ./www

    Нет. Наоборот. Монтируется что-то (папка или docker volume) внутрь контейнера, заменяя собой ранее существовавшую (если) в контейнере папку. Или индивидуальный файл.
    volumes: 
       - /папка_на_хосте:/папка_в_контейнере_1
       - имя_тома:/папка_в_контейнере_2
    После этого, если внутри контейнера в этой папке создаётся файл, он оказывается в папке_хоста или томе.

    WordPress при запуске смотрит, есть ли его файлы в папке. И если папка пуста — инсталлируется, распаковывает все свои файлы в неё.

    При этом, разумеется, раз смонтирована папка хоста — все файлы появляются в ней.

    Т.е. нет изначально никаких файлов в контейнере в /var/www/html — будь она папкой контейнера или смонтированной в него папкой хоста или томом докера. При запуске, если там пусто, файлы создаются / записываются контейнером.

    Если хочется так же, создайте баш-скрипт entrypoint.sh, в который поместите логику инициализации приложения, в т.ч. копирование-создание файлов. Укажите его как ENTRYPOINT контейнера.
    Ответ написан
    Комментировать
  • Может ли приложение в ВК просматривать сообщения пользователя?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Может, если получит правильные разрешения. См., например, метод messages.getHistory() – сверху пишут, с какими разрешениями его можно вызывать.

    Методы работы с сообщениями доступны для Standalone приложений, авторизованных через Implicit flow – это если нужны диалоги с др. пользователями.

    Для работы с сообщениями вашего Сообщества достаточно ключа доступа Сообщества.
    Ответ написан
    Комментировать
  • Как повторить цикл в случае надобности?

    плохой ответ
    Поскольку кусок кода с циклом может выполняться несколько раз, хорошо бы его вытащить в отдельную функцию, к которой и обращаться по мере необходимости:
    def loop(n):
        for i in range(n):
            print('Privet')
    
    much = int(input('how much? '))
    loop(much)
    
    more = str(input('Еще? '))
    if more == 'yes':
        loop(much)


    Наверное, я не правильно понял условия.. Повторов «ещё» может быть сколько угодно, а не 1?
    Тогда можно и прямо в цикле. Но тут не подойдёт итератор range(), а лучше обойтись переменной, которую уменьшать от much к 0:
    much = int(input('how much? '))
    i = much
    while i > 0:
        print('Privet')
        i = i - 1
        if i == 0:
            more = str(input('Еще? '))
            if more == 'yes':
                i = much
    Ответ написан
    2 комментария
  • Передвинуть ползунок на JS?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    У мышиных событий могут проверять атрибут isTrusted, который у настоящих действий пользователя (click, mousemove) true, а при создании таких же событий скриптом — false.
    Ответ написан
    1 комментарий
  • Как перебрать все элементы множества в псевдо-произвольном порядке?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    Когда длина набора кратна степеням двойки можно перемешивать биты, адресующие элемент.
    В рамках одного порядка перемешивания битов адреса, все множество элементов однозначно («биективно») отображается в такое же по длине «перемешанное» множество.

    Вот пример кода:
    const src = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']; // массив элементов
    const key = [2, 1, 0]; // номера битов для перемешивания адреса
    
    const mapIndex = (n, key) => key.reduce((p,c,i) => p | ((1 << c & n) >> c) << i, 0);
    const biject = (arr, key) => arr.map((e,i) => arr[mapIndex(i, key)]);
    
    console.log( JSON.stringify(biject(src, key)));
    // ["a","e","c","g","b","f","d","h"] 
    
    console.log( JSON.stringify(biject(src, [1,2,0])));
    // ["a","e","b","f","c","g","d","h"]


    Disclaimer. Этот способ не исчерпывает все возможные перестановки, ограничиваясь их небольшой частью. Первый и последний всегда остаются на своих местах (все "0" как ни перемешивай..)

    Upd. отличный способ подсказали на SO. Когда длина массива N, нужно взять любое простое число больше N. Оно гарантированно будет взаимнопростым с любым из чисел меньше.
    Новый адрес элемента получается из старого: адрес умножить на простое и взять остаток от деления на длину.
    {
    const src = 'abcdefgh'.split('');
    const N = src.length; // 8
    const Prime = 37;  // Prime > N
    const mapIndex = (i, N, Prime) => (i * Prime) % N;
    //for(let i  = 0; i< 8; i++) console.log(i, mapIndex(i, N, Prime))
    const shuffle = (str, Prime) => str.split('').map((e,i,a) => a[mapIndex(i, a.length, Prime)]).join('');
    
    console.log( shuffle('abcdefgh', 17));
    console.log( shuffle('abcdefgh', 19));
    console.log( shuffle('abcdefgh', 23));
    console.log( shuffle('abcdefgh', 29));
    
    abcdefgh  // не перемешалось
    adgbehcf
    ahgfedcb
    afchebgd

    Для некоторых простых чисел почему-то не происходит перемешивания: для 17, 37 при длине массива 8.
    Ответ написан
  • Какой алгоритм составить для подбора количества банок?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    это называется «задача об упаковке» (packing problem) и решается полным перебором всех вариантов.

    «Желательно» – это доп. условие, задающее «вес» разным вариантам.
    Надо сформулировать функцию потерь: на входе комбинация банок, на выходе «штраф» за неё, который складывается из объёма перебора (недобор не должен вообще приходить), и, может, из количества мелких банок (чтобы минимизировать его).
    Перебирая все варианты, считать штрафы, оставлять варианты с минимальными штрафами.

    Несколько интересных алгоритмов. См. там ещё ссылки слева.
    Ответ написан
    5 комментариев
  • Где взять список дней, недель, месяцев Python3?

    >>> import time
    >>> import locale
    >>> locale.setlocale(locale.LC_TIME, "ru_RU")
    'ru_RU'
    >>> print(time.strftime("%a, %d %b %Y %H:%M:%S"))
    сб, 29 фев 2020 11:05:28
    Ответ написан
    3 комментария
  • Как поменять значения в выводе api?

    Чтобы возвращалось в градусах Цельсиуса (а то мало ли, в чём там : )
    w.get_temperature(unit='celsius')

    Для вывода что-то типа
    temp_dict = w.get_temperature(unit='celsius')
    print('Погода в Москве: {}°'.format(temp_dict['temp']))


    Смотрите, сколько интересного:
    Ответ написан
  • Синхронность ритма и клавиши. Как сделать?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Тут две задачи: воспроизводить в браузере midi-файл и оценивать попадание в бит нажатием клавиши.
    Легко гуглятся плееры midi-файлов для браузера. Но пока не заметил наличия у них API для выделения сильных долей. Ещё неудобство: midi — не ноты, там нет размера, темпа. Просто время начала ноты и её длительность в миллисекундах, условно.

    Лучше – проще. Я бы взял за основу проигрыватель лупов (коротких кусков аудио, которые можно воспроизводить циклично). Для них точно известна длительность, размерность (вручную, а слух, заранее), начало отсчёта. Загружаете с вашего сервера очередной аудиофайл. Воспроизводите его, смотрите, как близко к искомым моментам времени поступают события нажатия.

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

    С этим же «движком» вполне можно тренироваться и на целых песнях – попадать под фанеру. Вам только понадобится заранее каждый файл разметить: когда начало первого такта и какой точно ритм – чтобы сетка легла точно на всю песню и не съехала к концу.
    Ответ написан
    Комментировать
  • Как создать видео анимированного графика с сортировкой?

    Вот пример реализации с D3js: https://bl.ocks.org/mbostock/1584697
    Ответ написан
    Комментировать
  • Почему функция не находит?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    const find = Object.values(r).find(el => el[0].uid === 54); // [{uid: 54}]


    В массивах всегд единственный элемент вложен? Если нет, приводите полный пример всех «неудобных» случаев.

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

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Если картинка в несжатом формате, например, BMP, наверное, можно прямо с диска читать массив пикселей, разобравшись с форматом файла.

    Для сжатых форматов понадобится сначала распаковать изображение. Например, для PNG и библиотеки GD функцией imagecreatefrompng()
    GD не документирует прямой доступ к области памяти, где хранятся пиксельные данные полученного ресурса imageresource. Поэтому с ней единственный вариант перебирать в цикле.

    Посмотрите, что умеет ImageMagick. Например getImageColors()
    Ответ написан
    1 комментарий
  • Как найти элемент по тексту (текст в переменной) через jQuery?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    См. селектор :contains()
    var search = "hello";
    $(`li:contains(${search})`).css('background-color', 'red');
    Ответ написан
  • Как сравнить массив с объектом?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    const arr = [1,2,3,4];
    const obj = [{id:3},{id:5},{id:6}];
    
    const b = obj.map(o => o.id); // получили [3, 5, 6]
    const i = b.filter(el => !arr.includes(el));
    const o = arr.filter(el => !b.includes(el));
    console.log(`из arr удалено ${o.join(',')} и добавлено ${i.join(',')}`);
    // из arr удалено 1,2,4 и добавлено 5,6


    Или более абстрактно:
    const diff = (a,b) => ({
      i: b.filter(x => !a.includes(x)), // in
      o: a.filter(x => !b.includes(x)), // out
    });
    
    const data = diff(arr, obj.map(el => el.id));
    console.log(`из arr удалено ${data.o.join(',')} и добавлено ${data.i.join(',')}`);
    Ответ написан
    Комментировать
  • Оптимальная версия macOS?

    Самая свежая из тех, что могут на него встать.

    Catalina, пишут, можно.
    Ответ написан
    2 комментария