Задать вопрос
  • Какая АТС умеет работать с 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).
    Ответ написан
    Комментировать
  • Как реализовать идеальный метод indexOf?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вы неверно понимаете суть О-нотации. Почитайте книги Дональда Кнута про это.
    O(3) - это то же самое, что O(1). Нет разницы. O(N), O(N+1000), O(10*N) - это тоже одно и то же.
    В таких случаях речь всегда идёт не про конкретный кейс, а про обобщенный. Вы не знаете в каком порядке элементы вашего массива, где находится искомый, сколько всего элементов будет в конкретных кейсах, поэтому определяется ряд случаев: средний (по вероятности, если входные данные рандомные), худший (чтобы понимать границы и сколько может "висеть" алгоритм теоретически). Лучшие варианты обычно никого не интересуют, потому что и вероятность их мала, и смысла никакого нет в столь малых величинах.

    У вас типичный случай компромисса в реализации структуры данных. Вы всегда балансируете между памятью и скоростью. Больших семь шапок из овцы не выкроить никак.
    То есть, вы можете сделать такую структуру данных, которая "под капотом" будет держать древовидный индекс с данными или отсортированную по ключу карту значений для бинарного поиска. Хотя эти варианты - суть одно и то же.
    Если не рассматривается вариант размена производительности на память, то в этой задаче у вас будет только O(N) без вариантов.
    Если усложнить структуру данных, то можно добиться и O(logN) при поиске, и даже O(1). Почитайте как устроен словарь в питоне.

    Да, помимо сложности поиска у вас будет сложность вставки в структуру новых элементов. И тут опять трейд-офф. Ну а что вы хотели?
    Ответ написан
    3 комментария
  • Как добиться такого эффекта при наведении?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    Интересная задача. В общем весь фокус в том, что поверх видимых карточек, лежит точно такая же сетка с невидимыми карточками у которых есть только синий border. На сетку, которая лежит сверху, наложена маска:
    mask: radial-gradient(320px 320px at var(--x) var(--y), black 1%, transparent 40%);

    То есть у всего блока с синими border остается видимым только радиальный градиент в 320px, а x и y это координаты курсора. Ну и грубо говоря получается такая картина:

    Ответ написан
    4 комментария
  • Алгоритм поиска маршрута?

    @alexalexes
    Отложите питон в сторонку, откройте книжку по дискретной математике, на разделе теории графов. Изучите алгоритм Дейкстры, посидите пару часов с карандашом и листочком, промоделируйте на бумаге, как он работает.
    Ответ написан
    1 комментарий
  • Как лучше взять данные из большого файла по ключу не перебирая строки?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Удивительно. Судя по истории вопросов, человек вроде бы занимается программированием почти 10 лет, с 2016 года.
    Но до сих пор рассуждает, как Чебурашка:
    - Гена, давай я понесу чемоданы, а ты понесёшь меня!

    можно ли как-то эту нагрузку снизить


    Можно. Для этого надо разместить эти строки в базе данных.
    Ответ написан
    2 комментария
  • Как осуществить поиск (like) по полю в массиве в json колонке?

    @alexalexes
    Сделать нормализацию структуры базы.
    Перенести JSON в таблицу user_phone.
    Поля:
    phone_id, -- первичный ключ телефона
    user_id, -- внешний ключ, кому относится телефон
    phone, -- телефон
    phone_comment, -- комментарий к телефону
    -- еще поля по вкусу, но иногда выручающие
    is_main, -- основной не основной/порядок приоритета
    add_date -- дата внесения телефона
    И в запросах уже нормально джойнить и лайкать эту таблицу.
    PS:
    В качестве временного костыля (ни в коем случае не оставлять на постоянной основе!):
    SELECT Users.*,
           ph.value->>'phone' as phone
    FROM Users, json_array_elements(Users.phones) as ph
    where ph.value->>'phone'   like '7%3';
    Ответ написан
    3 комментария
  • Как организовать SMB c разными МФУ?

    @Drno
    Печать по внешнему IP? Чет не выглядит безопасно. Впн организуйте. И подцепите общее хранилище туда тоже
    Ответ написан
    2 комментария
  • Пожалуйста оцените стоимость доработки расширения для google chrome?

    yesbro
    @yesbro
    Думаю, помогаю думать
    Обратиться на сайт фриланса. Там дадут оценку.

    Просить оценку у человека, который не будет заниматься разработкой, нет смысла.
    Ответ написан
    Комментировать
  • Как доказать, что a³+b³+c³=3?

    @0x0f80
    Точного метода без перебора нет
    Ответ написан
    Комментировать
  • По какому принципу работает набор индексов в одной таблице?

    @Everything_is_bad
    Если я правильно понял, когда мы создаем индекс, у нас таблица изменяет порядок записей внутри себя сортируя их по указанным столбцам
    нет, никакой порядок не меняется, индекс это отдельные от таблицы данные

    И один индекс
    равен тому, если бы мы создали три индекса в такой последовательности
    нет, перестань уже придумывать и начни читать учебники и документацию

    Которые бы по очереди друг за другом добавляли правило сортировки в таблице, верно?
    опять ты что себе напридумал, нет никаких правил сортировки в таблице, индексы просто могут использоваться для ускорения сортировки

    Причем при изменении name обновление будет происходить дольше, чем при изменении price, потому что у нас price последняя в нашей очереди индексов по сортировке?
    когда фантазию уже не остановить
    Ответ написан
    4 комментария
  • Может ли приложение слушать несколько портов?

    @Everything_is_bad
    Не понятно какая связь между ядрами и портами? компьютер с один ядром может слушать N портов, компьютер с N ядрами так же может слушать N портов. Эффективность вообще тут боком, а для ее измерения минимум нужно установить критерий по которому ее фиксируем.
    ЗЫ взять тот же event loop в питоновском asyncio (на самом деле в остальных языках тоже дофига подобного), он без проблем может держать и обрабатывать 10к коннектов на одному порту, на одном процессе (считай ядре), но если кривыми руками там вызвать тяжелый синхронный код, то всё.
    Ответ написан
    9 комментариев
  • Зачем в toString и substring передаются аргументы?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    3 комментария
  • Как создать скрытый input для передачи технической информации на другую страницу?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    Какие могут быть варианты решения проблемы?

    Не выдумывать на ровном месте проблемы. Всё на стороне клиента можно отредактировать и подменить.
    Ответ написан
    2 комментария