Задать вопрос
  • Python requests почему не работает код?

    Vindicar
    @Vindicar
    Алексей Романов, "только что работало" - не всегда аргумент, гугл мог что-то поменять на своем сайте - и привет.
  • Алгоритм получения квадрата по координатам?

    Vindicar
    @Vindicar
    Нам нужно найти проекцию анализируемой точки (x0; y0) на отрезок (x1;y1)-(x2;y2) маршрута. Тогда мы сможем понять, лежит ли эта проекция на отрезке. Если лежит, то расстояние от точки до проекции - это расстояние от точки до отрезка. Если не лежит, то расстояние от точки до отрезка - это расстояние от точки до ближайшего конца отрезка. В целом алгоритм примерно таков:
    1. Выбираешь две соседние точки из маршрута.
    2. Составляешь уравнение прямой. проходящей через эти точки. Обычно оно имеет вид (x - x1) / (x2 - x1) = (y - y1) / (y2 - y1), где две точки - (x1;y1) и (x2;y2).
    Но лучше, если переведёшь его в каноническую форму вида Ax+By+C=0.
    3. Из канонического уравнения можно узнать нормальный (перпендикулярный) вектор к прямой. Он будет иметь вид N = (A;B), где A и B - коэффициенты из уравнения выше.
    4. У тебя получается уравнение прямой, перпендикулярной к нашему отрезку. Оно будет иметь вид (x - x0) / A = (y - y0) / B, где (x0;y0) - это точка, расстояние до которой мы хотим найти.
    5. У нас два уравнения прямых. Точка пересечения (точка проекции) будет удовлетворять им обоим, так что надо решить систему.
    Bx - Ay - B*x0 + A*y0 = 0
    Ax + By + C=0
    Система должна иметь одно решение (x;y).
    6. Находишь t = (x - x1) / (x2 - x1) = (y - y1) / (y2 - y1) Какое из двух выбрать - зависит от направления прямой. Если прямая вертикальна (x2 - x1) ~= 0, то лучше взять y, и наоборот. t покажет, где на отрезке находится проекция искомой точки.
    t = [0...1] - проекция на отрезке. Расстояние от точки до отрезка - это расстояние от (x0;y0) до (x;y).
    t < 0 - проекция лежит до начала отрезка. Расстояние от точки до отрезка - это расстояние от (x0;y0) до (x1;y1).
    t > 1 - проекция лежит за концом отрезка. Расстояние от точки до отрезка - это расстояние от (x0;y0) до (x2;y2).

    Это полное описание, думаю, алгоритм можно упростить.
    Кроме того, если длина отрезка (x1;y1)-(x2;y2) мала в сравнении с максимальным допустимым расстоянием до точки (x0;y0), то можно вообще ей пренебречь, и считать расстояние от точки до любого конца отрезка.
  • Как организовать личный dns сервер?

    Vindicar
    @Vindicar
    Категорически поддерживаю насчёт VPN. Некоторые провайдеры имеют привычку редиректить UDP:51 на свои DNS сервера невзирая на целевой адрес.
  • Почему методы класса не работают в цикле?

    Vindicar
    @Vindicar
    Uno di Palermo, я это и имел ввиду, говоря про пригодность к повторному использвоанию. Хорошо написанный класс не "забивается". =)
  • Почему методы класса не работают в цикле?

    Vindicar
    @Vindicar
    Uno di Palermo, ну не то чтобы вредно, но зачем? Если объект wikiart не пригоден к повторному использованию, то тогда да, его нужно создать заново. А если пригоден, то почему бы не использовать его для всех загрузок? Незачем делать лишнюю работу.
  • Как установить face recognition?

    Vindicar
    @Vindicar
    Ага, уже лучше. А ничего не работает - это как? Ошибка при установке? Успешная установка, но ошибка при импорте?
    Успешный импорт, но ошибка при выполнении кода?
    Приведи код (если есть) и текст ошибки.
  • Как установить face recognition?

    Vindicar
    @Vindicar
    Что ты понимаешь под "face recognition", и причём тут VS?
    Face recognition - это название для семейства технологий, если речь про конкретное ПО/библиотеку, назови её и дай ссылку.
  • Что в библиотеке Python numpy означает запись numpy.sum(img==1)?

    Vindicar
    @Vindicar
    Алан Гибизов, это удобнейшая фича numpy.
    Выражение a == 1 вернёт массив из логических элементов такого же размера, как и a. Каждый элемент будет содержать результат сравнения соответствующего элемента a с единицей.

    А далее используется тот факт, что в питоне int(True) == 1. Тогда сумма элементов логического массива будет равна количеству истинных элементов в нём.
  • Как исправить ошибку в редактировании сообщения?

    Vindicar
    @Vindicar
    await msg.edit("Abobus")
    В приведённом коде такой строки вообще нет, откуда это?
  • Как использовать текстовый документ в Selenium на python?

    Vindicar
    @Vindicar
    azukizxc, за готовым кодом туда.
    Сделай хотя бы черновой набросок, тогда можно будет что-то советовать.
  • Python FTP не могу подключиться как решить?

    Vindicar
    @Vindicar
    Александр Ананченко, а. Т.е. это просто в посте опечатка. У тебя второй параметр вместо port написано IP, вот я и подумал что ты не то передаёшь.
    Просто для надёжности уточню: точно ли на целевом хосте 95.181.157.90:21 поднят FTP и точно ли он доступен из внешней сети? Другие клиенты коннектятся?
  • Как чайнику победить certbot?

    Vindicar
    @Vindicar
    Алексей, у тебя certbot и веб-сервер на одной и той же машине крутятся? Если да, то порты тут ни причём - лишь бы запрос снаружи доходил до веб-сервера.
    А вот если на разных, то всё грустно. Либо разбираться, как делать DNS challenge - но это требует программирования, чтобы дергать API твоего DNS провайдера.
    Либо исхитряться, и монтировать каталог с одной машины на другую по сети.
    Честно, проще завести certbot там же, где веб-сервер.
  • Можно ли добавить 2 массива в цикл for?

    Vindicar
    @Vindicar
    Код немного косячный, перезаписывает a и b.
  • Как чайнику победить certbot?

    Vindicar
    @Vindicar
    Алексей, через конфиг - это один способ. Я использую lighttpd + dehydrated (клиент для letsencrypt), но принцип, имхо, один и тот же.
    Например, в конфиге lighttpd у меня есть строка
    alias.url += ( "/.well-known/acme-challenge" => "/home/letsencrypt/dehydrated/.acme-challenges" )

    которая редиректит все challenge-запросы в директорию, с которой работает dehydrated.
    Но имхо то же самое можно было бы сделать, поместив в /var/www/.well-known симлинк по имени acme-challenge, указывающий на каталог /home/letsencrypt/dehydrated/.acme-challenges .
    Конечная цель одна - чтобы HTTP-запрос по URL /.well-known/acme-challenge/чтототам добирался до каталога, с которым работает твой certbot.
  • Как чайнику победить certbot?

    Vindicar
    @Vindicar
    Алексей, ты используешь challenge вида HTTP, т.е. тебе нужно иметь поднятый веб-сервер, который готов ответить на запрос issuer'а сертификатов заранее оговоренным ответом (чтобы доказать что ты владеешь доменом, на который выдается сертификат). Как правило, скрипт типа certbot'а указывает/позволяет задать директорию, в которую он будет помещать ответы на challenge. Твоя задача - настроить веб-сервер так, чтобы эта директория была доступна по указанному URL, либо подсунув её в корневой каталог веб-сервера через симлинки, либо настроив url_rewrite, либо ещё как.
    Альтернатива - DNS challenge, где тебе потребуется по запросу скрипта создать в домене TXT запись с указанным именем и содержимым. Если твой DNS-хостер предоставляет API для программного управления записями в домене, можно попробовать его. Но HTTP challenge проще для понимания, хотя и требует наличия вебсервера.
  • Как очистить поле ввода в Tkinter?

    Vindicar
    @Vindicar
    Артём Д, английский знаете? Если нет, вставьте в гуглопереводчик get и insert. Сразу станет понятно. X)
    get (получить) возвращает текущее содержимое поля ввода, insert (вставить) вставляет строку в указанное место текущего содержимого. Если содержимого нет, то можно вставить в начало (позиция 0), тем самым задав это содержимое.
  • Поиск списка в базе данных, как осуществить?

    Vindicar
    @Vindicar
    artemk1ter, проблематично, так как в IN придётся передавать список значений. Хотя это можно обойти, синтезировав текст запроса самому.
    cursor.execute("SELECT word FROM words WHERE word in (" + ','.join(['?']*len(wordlist)) + ");", wordlist)

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

    Vindicar
    @Vindicar
    volodik587, ну да, но имей ввиду, у тебя еще и цикл есть
    for user in result:
    Он тоже сломается.
    Просто имей ввиду что у тебя только один список id юзеров, и перепиши код с учетом этого.
  • Ошибка при рассылке на юзеров,что может быть?

    Vindicar
    @Vindicar
    volodik587, причем тут это?
    Я написал в чём проблема. Из-за двойного вызова .fetchall() в call_sp будет пустой список вместо результата запроса. Проверь и убедись. А дальше ты пытаешься обратиться к нулевому элементу этого пустого списка и ловишь эксепшен.