Задать вопрос
  • Как наиболее приближенно возвести x^n == n^x?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Просто вычти из "х" значение 69, тогда оно станет равно 54.

    Правда, есть ещё одно подходящее значение х, чуть больше единицы, но его найти сложнее.
    Ответ написан
    1 комментарий
  • Check the manual that corresponds to your MySQL server version?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега MySQL
    Во-первых, не нужно использовать конкатенацию, нужно использовать подготовленные выражения.
    Во-вторых, точно не нужно использовать конкатенацию.
    В-третьих, значение телефона (и даты) нужно взять в кавычки, как всё остальное. Убедиться, что это решает проблему, а потом переписать на подготовленные выражения.
    Ответ написан
    2 комментария
  • Как скрыть ответ api от клиента?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Никак. Все что "загрузилось браузером" - доступно клиенту. Вопрос лишь в усложнение получения доступа к этим данным, например - разбить получение данных на разные части.
    Ответ написан
    2 комментария
  • Когда каскадное обновление это плохо?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Когда каскадное обновление это плохо?

    Каскадное обновление - в большинстве случаев это... глупо.

    Вспомним, что это вообще такое.

    Имеется связь, реализованная внешним ключом. Некое поле (в общем случае - выражение) основной таблицы, уникально индексированное, является значением, на которое ссылается некое поле (или выражение) подчинённой таблицы (возможно, и той же самой).

    По смыслу в основной таблице это поле - как минимум уникально. То есть с точностью до NULL оно является идентифицирующим - то есть если в этом поле не NULL, то определённое значение однозначно идентифицирует строго одну запись. В большинстве случаев же поле в основной таблице, на которое установлена ссылка в подчинённой таблице, вообще является первичным ключом, соответственно не может быть NULL и является истинно идентифицирующим.

    Что же есть каскадное обновление? Это изменение связанного значения в подчинённой таблице, если изменяется значение основной таблицы. Ну то есть если изменяется (вспоминаем сказанное выше) значение первичного ключа или поля, объявленного уникальным. В основной таблице. Ага...

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

    Практически всё то же относится и к корректировке просто уникального поля. За исключением случая, когда выполняется каскадное изменение значения поля, которое в основной таблице получило значение NULL. То есть когда выполняемая операция по смыслу является не обновлением, а "мягким удалением" основной записи с каскадным удалением всех подчинённых. Правда, на вопрос, как отличить мягко каскадно-удалённые подчинённые записи от мягко явно-удалённых, и как определить, с какой основной записью была связана мягко удалённая подчинённая, не залезая в журнал или бэкап, ответа никто не даст. А получается, что даже в случае исключения всё делается через "универсальный интерфейс", то есть косяк в проектировании структуры имеется и в этом случае.

    Резюмирую. Если каскадное обновление необходимо, оно скорее всего маскирует недостатки и ошибки проектирования. А плохо это или хорошо - прикрывать дырку костылём,- решайте сами.
    Ответ написан
    Комментировать
  • Как сделать правильное сравнение айди юзера из БД и переменной?

    @Everything_is_bad
    check_adm vs check_adm(), это не считая что дальше тоже всё плохо
    сначала решаем более простые задачи, только потом пишем ботов
    Ответ написан
    Комментировать
  • Почему не удается установить веб сокет соединение через телефон?

    Vindicar
    @Vindicar
    RTFM!
    ws://127.0.0.1:8000/
    Как по-твоему, что означает адрес 127.0.0.1?
    Ответ написан
    Комментировать
  • Что делать если домен не отображает все DNS записи?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    Вообще, dig считает что NS для citadel.crimea.ru -
    ns1.ht-systems.ru.
    ns2.ht-systems.ru.

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

    @pfg21
    ex-турист
    бумагоподатчик устал, протерся ролик захвата листов.
    разобрать, прочистить - авось восстановится работа.
    Ответ написан
    Комментировать
  • Как решить проблему подключения большого количества клиентов в одной WiFi сети (Keenetic)?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    имхо тут эфир забит. Разнести устройства по частотам - часть унести на 2.4
    Ответ написан
    Комментировать
  • Вычитаю одно округленное число из другого, в ответе выдается число с кучей знаков после запятой, как это исправить?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Добро пожаловать в реальный мир вычислений чисел с плавающей запятой с погрешностью! Если вам нужны точные вычисления - используйте тип decimal или аналогичный для вашего ЯП.
    https://habr.com/ru/articles/266023/
    https://learn.microsoft.com/ru-ru/office/troublesh...
    https://0.30000000000000004.com/
    Ответ написан
    2 комментария
  • Большое кол-во записей в секунду в MySQL. Как читать последний порядковый номер столбца и добавлять к нему +1 при записи?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Обычно при стриминге информации разделяют 2 процесса. Первое - это регистрация
    событий с устройств.
    Это обычно запись в Message Hub, Kafka, RabbitMQ, Apache Pulsar e.t.c.
    прочие брокеры или системы которые работают с очередью. Тут - главная задача просто успеть
    регистрировать событие. С этим системы очередей справляются отлично.

    При регистрации событий никакого синхронизма между устройствами нет и в принципе
    не может быть. По законам физики и по часовому времени и по прочим сложным процессам
    которые идут в мире. Мы не можем вообще гарантировать точного совпадения часов на всех
    устройствах поэтому фактор времени мы пропустим. К свойствам дублирования и грязи в атрибутах
    на этом уровне можно относиться очень толерантно и не требовать никакой сложной логики фильтрации.
    Если допустим 99.9% событий зашло ровными - оно и ладненько. Дальше почистим.

    Дальше идет - процессинг. Вот здесь уже может вступать в игру MySQL сервер с его логикой
    транзакций. Счетчиков. Уникальностей. Сурогатных или натуральных ключей. Партишенинга
    и прочего. Здесь у вас уже может возникнуть лимит на скорость генерации (inserts) но он будет
    мягкий потому что очередь уже смягчает удар.

    Если у тебя приложение - тайм-критичное и клиент хочет видеть КАЖДОЕ событие как счетчик
    в браузере то здесь тебе скорее всего надо отказаться от MySQL и попробовать что-то другое.
    Что - я не знаю. Надо исследовать глубже use-case. Обычно разработка таких систем - это
    компромисс между одним и другим. Идеала тут не будет.
    Ответ написан
    4 комментария
  • Как узнать, сколько дней осталось до Нового Года?

    @Everything_is_bad
    Но это только в этом году, а как сделать чтобы скрипт работал в любом году?
    т.е. ты смотреть на код и реально не понимаешь, код другой год сделать? Давай думать логически, ты знаешь как получать текущую дату? А наверно из текущей даты еще и текущий год можно узнать?
    Ответ написан
    1 комментарий
  • Какая АТС умеет работать с API?

    В Asterisk такое можно сделать аж двумя способами (как минимум):
    1. dialplan
    а. Можно через curl послать запрос:
    https://docs.asterisk.org/Asterisk_21_Documentatio...

    б. Можно заранее сопоставление входящего номера - внутреннего запихнуть в базу и потом через DB() вытаскивать

    в. Обратиться к произвольной базе через ODBC()

    2. рядом поставить сервер, который будет подключаться по AMI и посылать Redirect команду при поступлении звонка (какое там событие - не помню)

    Оба пути достаточно тяжелы. В одном случае тебе придётся писать монструозный диалплан и как-то интегрировать внешнюю систему с астериском.
    В другом - придётся учить внешнюю систему подключаться к астериску и мучаться с AMI.

    Если хочется быстро и грязно, то бери диалплан. Если хочется чуть менее больно в долгосрочной перспективе, то тогда AMI.
    Ответ написан
    4 комментария
  • Как грамотно указать источник фото?

    Тебе нужно найти автора/правообладателя, а не просто первый попавшийся сайт.

    Далее уже смотри на условия, по которым автор распространяет картинку - иногда использование/копирование вообще запрещено. Иногда даже ссылаться на оригинал не обязательно.
    Ответ написан
    3 комментария
  • Как попасть в ICQ после отключения сервиса?

    xez
    @xez
    TL Junior Roo
    Никак
    Ответ написан
    Комментировать
  • Какую сетевую карту выбрать для RDP на 20 человек?

    @Drno
    обычной встройки на материнке в 99% случаев будет достаточно
    Ответ написан
    Комментировать
  • Как пробросить внутренний номер аналоговой АТС в Asterisk?

    @Komrus
    CIO
    Если Гугл не врёт, то DAG2000-16S - это VoIP шлюз с портами FXS (т.е. в аналоговыми портами, которые сами "гудят" в линию)/ Предназначен для подключения аналоговых телефонных аппаратов.

    И у офисной АТС внутренние порты - это тоже FXS

    Соединять аналоговые порты телефонных линий надо FXS - FXO. (один - гудит в линию, второй - ждёт гудок)

    Т.е. - в Вашем случае нужен шлюз в портами FXO
    Ответ написан
    Комментировать
  • В чем ошибка SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) $params собственно нужен для биндинга, чтобы не вставлять данные прямо в запрос, так как это чревато инъекциями. По этому дебильный совет "просто поменяй на $stmt->execute();" желательно проигнорировать.

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

    3) Даже в таком виде как у вас запрос работать не будет, так как строковые переменные в рамках запроса должны быть в кавычках.

    4) WHERE $email что? Вы вообще понимаете что и для чего пишете? Просто переведя на русский "где емэйл" не кажется вам слегка странной конструкцией? Просто загляните в документацию SQL где описывается WHERE.
    Ответ написан
    Комментировать
  • Как найти решение для задачи?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Rsa97 правильно написал про геометрический смысл. Но есть более быстрое решение за O(n log n), использующее метод заметающей прямой.

    Пересеките все прямоугольники с тем, который надо покрыть, отрезав от них торчащую наружу часть.

    Если числа в задаче большие или нецелые, то сначала через бинпоиск или хешмап замените все координаты по X и по Y на их порядковый номер в отсортированном массиве (отдельно по каждой оси). Эта операция называется "сжатие координат". Теперь у вас все координаты целые числа от 0 до 2*n.

    Потом примените алгоритм "заметающей прямой". Представьте, что вертикальная линия двигается слева-направо и "заметает" картинку. Вам надо отслеживать, какие прямоугольники ее пересекают в каждый момент времени и проверить, что вся прямая покрыта в каждый момент.

    Для этого каждый прямоугольник (X1, Y1, X2, Y2) создаст 2 события "открылся отрезок с Y1 до Y2 во время X1" и "закрылся отрезок с Y1 до Y2 во время X2". Эти все события вы сортируете по X и в таком порядке обрабатываете.

    Для отслеживания состояния прямой используйте дерево отрезков на минимум с отложенной суммой. Эта структура данных потребует массив на примерно 4n элементов для дерева с 2n листами. Каждая вершина будет хранить минимум на соответсвующем ей отрезке. При открытии прямоугольника вы должны добавить +1 на его отрезок. При закрытии - вычесть 1. Сначала открывайте прямоугольники, если время у событий одинаковое. Учитывайте это при сортировке. Так касающиеся по вертикали прямоугольники не создадут пустых мест.
    Если после обработки какого-либо события вы получили минимум в дереве отрезков 0 и следующее событие имеет большую координату по X - то какая-то часть оказалась не покрыта. Еще есть случай, если первое событие не X1=левая граница покрываемого прямоугольника, или последнее событие - не X2=правая граница всего прямоугольника. Тут тоже покрытия нет.

    Еще, аккуратно с целыми числами, чтобы если у вас 2 прямоугольника касаются горизонтальными сторонами - там пустое место не подсчиталось. Например, каждый лист дерева отвечает за единичный отрезок координат. Тогда изменяйте в дереве всегда отрезок от Y1 до Y2-1 для события с координатам Y1..Y2.
    Ответ написан
    7 комментариев
  • Как в sqlite не обновлять столбцы, если значение в одном из них уменьшилось?

    Можно так:

    -- Создаём табличку
    CREATE TABLE IF NOT EXISTS employee (id int PRIMARY KEY, name text not null, salary int not null);
    
    -- Для примера две записи
    insert into employee (id, name, salary) values (1, 'Иван', 10000);
    insert into employee (id, name, salary) values (2, 'Пётр', 20000);
    
    -- Обновляем запись
    UPDATE employee set salary = 15000 WHERE id = 1;
    
    -- Обновляем запись с нашим условием - если переданное значение больше того что уже хранится, то вставляем его, иначе оставляем как было
    -- "переданное значение" тут =5000
    UPDATE employee SET salary = max(salary, 5000) WHERE id = 1;
    
    -- Ну и выбираем результат
    SELECT * from employee;


    В выводе будет:
    1 Иван 15000
    2 Пётр 20000


    Ну и ещё есть выражение CASE и функция IIF(condition, on_true, on_false).
    Ответ написан
    Комментировать