• Как вызвать функцию, используя регулярные выражения?

    @Zanak
    Вопрос конечно улыбнул. :)
    Но если серьезно, то польза регекспов здесь зависит от задачи. Если имена функций вводятся явно, и список параметров везде одинаков, то и регекспы не нужны.
    Кроме предложенного решения влоб, со словарем, можно вспомнить про функции globals/locals.
    Можно предложить заглянуть в sys.modules.
    А еще можно вспомнить про либу importlib и функцию getattribute, если требуется подгружать функции из еще не импортированного модуля.
    Ответ написан
  • Какой выбрать python web framework где datasource является RESTful API?

    @Zanak
    Что есть ORM? Отображение логических или физических сущностей БД на объекты программы.
    Источник данных - это сервис. Драйвер соединения - ваш код, который отправляет запросы в чужой API и получает ответ, обрабатывая ошибки, когда они возникают. В чем собственно проблема?
    Ну да, вам придется явно закодировать объекты, которые предоставят интерфейс для взаимодействия с данными API вместо магии метапрограммирования django orm. Или простота вас и смущает?
    Оберните данные внешнего API в классы, разбив их согласно логике использования, и пользуйте любой привычный вам фреймворк. Можете даже привычные active record или repository реализовать, если в контексте задачи это оправдано.
    Ответ написан
  • Можно ли передавать ссылку на атрибут класса?

    @Zanak
    Возможно не совсем ответ на ваш вопрос, но поиск по запросу "PyQt MVC example" не поможет отцу русской демократии? :)
    Находится например такая ссылка.. Статья старенькая, но надеюсь адаптировать код все таки возможно.
    Ответ написан
    3 комментария
  • Основы, алгоритмы, проектирование. Как начать?

    @Zanak
    Похоже у вас в голове все смешалось.
    1. Что такое разработка программ? Думаю, ни чему не противоречит сказать, что это написание кода на избранном языке, направленное на решение задачи, поставленной перед разработчиком. Решение может использовать сколько угодно много алгоритмов, либо не использовать вовсе, кроме тех, что реализованы в стандартной библиотеке языка.
    2. Алгоритмы? Алгоритм - это формальное описание решения проблемы, как правило, не привязанное ни к одному из языков программирования, и не являющееся самостоятельной программой. Например: поиск всех подстрок в тексте - это алгоритм, который может быть использован в программе, но сам программой не является.
    3. Структуры данных? Структуры данных - это способ организации информации в памяти и/или на диске, для более оптимального ее использования, или применения к ней алгоритмов. Например: графы и алгоритмы на них.
    4. Шаблоны проектирования? Шаблоны проектирования, в оригинале design patterns - это решения типовых ситуаций при проектировании приложений. Речь идет о достаточно крупных приложениях, хотя сложно выделить четкий критерий, когда приложение можно назвать крупным. В мире web приложений самый известный шаблон - это MVC, хотя вебом его применимость не исчерпывается.

    С чего начать:
    1. Знакомство с языком. Без знания языка все остальное бессмысленно. Начать лучше с известных языков, по которым много литературы и большое комюнити: C/C++, C#, Java, php7, python, JavaScript. Не гонитесь сразу за несколькими языками. Не гонитесь за новомодными языками, вроде go, rust или elixir, они решают проблемы, которые вам еще только предстоит понять. Не гонитесь за экзотическими языками, вроде lisp, haskel, erlang или ocaml, у них есть свои почитатели, но это не самый простой способ начать программировать. Выберете, что вам ближе, компилируемые, или скриптовые, со строгой типизацией или динамической, и вперед.
    2. Потренируйтесь в реализации отдельных алгоритмов. Это позволит вам закрепить знание выбранного языка, расширит ваш кругозор и научит выделять эти алгоритмы в процессе решения более сложных задач. Здесь фундаментальный труд Дональда Кнута "Искуство программирования" вам в помощь, хотя одной этой книгой тема конечно не исчерпывается.
    3. Теперь можно браться за задачи посложнее. Один нюанс, если вы пойдете в веб разработку: с нуля системы сейчас ни кто не пишет, все используют фреймворки. Возможно, было бы не плохо, покопаться в устройстве парочки таких продуктов, а в идеале, попробовать построить свой велосипед, чтобы лучше понять что, и как устроено и работает.
    Ответ написан
    Комментировать
  • Разложить количество чеков по дням, алгоритм?

    @Zanak
    Если вам действительно нужен ответ на ваш вопрос, то соберитесь, и попробуйте сформулировать его еще раз :)
    Есть какое - то количество чеков, это понятно.
    Есть график работы, это тоже понятно.

    Можно посчитать среднее количество чека в час, и перемножить на часы в каждый день.
    Но нужно чтобы было целое число в каждом дне.

    Можно посчитать, а можно не считать. Что в итоге нужно? Оценить количество покупателей в разные моменты времени? Или правдоподобно раскидать количество чеков по дням?
    Если приводите пример расчета, то будьте аккуратнее в его изложении. В исходных данных фигурируют цифры 4, 10 и 12 часов, откуда взялись 18?

    Если говорить об идее с назначением весов дням, я попробовал бы так:
    - посчитал веса в группе 10+10+10+4+4, и раскидал в их соответствии то, что осталось от группы 12+12
    - далее распределил бы остатки от группы 10+10+10 по паре 4+4
    - неделимый остаток от группы 4+4 (это от 0 до 3 чеков) просто отбросил бы
    Ответ написан
    Комментировать
  • Как отследить скрытые post/get запросы?

    @Zanak
    Я бы присмотрелся к тому, что отдается и куда:
    - первое, что я начал бы искать в коде формы, это csrf токен, вставлять который сейчас считается правилом хорошего тона.
    - как формируется action формы, если зайти на страницу с отправкой сообщения и нажать "обновить". иногда целевой url формы имеет рандомный компонент, который тоже может использоваться как маркер.
    - можно ли перейти на страницу отправки сообщения по закладке в буркмарке. если можно, то следует проверить, сохраняются ли при этом сообщения после отправки. если нет, среди прочего, может проверятся и значение реферера
    - так же, я бы посмотрел, сколько полей, и скрытых и открытых есть в форме, и сколько их на самом деле передается.
    - иногда помогает заглянуть в localstorage и cookies.

    Если все это не помогло, то вам повезло встретить что-то интересное, вооружайтесь DevTools и начинайте изучать скрипты по порядку, кто грузится, в каком порядке, и что делает. Здесь хорошо помогает поиск имен js файлов в сети, чтобы отбить рассмотрение известных js пакетов.
    Ответ написан
    Комментировать
  • Как освоить 1C технику-программисту с нуля?

    @Zanak
    Я таки не понял, программист "нулевый", или знакомство с 1С "на нуле"?
    Если программист нулевый, то начните с чего - то попроще, PHP или JS. Учебников полно, попрактиковаться можно и на самостоятельных поделках, и на чужих проектах, гитхаб вам в помощь. Освоив программирование в принципе, можно переходить к 1С.
    Если задача именно "освоить 1С". То начните с запроса вроде "1c учебная конфигурация" к гуглу. Дальше - осваивайте основы бухгалтерии, и основы собственно программирования для 1С бухгалтерии.
    Ответ написан
    Комментировать
  • Flask, как вызвать метод и не дожидаясь его ответа вернуть ответ в jsonify?

    @Zanak
    Асинхрон на базе очередей редиски не вариант? Я про что - то подобное этому.
    Ответ написан
    Комментировать
  • Как вытащить нужные данные из таблицы docx?

    @Zanak
    Чтобы видеть, что именно у вас не получается, нужно видеть код. Открываю документацию, и вижу: создаем инстанс документа, передав путь до файла, доступ к существующим элементам получаем через inline_shapes, paragraphs, sections или tables, новые создаем с помощью add_* методов. Каждый элемент страницы содержит, либо коллекции вложенных элементов, либо свойство text, которое, скорее всего вам и нужно.
    В вашем случае порядок действий должен быть примерно такой:
    - читаем документ
    - перебираем таблицы (свойство tables документа), пока не найдем нужную Table (критерием соответствия может быть, например, наличие строки "№ ауд." в соответствующих ячейках первой строки, метод cell у таблицы вам в помощь)
    - перебираем строки найденных таблиц, выбирая из ячеек соответствующие данные в случае заголовка таблицы или строки с предметом
    - по мере нахождения, добавляем в результат новые данные
    - закрываем документ и показываем все найденное
    Ответ написан
    Комментировать
  • Как привязать программу к сайту?

    @Zanak
    Смотрите в сторону использования API KEY. Каждому розданному API KEY позволяете создать/привязать одного пользователя. Программа у пользователя спрашивает имя и пароль, дергает сервер для регистрации/привязки, хоть простым post-ом, хоть специальный api запилите.
    Дальнейшая судьба API KEY - на ваше усмотрение. Например, его можно использовать в процедуре восстановления пароля, как дополнительный токен авторизации.
    Ответ написан
    Комментировать
  • Асинхронное выполнение в одном скрипте на Python?

    @Zanak
    Не смотрите в сторону асинхрона. Питонячий асинхрон - это кооперативная многозадачность на одном потоке исполнения.
    Если все делать руками, то threading или multiprocessing вам в помощь.
    Можно попробовать подтянуть django+celery или flask+rq, если вариант с веб приложением приемлем.
    Ответ написан
    Комментировать
  • Как можно обходить защиты сайтов от ботов?

    @Zanak
    Задача в общем случае не имеет решения, конечно, если договорится с владельцем сайта - не вариант.
    Да, ты можешь на питоне научится подделывать заголовки запросов, распознавать капчу, можешь даже качественно строить в памяти dom и обрабатывать его js, загруженным со страниц целевого сайта, но это работает только в частных случаях. Как только появляется интерес не дать тебе утащить данные, сразу начинается гонка, один придумывает способы, как обламать халявщика, другой - как эти проверки обойти. Авита, как пример, много внимания уделила, а может и уделяет до сих пор, противостоянию с пауками, и, в моем случае, найденные решения жили от нескольких дней, до нескольких месяцев, а потом все равно отпадали.
    Если, все таки, желание не отпало, можно попробовать перестать прикидываться браузером и стать им на самом деле. Речь про написание плагинов, которые будут приглядывать за страницей и искать на ней нужные данные, собирая их в памяти на отдельной вкладке, или отправляя на твое api для сохранения. Можно попробовать поиграться со встраиванием браузера в твою программу, но я игрался только со встраиванием ишака в прогу на дельфях, да и то, очень давно.
    Ответ написан
    Комментировать
  • PostgreSQL не работает автоинкремент id?

    @Zanak
    Запрос отправляет 3 значения, а в сообщении 4 элемента, возможно вмешивается ORM?
    Попробуйте явно задать id, чтобы запрос приобрел такой вид:
    INSERT INTO user_artist (id, "userId", "artistId", added) 
    VALUES (default, $(userId), $(artistId), $(added)) 
    ON CONFLICT DO NOTHING;

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

    @Zanak
    Если скачивается страница с расширением php, значит сервер, с которого она скачивается, для работы с php файлами не настроен, или настроен не верно.
    Если на попытку открыть абсолютно любой сайт скачивается index.php, значит кто - то вас перенаправляет на эту страничку.
    Попробуйте указать адрес ресурса полностью, например https://ya.ru. Сейчас у браузеров дурацкое поветрие, по крайней мере у некоторых, если они не распознают ввод в строке адреса как правильный, они считают, что вы хотите эту фразу поискать. Если страница открылась правильно, копайте в сторону настроек поиска, у вас там ерунда какая - то.
    В противном случае, попробуйте запустить другой браузер. Если это помогло, то проверяйте установленные расширения в вашем, с большой вероятностью дело в них.
    Если опять мимо, можно один раз позволить этой странице сохраниться, чтобы потом, в закачках, посмотреть, с какого адреса она скачивалась.
    Возможные варианты:
    - адрес вашей сетки (чаще всего дома используется что-то вроде 192.168.Х.Х), и тогда надо вспоминать, чего ставили на свой комп, я обычно сношу все, чего сам не ставил, или назначение чего мне не понятно
    - адрес вашего провайдера, тогда это повод обратиться к нему за поддержкой
    - совсем левый ресурс, тогда смотрите в списке своего софта на тему программ, которые вмешиваются в трафик, это могут быть разного рода прокси, vpn, интернет защитники, или просто непонятные проги, которых вы не ставили. Бороться с ними так же, как и в первом варианте, деинсталляция.
    Ответ написан
    Комментировать
  • Как определить, принадлежат ли координаты одному из графиков?

    @Zanak
    Если речь именно про UI, графики разноцветные и в точке пересечения графиков достаточно найти хотя бы один из них, то можно поступить по тупому, "взглянуть" на цвет точки под указателем.
    Ответ написан
    Комментировать
  • Как создавать объект с большим количеством свойств?

    @Zanak
    Я бы разбил задачу на 2 части: создание объекта и его использование.
    Создание объекта:
    - Кроме обязательных, могут быть условно обязательные (это в случае, когда задание одного параметра делает обязательным еще какое - то количество параметров) и опциональные.
    - Когда все параметры обязательны, то пишем конструктор.
    - Инициализацию условно обязательных параметров может иметь смысл обернуть вспомогательным классом, который можно сделать доступным только в контексте основного класса, и в его реализацию включить проверку переданных параметров.
    - Постройку классов с условно обязательными и опциональными параметрами, кроме прямого разбора параметров, можно реализовать с помощью фабрик, которые будут содержать меньшее число параметров, и устанавливать опущенные в корректные значения по умолчанию.
    - Вместо фабрики можно скрыть ваш класс за фасадом с более простым интерфейсом.
    - Так же, можно создать несколько методов постройки объекта, а конструктор реализовать в виде диспетчера, который вызовет нужный, в зависимости от переданных параметров.
    Использование объетов:
    - Для условно обязательных параметров не избежать создания методов, которые принимают весь кортеж связанных между собой параметров. Это вместо отдельных сеттеров для каждого свойства.
    - Кроме set/get методов доступа можно использовать прямой доступ к свойствам, всем или некоторым, особенно, если есть взаимная зависимость параметров, и создания полноценного валидатора для всего набора параметров конструктора не избежать.

    Если отвечать наиболее обще, то я бы поступил как - то так.
    Ответ написан
    Комментировать
  • Можно ли зашифровать часть кода C?

    @Zanak
    Сразу оговорюсь, для микроконтролеров я не писал. Поэтому идеи в рамках понимания задачи:
    - Все выполнить на сервере и отдать готовый образ?
    - На сервере компилим, на клиенете линкуем? Ни ахти какая защита, но ленвых любопытствующих это отпугнет.
    - Если все таки без сорцов не обойтись, под пингвином, с gcc канает такой финт: cat ./main.c | gcc -o main -xc -
    Запустить процесс под уравлением своей программы и нагадить ему в stdin налету расшифрованным кодом вроде легко. Дальше линковка обычным порядком.
    Ответ написан
  • Должны ли переменные окружения удаляться после завершения сеанса?

    @Zanak
    Каждый процесс в системе получает набор переменных окружения от своего предка.
    Исходные значения, которые получают процессы стартующие сразу после загрузки ОС задаются в свойствах системы, если речь про windows, или файле конфигурации, если мы говорим о unix like системе.
    Кроме общесистемных настроек переменных окружения, есть еще пользовательские переменные, которые в windows настраиваются рядом с системными переменными, а в unix есть варианты, но скорее всего это будет .bashrc в домашнем каталоге пользователя, если говорить о linux и его bash shell. Пользовательские настройки читаются процессом, выполняющим авторизацию пользователя, перед тем, как запустить его командную оболочку. Когда пользователь наконец получает возможность начать работать с компом, он получает объединенный набор переменных окружения.
    Все процессы, которые порождает пользователь, получают его версию переменных окружения. Если процесс программно изменяет любое значение, то это действует только для этого процесса, и всех процессов, которые он породит после.
    А теперь ответ на ваш вопрос. :) Если вы изменяли настройки только в памяти, то и действовали они, пока был жив процесс, для которого вы это делали. Завершили процесс непосредственно, или вышли из системы и вошли вновь - начинайте заново.
    Ответ написан
    Комментировать