Задать вопрос
  • Делаю граббер с помощью curl, практически всё работает. Но определенные ссылки не открывает?

    @Zanak
    Параметры разве не должны собираться с помощью "&"?
    Я бы еще посмотрел на эту функцию, для подготовки параметров перед отправкой.
    Ответ написан
    Комментировать
  • Циклы. While, do while, for, чем отличаются?

    @Zanak
    Как - то, почитал я ответы коллег, и остался разочарован. Понятно, что вопрос не простой, а очень простой, но можно и по аккуратнее в изложении. В общем, мои 5 копеек.
    Любой цикл - это кусок кода, который обычно называют телом цикла, и который мы желаем выполнить несколько раз. Количество повторений может быть заданно заранее, например: цикл от 0 до 10, зависеть от данных, например: для каждого элемента массива или зависеть от значения, которое мы в теле цикла вычисляем, например: пока f(x) > 0 выполнять. По крайней мере, во всех известных мне языках программирования, есть оператор досрочного выхода из цикла.
    while. Цикл с предварительным условием. Выполняется пока условие истинно. Проверка происходит до исполнения тела цикла. Если условие изначально ложно, то тело не выполнится ни разу. Если условие ни когда не станет ложным, то мы получим бесконечный цикл. Распространенные ошибки новичков, при использовании этого цикла:
    - условие не зависит от переменных, которые изменяются в теле цикла, и оно всегда получается истинным
    - условие ни когда не станет ложным, в силу его свойств, например: X * X >= 0 всегда верно
    Пример на php:
    $i = 1;
    while ($i <= 10) {
        echo $i;
        $i++;
    }

    do ... while. Цикл с постусловием. Отличие от предыдущего в том, что тело цикла исполняется хотя бы один раз, и после этого происходит проверка условия выхода из цикла. К типичным ошибкам предыдущего вида циклов добавляется то, что этот цикл гарантированно исполняется один раз, что не всегда желательно.
    В этом примере цикл отработает один раз, не смотря на то, что условие ложно:
    $i = 0;
    do {
        echo $i;
    } while ($i > 0);

    for. Чаще всего этот оператор описывает цикл с фиксированным количеством повторений. Вот так он может выглядеть, например, для php:
    for ($i = 1; $i <= 10; $i++) {
        echo $i;
    }

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

    @Zanak
    Не очень понятно, зачем вам питон, если вы на нем не разрабатываете.
    Но обо всем по порядку:
    - язык ставится в любом случае. php, python, ruby, что-то еще, в зависимости от того, какое приложение вы разворачиваете.
    - вебсервер вам в любом случае ставить. апач, нжинкс, лайти или что - то еще, это дело личных предпочтений.
    - БД тоже ставится по определению. установка соответствующего драйвера - обязательная процедура для любого языка.
    - установка сервера приложений. это тоже общая часть для любого языка. у каждого языка, почти наверняка, есть свое, специфичное решение. для python это gunicorn, для ruby unicorn, для perl, к примеру starman или twiggy, для php это php-fpm. можно использовать пакет uwsgi, который через плагины поддерживает несколько языков, чтобы один раз разобраться с настройками и потом просто пользоваться.
    - менеджер пакетов. это, если и не общее для всех языков, достаточно типичное решение. npm для ноды, cpan для perl, composer для php, например.
    - установка песочницы. для питона это virtualenv. этот инструмент позволяет дать запускаемым приложениям необходимые пакеты, не выполняя их установку в системный каталог. каждому приложению нужные именно ему версии пакетов! питон здесь тоже не уникален. для php или ruby, например, есть аналогичные инструменты. к стати, если на сервере будет жить единственное приложение, то этот шаг можно пропустить, и все зафигачить в системный каталог.
    - и только теперь установка самого фреймворка: pip install django. дальше по инструкции развертывания из документации к фреймворку, указать базу, накатить миграции ...

    Большая часть шагов по развертыванию вашего приложения является общей для многих языков и многих фреймворков. Может стоит поучить матчасть?
    Ответ написан
    Комментировать
  • Как вызвать функцию, используя регулярные выражения?

    @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, графики разноцветные и в точке пересечения графиков достаточно найти хотя бы один из них, то можно поступить по тупому, "взглянуть" на цвет точки под указателем.
    Ответ написан
    Комментировать