• Как сделать такой след за движением мыши?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer

    Нужно только конфиг немного подкрутить. CURL: 2 и еще что-то на свой вкус, в идеале поискать конфиг на их сайте
    Ответ написан
    5 комментариев
  • Как лучше инициализировать объект?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    типа, антипаттерн...

    но это все равно вызов метода в конструкторе, что не приветствуется.

    Бред. Вот кем не приветствуется - вот он пускай и не приветствует и тихо миро плавает в своем болотце. Спокойно вызывайте приватный инициализатор в конструкторе - это как раз нормально. Конструктор - это и есть инициализатор объекта. Он даже называется "конструктор" - сборщик объекта. Его для этого и придумали. Выносить часть инициализации из инициализатора - на самом неделе не самая умная идея. А вот разбить инициализацию на разные логические части и разнести в разные методы - как раз таки очень даже хорошая практика. Декомпозиция, небольшие и простые функции/процедуры и все такое прочее.
    Ответ написан
    2 комментария
  • Почему возникает ошибка Maximum execution time exceeded?

    @402d
    начинал с бейсика на УКНЦ в 1988
    Нужно катать сферические шары в вакуме. Их 1000 штук. Работник каждые 30 секунд уходит покурить.
    Один шар он перекатывает за время от 1 до 3х секунд (то есть нет равномерности).

    Запрещаем ему курить пока не перекатит все. А он сволочь такая лажает постоянно.
    Решение
    Вместо цикла
    для всех шаров с 1 по 1000 делай катать
    пишем
    Напиши на доске номер шара - 1
    Цикл
    прочитай номер шара
    засеки время
    откати шар
    он 1000 - й , то ты свободен
    посмотри время
    если прошло больше 25 секунд, то запиши номер следующего шара и иди курить
    Ответ написан
    6 комментариев
  • Ошибка при отправке POST запроса на open server?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Проблема скорее всего тут .then(response => console.log(response.json())). И скорее всего в том, что твой сервер по адресу db.json отдаёт вместо json какую-то фигню. Открой вкладку Сеть в инструментах разработчика и посмотри, что тебе от сервера в ответ на твой POST приходит.
    Ответ написан
    7 комментариев
  • Как распознавать в php слова (типо систем компьютерной алгебры)?

    @Vitsliputsli
    Берете транслятор, если на основе php, то например phplrt. И пишите грамматику вашего языка. Перед написанием рекомендую прочитать "книгу дракона", это прям библия компиляторов, как минимум главы про грамматику.
    Ответ написан
    Комментировать
  • Как сделать, чтобы при каждом обращении к РНР скрипту, он выводил по две новые строки из текстового файла?

    Anastasia2306
    @Anastasia2306
    PHP-разработчик.
    нужно использовать array_slice без shuffle

    Если ты хочешь выводить строки с конца файла, то нужно будет использовать array_slice после array_reverse:
    Вывод по две строки с начала файла:
    $arr = file("reviews.dat");
    $res = array_slice($arr, 0, 2);
    
    foreach ($res as $str) {
        echo $str;
    }


    Вывод по две строки с конца файла:
    $arr = file("reviews.dat");
    $arr = array_reverse($arr);
    $res = array_slice($arr, 0, 2);
    
    foreach ($res as $str) {
        echo $str;
    }
    Ответ написан
    5 комментариев
  • Как сделать, чтобы при каждом обращении к РНР скрипту, он выводил по две новые строки из текстового файла?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Лучше оставить рандомный вывод.
    Усилия, которые вы затратите на вывод по порядку, совершенно не стоят результата.
    Если после одной перезагрузки выведутся те же две строчки - никто от этого не умрёт.

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

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Тут квадратное уравнение зарыто.

    Обозначьте |MSL_VEL - TGT_VEL| за t.

    Получите уравнение TGT_DIR = (MSL_VEL-TGT_VEL)/t

    Преобразуйте: TGT_DIR*t = (MSL_VEL-TGT_VEL)

    Но тут неизвестные вектор MSL_VEL и t. Но они связаны, ведь t - это длина вектора. Обозначим неизвестный вектор MSL_VEL как (x, y, z) Значит:
    t^2=(x - TGT_VEL_x)^2 + (y - TGT_VEL_y)^2 + (z - TGT_VEL_z)^2

    Ну и еще вы знаете, что скорость ракеты фиксированная же:
    x^2+y^2+z^2 = MSL_SPEED^2

    У вас тут 4 неизвестных и аж 5 уравнений (ведь первое - это векторное уравнение):
    TGT_DIR_x*t = x - TGT_VEL_x
    TGT_DIR_y*t = y - TGT_VEL_y
    TGT_DIR_z*t = z - TGT_VEL_z
    t^2=(x - TGT_VEL_x)^2 + (y - TGT_VEL_y)^2 + (z - TGT_VEL_z)^2
    x^2+y^2+z^2 = MSL_SPEED^2


    Раскройте скобки в 4-ом, подставьте туда пятое и из первых трех выразите x, y, z:

    t^2 = MSL_SPEED^2+TGT_SPEED^2-2*TGT_VEL_x*(TGT_DIR_x -t*TGT_VEL_x)-... = MSL_SPEED^2+(1-2t)TGT_SPEED^2-2(TGT_DIR*TGT_VEL)


    Там в конце векторное произведение векторов. Дальше сами раскройте и получите квадратное уравнение на t. Решите его по школьной формуле. Если дискриминант отрицательный, то решения тупо нет. Слишком быстро цель улепетывает. Потом не забудьте проверить, чтобы t получилось положительное. Потом подставьте t в первые 3 уравнения и найдите искомые x, y, z.

    Еще можно так себе это все представить. Свяжем систему координат с целью. Тогда множество точек, куда может смотреть скорость ракеты - это сфера с центром в TGT_VEL и радиусом MSL_SPEED. Вам надо выбрать на этой сфере точку так, чтобы она была коллинеарна с вектором TGT_DIR. Т.е. у вас есть луч из центра координат вдоль векторо TGT_DIR. Вам надо найти где он пересечет сферу. Введите параметр t вдоль луча и дальше получите то же самое квадратное уравнение.
    Ответ написан
    2 комментария
  • Как установить ОС с флешки через такой биос?

    @Drno
    Вот и выросло то поколение...
    как обычно - выбираешь свою флешку в boot разделе первой и запускаешься..

    либо f8 \ f9 \ f10 \ f11 \ f12 при старте - откроется меню загрузки

    Если биос ueffi - пишешь в этом формате флешку. Если нет - в формате MBR

    Писать можешь rufus - он бесплатен и умеет в оба варианта
    Ответ написан
    2 комментария
  • Как замокать и протестировать получение файла через fopen?

    @devian3000
    Можно пройтись хаком
    Создать обертку над протоколом https://www.php.net/manual/en/stream.streamwrapper..., зарегестрировать этот протокол https://www.php.net/manual/ru/function.stream-wrap...

    и вызов сделать что-то типо
    fopen("test://file1", 'r');

    должно сработать
    Ответ написан
    Комментировать
  • Как замокать и протестировать получение файла через fopen?

    каким образом можно замокать получение файла?

    Можно вынести чтение файла в FileReader и мокать его.
    Можно ничего не мокать и для тестов держать файл-фикстуру который будет читаться исключительно тестами.
    Ответ написан
    Комментировать
  • Как сделать поочередный доступ к сайту?

    @rPman
    В другом ответе все необходимое уже сказано, добавлю

    - организационный, вы пускаете за один и тот же компьютер людей по очереди, определяя следующего человека вручную.
    Развиваем идею:
    * добавить удаленный доступ по rdp/vnc/rustdesk/... чтобы пользователям не требовалось физически подходить к компьютеру
    * добавить автоматическое управление правами у пользователей (для rdp это штатные пользователи ОС, скрипты будут по нескольку строчек хоть на батниках), отбирая права у всех и выдавая право очередному пользователю по списку
    Ответ написан
    Комментировать
  • Как сделать aliases доступными при установке пакета?

    SeaInside
    @SeaInside
    15 лет пилю все эти штуки
    Не очень понятно, где проблема - под алиасами тут будто бы понимаются одновременно именованные экспорты из пакетов и одновременно алиасы для импорта внутри самого приложения.

    Если у вас внешний пакет (иначе непонятно, причём тут `main` в `package.json`), и вам нужно сделать экспорт конкретного файла по "короткому" пути, то следует оформить так:

    // package.json вашего пакета, допустим, "mypackage"
    
    {
      "name": "mypackage",
      "exports": {
        ".": "./dist/index.js",
        "./whatever/": "./dist/whatever/non-index.js"
      } 
    }

    Важно: это минимальная версия, там есть тонкости относительно разного экспорта ESM, CJS и d.ts файлов, но тут такой вопрос не стоит.

    Если у вас есть такой пакет, то в другом пакете, в который вы установили его как зависимость, вы можете импортировать по "короткому" пути:

    // "Короткий" импорт, без него пришлось бы делать что-то вот такое:
    // import { whatever } from 'mypackage/dist/whatever/non-index.js';
    
    import { whatever } from 'mypackage/whatever';


    ---

    Если речь идёт о том, чтобы использовать алиасы внутри одного проекта, то следует сконфигурировать алиасы в `vite.config.ts`, документация вот здесь, выглядеть будет примерно так:

    // vite.config.ts
    
    import { fileURLToPath, URL } from 'node:url';
    
    export default defineConfig({
      resolve: {
        alias: [
          { find: '~components', replacement: fileURLToPath(new URL('./src/components', import.meta.url)) },
        ],
    }),


    И в `(js|ts)config.json`, при наличии, добавить:
    {
      "compilerOptions": {
        "paths": {
          "~components/*": ["./src/components/*"]
        }
      }
    }
    Ответ написан
    4 комментария
  • Как получить переменную из callback php?

    Можно использовать замыкание. Тут фишка в том, что надо использовать в замыкании не обычную строковую переменную, а объект, потому что строковая переменная будет передана в виде копии, и не получится её изменить.
    В коде я заменил класс Client на его мок.

    class Client {
        public function miniTicker(array $callbacks) {
            foreach ($callbacks as $key => $callback) {
                $conn = 'aaaaa';
                $msg = 'msg-'.$key;
                $callback($conn, $msg);
            }
        }
    }
    
    class Message {
        public array $messages = [];
    
        public function addMessage(string $msg) {
            $this->messages[] = $msg;
        }
    }
    
    $message = new Message();
    
    $callbacks = [
        'message' => function ($conn, $msg) use ($message) {
            $message->addMessage($msg);
            
        },
        'ping' => function ($conn, $msg) use ($message) {
            $message->addMessage($msg);
        }
    ];
    
    $client = new Client();
    $client->miniTicker($callbacks);
    var_dump($message->messages);


    В результате в конце у нас выводятся все сообщения
    https://onlinephp.io/?s=tVK7boQwEOyR-IctkDDSkR8gR4...
    Ответ написан
    5 комментариев
  • Есть ли метод кеширования iframe стороннего сайта?

    yesbro
    @yesbro
    Думаю, помогаю думать
    Получать данные для ифрейма через отдельный пхп-скрипт, который будет их кешировать. Обновлять кеш с какой-то переодичностью (например запускать через крон). Данные для вывода на сайт брать из кеша.

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

    @Akina
    Сетевой и системный админ, SQL-программист.
    Есть ли другие способы как реализовать мою задумку или оптимизировать уже имеющийся?

    Да цельный воз и маленькая тележка.

    Обычно у каждой записи в БД имеется поле, в котором регистрируется штамп времени создания и/или последнего обновления записи. Так что всего и делов - запомнить, когда последний раз обращались к БД, и в следующий раз запросить те записи, что изменены позже. MySQL позволяет получать штамп времени с точностью до микросекунды.

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    AFAIK, телеграм требует, чтобы в течение 5 секунд ваш бот завершил обработку запроса и вернул код 200, в противном случае повторяет запрос, считая, что предыдущий не дошёл до бота. Если у вас есть какая-то долгая процедура, то лучше поместить задание в очередь, сказать клиенту "Подождите" и сразу завершить запрос. Отдельный обработчик должен прочитать задание из очереди, выполнить его и послать клиенту в телеграм полученную информацию.
    Ответ написан
    Комментировать
  • Как обновить блок после удаления и добавления и получить данные для редактирования?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Первое что надо сделать - нормальные запросы с подготовленными выражениями, а не дырявые инъекции...

    Второе - возвращать нормальные данные с понятным (машине) результатом операции, а не текстовый поток сознания. Для этого существует json, который обычно в подобных ситуациях содержит: Код ошибки, текст ошибки, и сообщение для вывода, где первое поле содержит цифру (обычно просто 1 в случае ошибки или 0 в случае успеха), второе поле является необязательным, но сильно облегчает дебаг, и третье - как раз может содержать ваше словесное описание.

    Далее, по результату выполнения операции на бэкенде, исходя из данных полученных обратно аяксом уже решаем что делать, если ошибка - ничего не трогаем, если ошибки нет - добавляем/удаляем строки в таблице. Удаление - банально что-то типа del_button.closest('tr').delete() (емнип). С добавлением сложнее, но в целом ничего особенного, можно засовывать в конец списка, так как не вижу там у вас никакой сортировки при выборке. Строку формируете либо в колбэке, либо можно возвращать готовую в дополнительном поле возвращаемого жсона, и уже оттуда только добавить готовую новую ноду внутрь таблицы.

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

    @WitER
    Для начала вам стоит правильно подготовить данные о файле, например(у вас же в $photo - путь к файлу хранится?):
    $filePhoto = new \CURLFile($photo, 'image/png', 'photo_' . $photo_number . '.png');


    После чего в опциях указать:
    $options = [
    // ...
        CURLOPT_POSTFIELDS => ['uploadfile' => $filePhoto]
    ];
    Ответ написан
    6 комментариев
  • Как перенести базу данных из СУБД Postgresql в MySQL?

    mikes
    @mikes
    может таки начать с https://developers.trueconf.com/api/server/ и перестать дергать таблицы с бд?
    Ответ написан
    Комментировать